javaelk:如何在Kibana中按异常类对stacktrace进行分组
我正在为JavaWeb应用程序设置ELK堆栈。我成功地用logstash解析了多行java stacktraces,并在kibana中显示了异常计数。现在,我想显示一个日期柱状图,其中包含按异常类分组的异常计数,即2 java。lang.NullPointerException,3 java。lang.arithmetricException每分钟或每秒一次
在kibana中,我可以看到完整的stacktrace索引。但我无法将我的异常按类分组。这里的最佳实践是什么?尝试用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...
我的日志存储配置:
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
字段表示引发异常的类,在我的示例中:c.m.w.s.proxies.ProxyServlet
。我想按我的异常类进行聚合:org.apache.http.conn.HttpHostConnectException
# 1 楼答案
“数据表”可视化类型应允许您聚合
class
字段并显示计数编辑:哦,错误的字段
在最初的grok中,您将行号后面的所有内容放回
message
。要从这个字符串中提取异常位置,您需要另一个grok节模式的外观取决于错误消息的一致性。在您的示例中,它看起来像“连字符描述…位置冒号”。如果他们都是这样,你可以做一个模式来匹配
# 2 楼答案
正如@Alain Collins已经指出的,您可以使用“数据表”进行可视化
我建议您使用以下模式向输入中添加多行编解码器:
然后,您可以通过以下操作使用预定义的grok regex JAVASTACKTRACEPART:
请注意,这还将创建一个名为class的字段。您可以使用此字段执行术语搜索,并将计数指标应用于该字段