ELK 过滤插件grok对nginx日志格式化

网友投稿 319 2022-11-02


ELK 过滤插件grok对nginx日志格式化

默认nginx的访问日志是没有格式的,日志格式如下

log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$' '"$"$- - [06/Jan/2021:10:43:15 +0800] "GET /favicon.ico HTTP/1.1" 404 3650 ""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36" "-"

这种非结构化的非常适合grok去匹配

打开kibana去测试一下grok能不能匹配到这条日志,因为有些日志里面字段是有值的,有些没有值的使用-,所以grok里面匹配使用了

%{IPV4:remote_addr} - (%{USERNAME:remote_user}|-) \[%{HTTPDATE:time_local}\] \"%{WORD:request_method} %{URIPATHPARAM:request_uri} HTTP/%{NUMBER:%{NUMBER:%{NUMBER:body_bytes_sent} \"%{GREEDYDATA:\"%{GREEDYDATA:\"(%{IPV4:~]# cat /etc/filebeat/filebeat.yml filebeat.inputs:- type: log enabled: true paths: - /var/log/nginx/*.log tags: ["nginx"] fields_under_root: true fields: project: microservice app: productoutput.logstash: hosts: ["192.168.179.102:5044"]

[root@localhost ~]# cat /usr/local/logstash/conf.d/test.confinput { beats { host => "0.0.0.0" port => 5044 }}filter { grok { match => { "message" => "%{IPV4:remote_addr} - (%{USERNAME:remote_user}|-) \[%{HTTPDATE:time_local}\] \"%{WORD:request_method} %{URIPATHPARAM:request_uri} HTTP/%{NUMBER:%{NUMBER:%{NUMBER:body_bytes_sent} \"%{GREEDYDATA:\"%{GREEDYDATA:\"(%{IPV4:} } if [app] == "product" { mutate { add_field => { "[@metadata][target_index]" => "microservice-product-%{+YYYY.MM}" } }} else if [app] == "gateway" { mutate { add_field => { "[@metadata][target_index]" => "microservice-gateway-%{+YYYY.MM.dd}" } }} else { mutate { add_field => { "[@metadata][target_index]" => "unknown-%{+YYYY}" } } } }output { elasticsearch { hosts => "192.168.179.102:9200" index => "%{[@metadata][target_index]}" } }

可以看出关键字段都过滤出来了,可以对相关的字段进行查询了,也可以根据该字段做可视化仪表盘


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:解决Feign切换client到okhttp无法生效的坑(出现原因说明)
下一篇:ELK logstash配置示例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~