使用grok-match匹配日志+output时format调整日志格式

不修改nginx日志格式的情况下,使用logstash filter-grok,匹配nginx日志格式后转为json格式存入kafka。

input {
  file {
    type => "access-log"
    path => ["/var/log/nginx/access.log"]
  }
}

filter {
  if [type] == "access-log" {
    grok {
      match => { "message" => '%{IPV4:remote_ip} \- %{HTTPDUSER:remote_user} \[%{HTTPDATE:timestamp}\] "%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:status} %{NUMBER:bytes} %{QS:referer} %{QS:useragent} %{USER:gzipratio}'}
    }
  }
}

output {
  if [type] == "access-log" {
    kafka {
      bootstrap_servers  => "ip1:9092,ip2:9092,ip3:9092"
      topic_id => "nginx-access-log"
      codec => plain {
        format => '{"remoteip":"%{remote_ip}","remoteuser":"%{remote_user}","timestamp":"%{timestamp}"},"method":"%{method}","request":"%{request}","httpversion":"HTTP/%{httpversion}","status":"%{status}","bytes":"%{bytes}","referer":%{referer},"useragent":%{useragent},"gzipratio":"%{gzipratio}"}'
      }
    }
  }
}

grok对nginx日志内容进行匹配

logstash内置的grok匹配规则都在此目录下,可以服用已有的正则表达式匹配日志内容:

有很多预置的正则表达式,其名称可能与要匹配的值的命令不通,但这完全不影响你复用它。比如:内置的USER的正则表达式,可以匹配到数字、字母、下划线、中划线……当你想要匹配的值也可以用这个正则来匹配时,完全可以直接复用USER。

logstash-8.6.1/vendor/bundle/jruby/2.6.0/gems/logstash-patterns-core-4.3.4/patterns/legacy/

需要注意的是,match中匹配nginx log内容时,一个符号都不能错,要完全匹配日志内容。否则后续引用匹配到的变量时,变量将无法正确被使用。

grok {

match => { “message” => ‘%{IPV4:remote_ip} \- %{HTTPDUSER:remote_user} \[%{HTTPDATE:timestamp}\] “%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}\” %{NUMBER:status} %{NUMBER:bytes} %{QS:referer} %{QS:useragent} %{USER:gzipratio}’}

}

format将输出格式调整为json格式

可以人为将匹配到的变量,以json的格式输出到kafka。

codec => plain {

format => ‘{“remoteip”:”%{remote_ip}”,”remoteuser”:”%{remote_user}”,”timestamp”:”%{timestamp}”},”method”:”%{method}”,”request”:”%{request}”,”httpversion”:”HTTP/%{httpversion}”,”status”:”%{status}”,”bytes”:”%{bytes}”,”referer”:%{referer},”useragent”:%{useragent},”gzipratio”:”%{gzipratio}”}’

}


版权声明:本文为qq522044637原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq522044637/article/details/129337015