我正在尝试编写一个elk - watchcher,以便在java应用程序日志中出现任何异常时发送警报。
我们的应用程序日志已经在Elastic-Search中被索引了。log_message
字段,我能够索引日志消息或异常消息(在出现异常的情况下)以及异常跟踪。
例如
在正常情况下(没有例外)log_message字段的值如下所示:
Executing task using ExecutorService
但是在Exception的情况下,log_message字段有如下内容
Exception while executing task : java.util.concurrent.CancellationException [StackTrace Hash 38fe72fbd18c26e8cd74b0a3c196c1441f1814e10224a323f83ec105dd355f10]
java.util.concurrent.CancellationException
at java.util.concurrent.FutureTask.report(FutureTask.java:121)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at com.comp.tasks.TaskExecutor$MDCFuture.get(TaskExecutor.java:103)
at com.comp.tasks.TaskExecutor.afterExecute(TaskExecutor.java:239)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1157)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
以上两个只是示例log_message的,但是异常可以来自应用程序中具有不同异常消息或异常跟踪的任何其他类。
我想编写ELK-Watcher并使用Kibana-filter-query-DSL检测是否log_message字段包含异常。
我尝试了许多不同的Kibana-filter-query-dsl来过滤掉log_message带有异常跟踪。是否可以编写任何Kibana-filter-query-dsl来通过查找ntat来检测异常?在<</em> strong> log_message 场吗?请帮助。
您可以尝试搜索StackTrace
或at java.lang.Thread.run
,这将适用于您的所有堆栈跟踪。你可能会得到一些意想不到的结果,但大多数情况下,它将涵盖。
下面是你可以尝试的查询:
{
"query": {
"bool": {
"must": [
{
"match_phrase": {
"message": "at java.lang.Thread.run"
}
},
{
"match": {
"severity": "ERROR"
}
}
]
}
}
}