繁体   English   中英

"tags":["_dateparsefailure"]," 与 logstash

[英]"tags":["_dateparsefailure"]," with logstash

12-Apr-2021 17:12:45.289 FINE [https-jsse-nio2-8443-exec-5] org.apache.catalina.authenticator.FormAuthenticator.doAuthenticate Authentication of 'user1' was successful

我在logstash中使用以下代码解析上面的日志消息,不幸的是得到了一个"tags":["_dateparsefailure"],

%{MY_DATE_PATTERN:timestamp}是一个自定义模式,如下MY_DATE_PATTERN %{MONTHDAY}-%{MONTH}-%{YEAR} %{HOUR}:?%{MINUTE}(?::?%{SECOND})

我还检查了https://grokdebug.herokuapp.com/它解析得很好。

我想知道你可能会看到我做错了什么。

    filter {
                   grok{
              patterns_dir => "/etc/logstash/patterns"
              match => { "message" => "%{MY_DATE_PATTERN:timestamp}\s+%{WORD:severity}\s+\[%{DATA:thread}\]\s+%{NOTSPACE:type_log}\s+(?<action>\w(?:[\w\s]*\w)?)(?:\s+['\[](?<user>[^\]']+))?" }
            }
        # Converting timestamp
                date {
                        locale => "nl"
                        match => ["timestamp", "dd-MM-YYYY HH:mm:ss"]
                        timezone => "Europe/Amsterdam"
                        target => "timestampconverted"
                }
ruby {
          code => "event.set('timestamp', (event.get('timestampconverted').to_f*1000).to_i)"
    }

output(必须删除一些东西,以便我可以在这里发布)

user":"user1,"type_log":"org.apache.catalina.authenticator.FormAuthenticator.doAuthenticate","logSource":{"environment,"tags":["_dateparsefailure"],"thread":"https-jsse-nio2-8443-exec-6","action":"Authentication of

提前致谢!

更新

我也在下面尝试过,但仍然收到错误

date {
                locale => "nl"
                match => ["timestamp", "dd-MMM-YYYY HH:mm:ss.SSS"]
                timezone => "Europe/Amsterdam"
                target => "timestampconverted"
        }

它绝对应该是“dd-MMM-YYYY HH:mm:ss.SSS”——你必须使用整个字段。 您可以尝试删除 'locale => "nl"' 选项(仅用于调试目的)。 我们目前处于荷兰语和英语月份缩写匹配的月份。 如果它开始工作,那么月份缩写就不是你想象的那样。 一些语言环境期望有一个。 在缩写的末尾。 查看CLDR图表,显然 locale nl 是其中之一,因此您必须将其加入。CLDR 数据在这里,向下滚动到“月份 - 缩写 - 格式”。 你可以试试

mutate { gsub => [ "timestamp", "(jan|feb|mrt|apr|jun|jul|aug|sep|okt|nov|dec)", "\1." ] }

我原来的建议

mutate { gsub => [ "timestamp", "(jan|feb|apr|aug|sept|oct|okt|nov|dec)", "\1." ] }

是基于此处给出的缩写,但这不是 Java 使用的。

问题肯定在日期过滤器中,而不是在 grok 中。 如果 grok 过滤器没有解析时间戳字段,那么日期过滤器将是一个无操作并且不会添加标签。

我发现自定义模式导致了问题,而不是从另一个位置使用它,我将其作为正则表达式添加到我的 conf 文件中,如下(?<logstamp>%{MONTHDAY}-%{MONTH}-%{YEAR} %{HOUR}:%{MINUTE}:%{SECOND})

暂无
暂无

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

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