【发布时间】:2018-12-19 15:20:31
【问题描述】:
是否可以使用 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}"}
}
}
生成的日志文件呈现了这个,其中 containerName 的值没有从 grok 中引用,它只是一个字符串文字:
"container_id": "%{containerName}"
我正在尝试创建 conf:
"container_id": "7f87c507df2a"
显然 containerName 的值没有从 grok 链接。我想做的甚至可能吗?
【问题讨论】:
-
我不确定我是否理解这个问题,但如果是这样,一个简单的
filter { mutate { copy => { "containerName" => "container_id" } } }应该可以完成这项工作 -
您可以尝试的另一件事是将
add_field => { "container_id" => "%{containerName}"}直接添加到grok部分 - 但如果“containerName”在 grok 模式中不匹配,则键/值对不会添加到结果中。 -
@Quali 都没有工作,有没有更简单的方法来测试我的 grok 匹配是否正常工作?但是,logstash 的日志中似乎没有错误。我用示例日志文件和我正在尝试做的事情更新了帖子
-
您的模式似乎与示例日志不匹配。
标签: logstash logstash-grok logstash-configuration