【问题标题】:Logstash: grok expression for multiline dataLogstash:多行数据的 grok 表达式
【发布时间】:2017-11-06 12:21:20
【问题描述】:

我是 ELK 堆栈的新手。我正在尝试为以下日志语句编写一个 grok 表达式

2017-10-26 19:20:28.538 ERROR --- [logAppenderService] [Serv01] [restartedMain] ns.pcs.log.appender.LogAppender : [1234] doStuff Some statement here - {} 
java.lang.Exception: Hello World 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) 

我已经编写了以下logstash配置:

    input{
            kafka {
                    type => "mylog"
                    topic_id => 'mylog'
            }

    }
filter{
            if [type] == "mylog" {

                grok {

                        match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} \[%{DATA:serviceName}] \[%{DATA:nodeName}] \[%{DATA:trName}] %{NOTSPACE:className} %{NOTSPACE:':'} \[%{DATA:refName}] %{GREEDYDATA:msg}" }

                } 
        }
}

output{
        if [type] == "mylog" {
            elasticsearch {

                hosts => ["101.18.19.89:9200"]
                index => "logstash-%{+YYYY-MM-dd}"
            }
        } 
        stdout {
           codec => rubydebug
        }

}

当我尝试运行相同的程序时,我得到了 json 解析异常。不确定我是否遗漏了什么。我真的被困在这个阶段了。

【问题讨论】:

  • 您的配置缺少filter {} 周围的if [type] == "mylog" {}
  • 对不起。这是我的错。实际上,我在这里粘贴时意外删除了。我正在修改原帖
  • @baudsp 我已经修改了原帖。
  • 好的。但是我不明白当您的配置中没有任何 json 过滤器/编解码器时,您是如何收到 json 解析错误的。也许你把整个错误信息都放在你的问题中。
  • @baudsp 我认为json解析错误是grok要解析的logline,而不是grok产生的错误。

标签: logstash elastic-stack logstash-grok


【解决方案1】:

您的问题是输入与您的模式不匹配

请试试这个

%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} --- \[%{DATA:serviceName}\] \[%{DATA:nodeName}\] \[%{DATA:trName}\] %{NOTSPACE:className} %{NOTSPACE:':'} \[%{DATA:refName}] %{GREEDYDATA:msg}

你错过了

---

]

模式

如果你仍然不能,请检查 mutiline 是否发送到你的日志中

如果需要,您可以将 mutiline 添加到您的输入中

codec => multiline {
        pattern => "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}[\.,][0-9]{3,7} "
        negate => true
        what => "previous"
        }

【讨论】:

    猜你喜欢
    • 2021-10-24
    • 2014-11-18
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多