Regex 使用grok将日志文件名作为字段添加到logstash中
我使用&Logstash将访问日志从Nginx发送到elasticsearch。我给Logstash我所有的访问日志(使用通配符,效果很好),我想得到文件名(确切地说是其中的一部分)并将其用作字段 我的配置如下:Regex 使用grok将日志文件名作为字段添加到logstash中,regex,logstash,logstash-grok,Regex,Logstash,Logstash Grok,我使用&Logstash将访问日志从Nginx发送到elasticsearch。我给Logstash我所有的访问日志(使用通配符,效果很好),我想得到文件名(确切地说是其中的一部分)并将其用作字段 我的配置如下: input { file { path => "/var/log/nginx/*.access.log" type => "nginx_access" } } filter { if [type] == "nginx_access" {
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}
(未替换)
我尝试了不同的方法,但没有效果。我可能错过了什么有什么想法吗?
非常感谢好的,找到了<默认情况下,code>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}" }
}
}
}
我要注意的是,使用logstash forwarder(又名lumberjack)转发的邮件所使用的字段不是
路径
,而是文件
。其他一切都很完美。