Logstash 摸索然后变异?
我正在日志存储配置文件中运行以下筛选器:Logstash 摸索然后变异?,logstash,Logstash,我正在日志存储配置文件中运行以下筛选器: filter { if [type] == "logstash" { grok { match => { "message" => [ "\[%{DATA:timestamp}\]\[%{DATA:severity}\]\[%{DATA:instance}\]%{DATA:mymessage}, reason:%{GREED
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”和“原因”
%{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" ]
}
}
}
}
总之,我想了解:
我会用另一种方式。对于您试图执行的操作,
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时,它会写入标准输出,至少在我使用的版本上是这样——我正在捕获并写入一个文件。在这里,它报告了一些错误
logstash有一个
-l
选项,允许您指定要使用的日志文件-这通常会向您显示解析器中发生了什么,但请记住,如果某个规则不匹配,它不一定会告诉您为什么不匹配 我会用另一种方式。对于您试图执行的操作,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时,它会写入标准输出,至少在我使用的版本上是这样——我正在捕获并写入一个文件。在这里,它报告了一些错误
logstash有一个
-l
选项,允许您指定要使用的日志文件-这通常会向您显示解析器中发生了什么,但请记住,如果某个规则不匹配,它不一定会告诉您为什么不匹配 使用覆盖
选项是最好的解决方案,但我想我还是会直接回答您的几个问题
-l
或--log
选项/var/log/logstash是典型的mutate
是它自己的过滤器,而不是grok
的一部分。您可以这样做(或者使用rename
而不是replace
+remove
):使用
覆盖
选项是最好的解决方案,但我想我还是会直接回答您的几个问题
-l
或--log
选项/var/log/logstash是典型的mutate
是它自己的过滤器,而不是grok
的一部分。您可以这样做(或者使用rename
而不是replace
+remove
):我认为您的代码缺少
match=>{…}
块,但在其他方面是完美的解决方案。你可以更新,我会接受答案。顺便说一句,我仍然很想知道是否有一个日志文件,我可以在哪里查找这些问题的疑难解答。。。你知道其中一个吗?我犯了一个错误——我重新输入了它:)。如果使用-l
启动logstash,它将在指定的位置写入日志文件。否则,我认为它只会写入STDOUT。我认为您的代码缺少match=>{…}
块,但在其他方面是完美的解决方案。你可以更新,我会接受答案。顺便说一句,我仍然很想知道是否有一个日志文件,我可以在哪里查找这些问题的疑难解答。。。你知道其中一个吗?我犯了一个错误——我重新输入了它:)。如果使用-l
启动logstash,它将在指定的位置写入日志文件。否则我想它只会写到STDOUT
。