[英]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.