繁体   English   中英

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

[英]Use grok to add the log filename as a field in logstash

我正在使用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
}

但它似乎不起作用:添加了app字段,但其值为%{app} (未替换)。

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

非常感谢

好的,找到了。 grok默认打破匹配。 所以第一场比赛很好,它跳过第二场比赛。

我这样解决了:

filter {
  if [type] == "nginx_access" {
    grok { 
      match => { "message" => "%{COMBINEDAPACHELOG}" }
      match => { "path" => "%{GREEDYDATA}/%{GREEDYDATA:app}.access.log" }
      break_on_match => false
    }
  }
}

我发现如果日志文件中存在不匹配的行,则更希望使用2个grok块。

filter {
  if [type] == "nginx_access" {
    grok { 
      match => { "path" => "%{GREEDYDATA}/%{GREEDYDATA:app}.access.log" }
    }
    grok { 
      match => { "message" => "%{COMBINEDAPACHELOG}" }
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM