Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch 解析多行stacktrace日志存储_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Logstash_Logstash Grok - Fatal编程技术网 elasticsearch 解析多行stacktrace日志存储,elasticsearch,logstash,logstash-grok,elasticsearch,Logstash,Logstash Grok" /> elasticsearch 解析多行stacktrace日志存储,elasticsearch,logstash,logstash-grok,elasticsearch,Logstash,Logstash Grok" />

elasticsearch 解析多行stacktrace日志存储

elasticsearch 解析多行stacktrace日志存储,elasticsearch,logstash,logstash-grok,elasticsearch,Logstash,Logstash Grok,我正在尝试解析自定义日志消息,这些消息也有跨多行的错误堆栈跟踪。如果是多行stacktrace,并且我在elasticsearc索引中看到的只是消息的第一行,我的GROK模式将无法解析。奇怪的是,如果我使用像grokdebugger这样的解析器来测试模式,它也适用于多行。我在日志存储配置中遗漏了什么 以下是logstash中我的grok模式的片段: grok {match => [ "message" , "%{TIMESTAMP_ISO8601:timestamp} \[

我正在尝试解析自定义日志消息,这些消息也有跨多行的错误堆栈跟踪。如果是多行stacktrace,并且我在elasticsearc索引中看到的只是消息的第一行,我的GROK模式将无法解析。奇怪的是,如果我使用像grokdebugger这样的解析器来测试模式,它也适用于多行。我在日志存储配置中遗漏了什么

以下是logstash中我的grok模式的片段:

grok {match => [
        "message" , "%{TIMESTAMP_ISO8601:timestamp} \[%{SPACE}%{DATA:loglevel}\] %{DATA:class} \[%{DATA:operation}\] \(user=%{DATA:userid}\) (?m)%{GREEDYDATA:stacktrace}"
        ]
}
已解析的示例消息:

2018-01-09 21:38:21,414 [    INFO]  abc.xyz.def:444: [Put] [Protect] (user=xyz) Random Message
未被解析的消息:

2018-01-09 21:38:21,415 [   ERROR]  abc.xyz.def:41: [Error] (user=xyz) Unhandled exception encountered...
Traceback (most recent call last):
  File "/usr/local/lib/abc/xyz.py", line 113, in some_requestrv = self.dispatch_request() 

在您的情况下,您确实可以使用多行编解码器:

input {
  file {
    path => "/var/log/someapp.log"
    codec => multiline {
      # Grok pattern names are valid! :)
      pattern => "^%{TIMESTAMP_ISO8601} "
      negate => true
      what => "previous"
    }
  }
}

您是否在发货人级别使用多行编解码器/连接线路?否。我正在使用rsyslog发送日志。然后使用输入tcp,然后是具有上述grok模式的过滤器,然后是elasticsearch.Thank的输出。该部分是否在grok过滤器之后进入?在我的例子中,我将从rsyslog发送日志,然后在logstash中使用tcp进行输入,然后使用grok进行过滤,然后使用elasticsearch进行输出。在您的例子中,您必须在tcp输入中设置codec=>multiline{…}。是的,baudsp的答案就是这样做的方法。如果这个答案对你有帮助,请不要忘记接受它。