2017-09-25 72 views
0

這是我的格羅克模式grok不讀一個帶連字符的單詞

2017-09-25 08:58:17,861 p = 14774 u = ec2-user | 14774 1506329897.86160:檢查any_errors_fatal

我想讀取用戶,但它僅給出EC2,它不給完整的單詞

對不起,我在新的神交過濾

我目前的格局:

%{TIMESTAMP_ISO8601:時間戳} p =%{WORD:PROCESS_ID} U =%{WORD:USER_ID}

電流輸出:

... 
... 
... 
    "process_id": [ 
    [ 
     "14774" 
    ] 
    ], 
    "user_id": [ 
    [ 
     "ec2" 
    ] 
    ] 
} 
+0

它的工作..%{TIMESTAMP_ISO8601:時間戳} P =%{WORD:PROCESS_ID} U =%{USERNAME:USER_ID} – Vicky

+0

如果您使用USERNAME,維護您的代碼的人可能會認爲該日誌包含用戶名。按照Vorsprung –

回答

2

WORD被定義爲"\b\w+\b"

參見https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns

  • \ b是詞邊界

  • \瓦特單個字母數字字符(字母字符,或一個十進制數)匹配或「_」

  • +表示前一個字符的任意數字。所以\ w +是指任何數目的字符

注意的是\ w不匹配 -

因此使其工作,而不是Word中使用

(?<user_id>\b[\w\-]+\b) 

這不使用preddefined神交的圖案,但「原始」的正則表達式

  • 的(?....)來代替%{因爲它是「原始」的正則表達式
  • \-表示文字 - 符號
  • []表示一個字符類。所以[\ W-]會匹配所有的東西\ W不和 - 以及
+0

所述製作您自己的圖案或者您可以像我在未閱讀的評論中那樣使用USERNAME。 *嘆息* – Vorsprung

+0

這仍然是一個非常好的答案。 – baudsp

相關問題