使用grok将日志文件名添加为logstash中的字段

tch*_*hap 10 regex logstash logstash-grok

我正在使用Grok和Logstash将访问日志从Nginx发送到Elastic搜索.我给Logstash所有的访问日志(使用通配符,效果很好),我想得到文件名(确切地说是其中的一部分)并将其用作字段.

我的配置如下:

input {
  file {
    path => "/var/log/nginx/*.access.log"
    type => "nginx_access"
  }
}

filter {
  if [type] == "nginx_access" {
    grok { 
      match => { "message" => "%{COMBINEDAPACHELOG}" }
      match => { "path" => "%{GREEDYDATA}/%{GREEDYDATA:app}.access.log" }
      add_field => { "app" => "%{app}" }
    }
  }
}
output{
   # whatever
}
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用:该app字段已添加,但具有%{app}(未替换)的值.

我尝试了不同的东西但无济于事.我可能会遗漏一些东西......有什么想法?

非常感谢

tch*_*hap 14

好的,找到了.grok默认情况下中断匹配.所以第一场比赛很好,它跳过第二场比赛.

我这样解决了:

filter {
  if [type] == "nginx_access" {
    grok { 
      match => { "message" => "%{COMBINEDAPACHELOG}" }
      match => { "path" => "%{GREEDYDATA}/%{GREEDYDATA:app}.access.log" }
      break_on_match => false
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 我只是注意到用于使用logstash-forwarder(也称为lumberjack)转发的消息的字段不是`path`而是`file`.其他一切都很完美. (2认同)