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" ]
            }
        }
    }
} 
总之,我想了解:

  • 是否有日志文件可以查看故障发生的原因/位置
  • 为什么我上面幻想的变异命令不起作用
  • 我还认为,如果我从未使用mymessage变量,而是将message称为变量,那么它可能会自动将message截断为匹配的模式,但似乎会附加结果。。。正确的行为是什么

  • 我会用另一种方式。对于您试图执行的操作,
    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
    选项,允许您指定要使用的日志文件-这通常会向您显示解析器中发生了什么,但请记住,如果某个规则不匹配,它不一定会告诉您为什么不匹配

    使用
    覆盖
    选项是最好的解决方案,但我想我还是会直接回答您的几个问题

  • 这取决于Logstash是如何启动的。通常,您会通过一个init脚本运行它,该脚本会传递
    -l
    --log
    选项/var/log/logstash是典型的
  • mutate
    是它自己的过滤器,而不是
    grok
    的一部分。您可以这样做(或者使用
    rename
    而不是
    replace
    +
    remove
    ):
  • 格罗克{ ... } 变异{ replace=>[“message”,“%{mymessage}”] 删除=>[“mymessage”] }
    使用
    覆盖
    选项是最好的解决方案,但我想我还是会直接回答您的几个问题

  • 这取决于Logstash是如何启动的。通常,您会通过一个init脚本运行它,该脚本会传递
    -l
    --log
    选项/var/log/logstash是典型的
  • mutate
    是它自己的过滤器,而不是
    grok
    的一部分。您可以这样做(或者使用
    rename
    而不是
    replace
    +
    remove
    ):
  • 格罗克{ ... } 变异{ replace=>[“message”,“%{mymessage}”] 删除=>[“mymessage”] }
    我认为您的代码缺少
    match=>{…}
    块,但在其他方面是完美的解决方案。你可以更新,我会接受答案。顺便说一句,我仍然很想知道是否有一个日志文件,我可以在哪里查找这些问题的疑难解答。。。你知道其中一个吗?我犯了一个错误——我重新输入了它:)。如果使用
    -l
    启动logstash,它将在指定的位置写入日志文件。否则,我认为它只会写入STDOUT。我认为您的代码缺少
    match=>{…}
    块,但在其他方面是完美的解决方案。你可以更新,我会接受答案。顺便说一句,我仍然很想知道是否有一个日志文件,我可以在哪里查找这些问题的疑难解答。。。你知道其中一个吗?我犯了一个错误——我重新输入了它:)。如果使用
    -l
    启动logstash,它将在指定的位置写入日志文件。否则我想它只会写到
    STDOUT