3

我正在为 Java Web 应用程序设置 ELK 堆栈。我用logstash成功解析了多行java堆栈跟踪,并在kibana中显示异常计数。现在我想显示一个日期直方图,其中包含按异常类分组的异常计数,即每分钟或每秒 2 个 java.lang.NullPointerException、3 个 java.lang.ArithmeticException。

在 kibana 中,我可以看到索引的完整堆栈跟踪。但是我无法按类可视化我的异常。这里的最佳做法是什么?尝试使用 Logstash 检索完全限定的类名并在 kibana 中进行术语过滤?或者有没有办法在kibana中使用ES的力量?

message字段开头的示例:

2015-08-15 23:23:51.695 [qtp1010279661-1074] ERROR c.m.w.s.proxies.ProxyServlet:71 - Can't get content from url http://localhost:8080/...
org.apache.http.conn.HttpHostConnectException: Connect to localhost:8080 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1, localhost/fe80:0:0:0:0:0:0:1%1] failed: Connection refused
    at org.apache.http.impl.conn.HttpClientConnectionOperator.connect...

我的logstash配置:

input {
    file {
        path => "/Users/dbaq/web-app.log"
        start_position => beginning
    }
}

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

    grok {
        match => ["message", "(?m)%{TIMESTAMP_ISO8601:timestamp} \[%{DATA:thread}\]\s*%{LOGLEVEL:severity}\s*%{DATA:class}:%{NUMBER:line:int}\s*\- %{GREEDYDATA:message}"]
        overwrite => [ "message" ]
    }

    date {
        match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss.SSS" ]
    }
}

output {
    elasticsearch {
        protocol => "http"
    }
    stdout {}
}

谢谢你的帮助

编辑 1:我class的 logstash 模式中的字段表示引发异常的类,在我的示例中:c.m.w.s.proxies.ProxyServlet. 我想按我的 Exception 类聚合:org.apache.http.conn.HttpHostConnectException.

4

2 回答 2

4

正如@Alain Collins 已经指出的那样,您可以使用“数据表”进行可视化。

我建议您使用以下模式将多行编解码器添加到您的输入中:

input {
    file {
         path => "/Users/dbaq/web-app.log"
         start_position => beginning
         codec => multiline {
              pattern => "^\s"
              what => "previous"
         }
    }
}

然后,您可以通过执行以下操作使用预定义的 grok 正则表达式 JAVASTACKTRACEPART:

if "multiline" in [tags] {
    grok {
        match => ["message", "%{JAVASTACKTRACEPART}"]
    }
}

请注意,这还将创建一个名为 class 的字段。您可以使用此字段执行术语搜索并将计数指标应用于它。

于 2015-08-20T07:49:44.667 回答
0

“数据表”可视化类型应允许您聚合(“分组依据”)您的class字段并显示计数。

编辑:哎呀,错误的字段。

在您原来的 grok 中,您将行号后面的所有内容放回message. 要从此字符串中提取异常位置,您需要另一个 grok 节。

模式的外观取决于错误消息的一致性。在您的示例中,它看起来像“连字符描述...位置冒号”。如果他们都是这样,你可以制作一个匹配的模式。

于 2015-08-16T08:32:42.253 回答