我在logstash配置文件中运行以下过滤器:
filter {
if [type] == "logstash" {
grok {
match => {
"message" => [
"\[%{DATA:timestamp}\]\[%{DATA:severity}\]\[%{DATA:instance}\]%{DATA:mymessage}, reason:%{GREEDYDATA:reason}",
"\[%{DATA:timestamp}\]\[%{DATA:severity}\]\[%{DATA:instance}\]%{GREEDYDATA:mymessage}"
]
}
}
}
}
有点有用:
我真正想要的是让现在%{mymessage}
的文本成为${message}
但是当我向这个grok添加任何类型的mutate命令时它停止工作(顺便说一下,如果有一个日志这告诉我什么是破碎的?我没有看到它......对于没有详细记录的记录解决方案具有讽刺意味。)
这是我尝试的内容:
filter {
if [type] == "logstash" {
grok {
match => {
"message" => [
"\[%{DATA:timestamp}\]\[%{DATA:severity}\]\[%{DATA:instance}\]%{DATA:mymessage}, reason:%{GREEDYDATA:reason}",
"\[%{DATA:timestamp}\]\[%{DATA:severity}\]\[%{DATA:instance}\]%{GREEDYDATA:mymessage}"
]
}
mutate => {
replace => [ "message", "%{mymessage}"]
remove => [ "mymessage" ]
}
}
}
}
总而言之,我想了解:
答案 0 :(得分:2)
使用overwrite
选项是最佳解决方案,但我认为无论如何我都会直接解决您的几个问题。
-l
或--log
选项的init脚本运行它。 / var / log / logstash是典型的。mutate
是一个自己的过滤器,而不是grok
的一部分。您可以这样做(或使用rename
代替replace
+ remove
):grok { ... } mutate { replace => [ "message", "%{mymessage}" ] remove => [ "mymessage" ] }
答案 1 :(得分:1)
我会采用不同的方式。对于您要做的事情,overwrite
选项可能更合适。
这样的事情:
grok {
overwrite => "message"
match => [
"message" => [
"\[%{DATA:timestamp}\]\[%{DATA:severity}\]\[%{DATA:instance}\]%{DATA:message}, reason:%{GREEDYDATA:reason}",
"\[%{DATA:timestamp}\]\[%{DATA:severity}\]\[%{DATA:instance}\]%{GREEDYDATA:message}"
]
]
}
这'用'grokked'位替换'message'。
我知道这并没有直接回答你的问题 - 我可以说的是,当你开始使用logstash时,它会写入STDOUT
- 至少在我正在使用的版本上 - 我正在捕获它写入文件。在这里,它报告了一些错误。
logstash有一个-l
选项,允许您指定要使用的日志文件 - 这通常会显示解析器中发生了什么,但请记住,如果某些内容与规则不匹配,则不一定会告诉你它为什么没有。