嘎嘎然后变异?

时间:2014-10-14 10:03:40

标签: logstash

我在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"和&#34 ;原因"

我真正想要的是让现在%{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" ]
            }
        }
    }
} 

总而言之,我想了解:

  1. 是否有我可以查看的日志文件,以了解发生故障的原因/何处?
  2. 为什么上面插入的mutate命令不起作用?
  3. 我还如果我从未使用 mymessage 变量,而只是将 message 称为变量,它可能会自动截断消息只是匹配的模式,但似乎附加结果而不是......正确的行为是什么?

2 个答案:

答案 0 :(得分:2)

使用overwrite选项是最佳解决方案,但我认为无论如何我都会直接解决您的几个问题。

  1. 这取决于Logstash的启动方式。通常,您可以通过传递-l--log选项的init脚本运行它。 / var / log / logstash是典型的。
  2. mutate是一个自己的过滤器,而不是grok的一部分。您可以这样做(或使用rename代替replace + remove):
  3. 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选项,允许您指定要使用的日志文件 - 这通常会显示解析器中发生了什么,但请记住,如果某些内容与规则不匹配,则不一定会告诉你它为什么没有。