Logstash:多行数据的grok表达式

时间:2017-11-06 12:21:21

标签: logstash elastic-stack logstash-grok

我是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解析异常。不确定我是否遗漏了某些东西。我真的陷入了这个阶段。

1 个答案:

答案 0 :(得分:0)

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

请试试这个

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

你错过了

  

---

     

图案

如果您还是不能请检查多行信息是否已发送到您的日志中

如果需要,您可以将多行添加到输入中

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"
        }