侧边栏壁纸
  • 累计撰写 129 篇文章
  • 累计创建 27 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

filebeat使用es的pipeline处理Nginx普通日志

梁来福
2024-05-16 / 0 评论 / 0 点赞 / 8 阅读 / 3694 字
温馨提示:
本文最后更新于 2024-05-16,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

如果想要无侵入的收集到Nginx的Json格式日志,意思就是不改动Nginx任何配置。通过filebeat和es的pipline结合可以做到。

Grok规则测试

先获取到Nginx普通日志格式,示例:

172.16.49.1 - - [16/May/2024:17:29:57 +0800] "GET /favicon.ico HTTP/1.1" 404 555 "http://172.16.49.130/hah" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" "-"

表达式生成

如果不会写,可以使用ChatGpt生成

%{IP:client} - - \[%{HTTPDATE:timestamp}\] "%{WORD:method} %{URIPATH:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} %{NUMBER:bytes} "%{URI:referrer}" "%{DATA:user_agent}" "%{DATA:unknown}"

检测

进入Kibana主页,Manage and Administer the Elastic Stack -> 点击Console -> Grok Debugger,输入原始日志和表达式,点击Simulate

Sample Data:Nginx的普通日志,原始的数据

Grok Pattern:Grok的表达式

可以正常输出Json格式的日志,表明Grok表达式正确。

ES创建预处理器

使用代码创建。进入Kibana主页,Manage and Administer the Elastic Stack -> 点击Console -> 输入代码创建pipeline预处理器

PUT _ingest/pipeline/pipeline-nginx-access
{
  "description": "Pipeline to parse Nginx access logs",
  "processors": [
    {
      "grok": {
        "field": "message",
        "patterns": [
          "%{IPORHOST:client_ip} - - \\[%{HTTPDATE:timestamp}\\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{NUMBER:status} %{NUMBER:bytes} \"%{DATA:referrer}\" \"%{DATA:user_agent}\" \"%{DATA:unknown}\""
        ]
       }
      },
      {
        "remove": {
          "field": "message"
        }
      }
  ]
}
GET _ingest/pipeline

filebeat指定使用es的预处理器

配置文件

processors:过滤掉ecs和log字段,不收集

cat > /etc/filebeat/filebeat.yml << 'EOF'
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["access"]

- type: log
  enabled: true
  paths:
    - /var/log/nginx/error.log
  tags: ["error"]

processors:
    - drop_fields:
        fields: ["ecs","log"]

output.elasticsearch:
  hosts: ["172.16.49.130:9200"]

  pipelines:
    - pipeline: "pipeline-nginx-access"
      when.contains:
        tags: "access"

  indices:
    - index: "nginx-access-%{[agent.version]}-%{+yyyy.MM}"
      when.contains:
        tags: "access"
    - index: "nginx-error-%{[agent.version]}-%{+yyyy.MM}"
      when.contains:
        tags: "error"

setup.ilm.enabled: false
setup.template.enabled: false
EOF

重启filebeat

systemctl restart filebeat.service
systemctl status filebeat.service

ES查看

此时查看es的日志数据,在没有改动Nginx任何配置的情况下,Nginx的普通格式日志已经被转换成Grok表达式制定格式的Json格式收集,而且不需要的字段还能过滤掉不收集。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
博主关闭了所有页面的评论