[Java异常的GROK模式

问题描述 投票:0回答:1

我有几个问题:

  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模式,但是我无法通过搜索找到它们,因此它们是否已编译和存储?我想将模式添加到同一文件中,这样我就不会出现任何问题。

除了在patterns文件夹中编写以外,还有别的方法可以做到这一点吗?

logstash logstash-grok logstash-configuration
1个回答
0
投票

我正在使用Elastic Stack 7.6.2。

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

我正在通过Filebeat将日志发送到Logstash。我必须配置Filebeat,以便将整个堆栈跟踪视为一项。我正在使用multiline中所述的Examples of multiline configuration

#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在这种情况下不起作用)。结果,break_on_match标签被添加到所有条目。要删除此标签,我必须知道特定条目已通过一种模式成功匹配-在这种情况下将出现_grokparsefailurestacktrace标签。因此,对于具有我的标签的条目,我可以安全地删除spring_boot_log标签:

_grokparsefailure

下面您可以看到我的ElasticHQ的屏幕截图,其中显示了如何解析示例堆栈跟踪。有两个部分:# 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"] } } } … exception,以及stacktrace数组中的自定义标签:tags

有用的链接:

© www.soinside.com 2019 - 2024. All rights reserved.