是否可以使用grok和mutate将消息匹配到logstash中的新字段?
示例日志:
"<30>Dec 19 11:37:56 7f87c507df2a[20103]: [INFO] 2018-12-19 16:37:56 _internal (MainThread): 192.168.0.6 - - [19/Dec/2018 16:37:56] \"\u001b[37mGET / HTTP/1.1\u001b[0m\" 200 -\r"
我正在尝试创建一个新的键值,将container_id与7f87c507df2a匹配。
filter {
grok {
match => [ "message", "%{SYSLOG5424PRI}%{NONNEGINT:ver} +(?:%{TIMESTAMP_ISO8601:ts}|-) +(?:%{HOSTNAME:service}|-) +(?:%{NOTSPACE:containerName}|-) +(?:%{NOTSPACE:proc}|-) +(?:%{WORD:msgid}|-) +(?:%{SYSLOG5424SD:sd}|-|) +%{GREEDYDATA:msg}" ]
}
mutate {
add_field => { "container_id" => "%{containerName}"}
}
}
生成的日志文件将呈现此内容,其中没有从grok引用containerName的值,它只是一个字符串文字:
"container_id": "%{containerName}"
我正在尝试创建conf:
"container_id": "7f87c507df2a"
很显然,不是从grok链接containerName的值。我想做的事甚至有可能吗?
答案 0 :(得分:2)
如评论中所述,我的骗子模式不正确。对于可能需要这篇博客帮助的人,请here来减少构建模式的时间。
这是工作快照:
filter {
grok {
match => [ "message", "\A%{SYSLOG5424PRI}%{SYSLOGTIMESTAMP}%{SPACE}%{BASE16NUM:docker_id}%{SYSLOG5424SD}%{GREEDYDATA:python_log_message}" ]
add_field => { "container_id" => "%{docker_id}" }
}
}