繁体   English   中英

java异常的GROK模式

[英]GROK patterns for java exception

我有一些问题 :

  1. 我尝试使用https://discuss.elastic.co/t/logstash-configuration-with-custom-patterns/141352 中提到的自定义标签,但无法获得太多帮助。

  2. 我想匹配多种模式,例如一种用于正常日志,一种用于异常日志。

     ^%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level}\\s*%{JAVACLASS:class}\\.%{WORD:method}\\s-\\s%{GREEDYDATA:log}$
  3. 我们也有内置的 Java 模式,但我无法通过搜索找到它们,那么它们是否被编译和存储? 我想在同一个文件中添加我的模式,这样我就不会遇到任何问题。

除了在模式文件夹中写入之外,还有其他方法可以完成此操作吗?

我正在使用 Elastic Stack 7.6.2。

将堆栈跟踪行连接成一个日志条目

我正在通过 Filebeat 将日志发送到 Logstash。 我必须配置 Filebeat,以便它将整个堆栈跟踪视为一个条目。 我正在使用multiline 行配置示例中所述的多行

#filebeat.yml
filebeat:
  inputs:
    - type: log
      …
      multiline:
        pattern: '^[[:space:]]+(at|\.{3})[[:space:]]+\b|^Caused by:'
        match: after
output:
  logstash:
    hosts: ["logstash:5044"]

处理两种类型的日志条目

在我的logstash.conf文件中,我有一个匹配的过滤器:

  • 一个常规的 Spring Boot 日志条目(这里没有介绍),例如:
    2020-05-12 08:31:26.530  INFO 10197 --- [SpringContextShutdownHook] o.s.s.c.ThreadPoolTaskExecutor           : Shutting down ExecutorService 'applicationTaskExecutor'
  • Java 异常,例如:
    java.lang.IllegalArgumentException: Exception message
        at in.keepgrowing.springbootlog4j2scaffolding.SpringBootLog4j2ScaffoldingApplication.main(SpringBootLog4j2ScaffoldingApplication.java:14) [classes/:?]
        at com.example.myproject.Author.getBookIds(Author.java:38)
        at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
    Caused by: java.lang.NullPointerException
        at com.example.myproject.Book.getId(Book.java:22)
        at com.example.myproject.Author.getBookIds(Author.java:35)
        ... 1 more

因为我没有在一场match列出多个模式,所以每个条目都针对两个比赛进行检查(我认为break_on_match在这种情况下不起作用)。 结果_grokparsefailure标记被添加到所有条目。 要删除此标记,我必须知道特定条目已成功与一个模式匹配 - 在这种情况下将出现stacktracespring_boot_log标记。 因此,我可以安全地删除带有我的标签的条目的_grokparsefailure标签:

# logstash.conf
…
filter {
    grok {
        match => { "message" => "%{JAVACLASS:exception}:\s%{GREEDYDATA:stacktrace}" }
        add_tag => [ "stacktrace" ]
        }
    grok {
        match => { "message" => "%{TIMESTAMP_ISO8601:log_timestamp}…" }
        add_tag => [ "spring_boot_log" ]
        }
    if "stacktrace" in [tags] or "spring_boot_log" in [tags] {
            mutate {
                remove_tag => ["_grokparsefailure"]
                }
    }
}
…

您可以在下面看到来自我的 ElasticHQ 的屏幕截图,其中显示了示例堆栈跟踪是如何解析的。 有两个部分: exceptionstacktrace ,以及我在tags数组中的自定义标记: 在此处输入图片说明

有用的链接:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM