【问题标题】:logstash multiline issue with java logsjava日志的logstash多行问题
【发布时间】:2014-03-24 23:16:22
【问题描述】:

我正在使用 tomcat 安装 logstash,但在获取 java 堆栈跟踪调用时遇到问题,以下是我的配置

input   {
 udp {
   type => "tomcat"
   port => "514"
   format => "plain"

 }

}

filter{
multiline {
            pattern => "(^.+Exception.*)|(^\s+at .+)|(^\s+... \d+ more)|(^\s*Caused by:.+)"
            what => "previous"
}
}

这是tomcat的示例日志

2014-03-24 19:08:53,246 [thread-pool8] ERROR org.apache.catalina.core.ContainerBase.[engine].[localhost] - Exception Processing ErrorPage[errorCode=500, location=/error/error500.jsp]
org.apache.jasper.JasperException: java.lang.NullPointerException
        at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:489)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)
        at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:467)
        at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:338)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:203)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1686)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.NullPointerException
        at org.apache.jsp.error.error500_jsp._jspService(error500_jsp.java:266)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
        ... 21 more

我已经厌倦了所有的组合并且没有工作:(我不知道它对其他人是如何工作的..

编辑:

我也试过了,还是不行

pattern => "^%{TIMESTAMP_ISO8601}"
       negate => true

以下是结果

filter received {:event=>{"message"=>"<139>2014-03-24 21:07:58,908 [] [] [thread-pool4] ERROR org.apache.catalina.core.ContainerBase.[engine].[localhost] - Exception Processing ErrorPage[errorCode=500, location=/error/error500.jsp]\n", "@version"=>"1", "@timestamp"=>"2014-03-25T01:07:59.128Z", "type"=>"tomcat", "host"=>"10.3.68.22"}, :level=>:debug, :file=>"(eval)", :line=>"15"}
<139>2014-03-24 21:07:58,908 [] [] [thread-pool4] ERROR org.apache.catalina.core.ContainerBase.[engine].[localhost] - Exception Processing ErrorPage[errorCode=500, location=/error/error500.jsp]
 {:pattern=>"^%{TIMESTAMP_ISO8601} ", :match=>false, :negate=>true, :level=>:debug, :file=>"logstash/filters/multiline.rb", :line=>"160"}
filter received {:event=>{"message"=>"<139>org.apache.jasper.JasperException: java.lang.NullPointerException", "@version"=>"1", "@timestamp"=>"2014-03-25T01:07:59.131Z", "type"=>"tomcat", "host"=>"10.3.68.22"}, :level=>:debug, :file=>"(eval)", :line=>"15"}
<139>org.apache.jasper.JasperException: java.lang.NullPointerException {:pattern=>"^%{TIMESTAMP_ISO8601} ", :match=>false, :negate=>true, :level=>:debug, :file=>"logstash/filters/multiline.rb", :line=>"160"}
filter received {:event=>{"message"=>"<139>    at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)", "@version"=>"1", "@timestamp"=>"2014-03-25T01:07:59.134Z", "type"=>"tomcat", "host"=>"10.3.68.22"}, :level=>:debug, :file=>"(eval)", :line=>"15"}

更新:

我在调试模式下使用 udp 协议和一些奇怪的数字 &lt;139&gt; 运行了 logstash工作

{
       "message" => "<139>2014-03-28 13:52:25,548 [] [] [thread-pool2] ERROR org.apache.catalina.core.ContainerBase.[engine].[localhost] - Exception Processing ErrorPage[errorCode=500, location=/error/error500.jsp]\n",
      "@version" => "1",
    "@timestamp" => "2014-03-28T17:52:26.116Z",
          "host" => "10.3.68.22"
}
{
       "message" => "<139>org.apache.jasper.JasperException: java.lang.NullPointerException",
      "@version" => "1",
    "@timestamp" => "2014-03-28T17:52:26.134Z",
          "host" => "10.3.68.22"
}
{
       "message" => "<139>    at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)",
      "@version" => "1",
    "@timestamp" => "2014-03-28T17:52:26.151Z",
          "host" => "10.3.68.22"
}
{
       "message" => "<139>    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)",
      "@version" => "1",
    "@timestamp" => "2014-03-28T17:52:26.166Z",
          "host" => "10.3.68.22"
}
{
       "message" => "<139>    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)",
      "@version" => "1",
    "@timestamp" => "2014-03-28T17:52:26.183Z",
          "host" => "10.3.68.22"
}

【问题讨论】:

  • 在多行之后,你在应用什么 grok 模式?您希望 logstash 吸收哪些字段作为字段?
  • 我真的需要摸索才能使用多行吗?此时我没有使用任何 grok,因为我只想先测试我的多行。
  • Multiline 实现让 grok 接受多行作为单个实体进行解析,实现 grok 解析行并将所需字段保存在 lucene(或 NoSQL DB)中。请通过here了解logstash的用例,稍后您可以尝试多行。
  • 我已经更新了我的问题实际上是tomcat syslog发送有线号码&lt;139&gt;
  • 您尝试在 Logstash.conf 中使用输入“syslog”配置吗?关于logstash syslog 的文档是here

标签: tomcat logging syslog logstash


【解决方案1】:

是否所有日志都以日期时间开头?

您可以将其用作模式。例如,

input {
    stdin {
    }
}

filter {
    multiline {
       pattern => "^%{TIMESTAMP_ISO8601} "
       negate => true
       what => previous
    }
}

output {
    stdout {debug => true}
}

此过滤器适用于您的日志。希望对你有帮助:)

【讨论】:

  • 你是如何测试的?它对我不起作用,我正在使用输入 udp 远程系统日志
  • 我已经更新了我的配置,这个配置对我有用。我正在使用 Logstash 1.3.3
  • 您使用的是 UDP 吗?如果我使用文件,它可以工作,但不能使用 UDP 输入。 UDP与文件不同吗?我正在使用 logstash 1.4.x
  • 所以这是另一个问题。你想发布另一个问题吗?你有任何错误信息吗?
  • 没有错误,只是没有在单行中组合多行,为 java 跟踪调用提供了所有单独的时间戳。你用什么输入法??你能试试UDP
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-16
  • 2021-05-08
相关资源
最近更新 更多