簡體   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