【问题标题】:_grokparsefailure while applying grok filters应用 grok 过滤器时的 _grokparsefailure
【发布时间】:2021-08-21 15:25:31
【问题描述】:

我的日志

2021-08-19 15:43:55,122 INFO c.t.i.c.ClassA - log message Service Name=Service-OCR Content ID=ABC.xml Category=SUCCESS Timestamp=2021-08-19T15:43:55.122292244 Message=The response has been received. Unit Name=N/A
2021-08-19 15:43:55,122 ERROR c.t.i.c.ClassB - log message Service Name=Service-OCR Engine Content ID=ABC.xml Category=ERROR Timestamp=2021-08-19T15:43:55.122292244 Message=The response has been received. Unit Name=TM

我的logstash.conf 是

input {
  tcp {
    port => 12201
    codec => json_lines
  }
}


filter {
        grok {
                patterns_dir => ["./patterns"]
                match => {
                        'message' => '%{TIMESTAMP_ISO8601} %{LOGLEVEL:level} %{STRING} - \"log message \"Service Name=\"%{STRING} \"Content ID=\"%{STRING} \"Category=\"%{STRING} \"Timestamp=\"%{TIMESTAMP_ISO8601} \"Message=\"%{STRING} \"Unit Name=\"%{STRING}'
                }
        }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "logstash"
  }
}

我知道 STRING 不在 grok-filters 中,这就是我定义客户过滤器的原因。

STRING ^[a-zA-Z0-9 !@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]{1,}$

我假设无论我在哪里使用 STRING 都可能包含特殊字符、空格、数字。就像 Java 中的字符串一样。

但我仍然无法通过此过滤我的日志。有什么帮助吗?

【问题讨论】:

    标签: logstash logstash-grok logstash-configuration


    【解决方案1】:

    您已使用 ^ 和 $ 将 STRING 锚定到行首和行尾。它永远不会与您使用它的方式相匹配。删除 ^ 和 $

    【讨论】:

    • 请纠正我的 grok 过滤器并在回答中发布我该如何解决它。
    • 我试过删除这个。但没有运气@Badger
    • 当双引号没有出现在您的日志条目中时,为什么您要在单引号模式中转义它们?
    【解决方案2】:

    您可以简单地使用 %{GREEDYDATA},而不是自定义模式 STRING。这将解决您的问题。

    【讨论】:

    • %{GREEDYDATA} 将所有剩余日志作为字符串并忽略所有其他内容..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多