簡體   English   中英

Logstash Grok模式與Python正則表達式?

[英]Logstash Grok Pattern vs Python Regex?

我正在嘗試配置logstash來管理各種日志源,其中之一是Mongrel2。 Mongrel2使用的格式為tnetstring ,其中日志消息的格式為

86:9:localhost,12:192.168.33.1,5:57089#10:1411396297#3:GET,1:/,8:HTTP/1.1,3:200#6:145978#]

我想編寫自己的grok模式以從上述格式中提取某些字段。 我開始通過測試對上述消息我正則表達式在這里 ,正則表達式是

^(?:[^:]*\:){2}([^,]*)

這匹配localhost 當我在表單中使用相同的正則表達式作為grok模式時

TEST ^(?:[^:]*\:){2}([^,]*)
MONGREL %{TEST:test}

並配置logstash與

filter {
  grok {
    match => [ "message", "%{MONGREL}" ]
  }
}

相同的正則表達式會導致匹配86:9:localhost 我不知道我要去哪里錯了? 我用來測試的正則表達式引擎是否基於Python,而grok過濾器正則表達式基於Onigurama?

當前使用以下輸入在grokdebug對其進行測試

86:9:localhost,12:192.168.33.1,5:57089#10:1411396297#3:GET,1:/,8:HTTP/1.1,3:200#6:145978#]

和以下模式

(?<hostname>^(?:[^:]*\:){2}([^,]*))

導致

{
  "hostname": [
    [
      "86:9:localhost"
    ]
  ]
}

我想要的地方

{
  "hostname": [
    [
      "localhost"
    ]
  ]
}

試試看http://grokdebug.herokuapp.com/ 這是調試不會導致脫發的grok模式的最佳方法。

這樣的模式將提取主機名:

^(\d+)?:(\d+)?:(?<hostname>[^,]+),

或以與您已經編寫的類似方式編寫它:

^(?:[^:]*\:){2}(?<hostname>[^,]*)

捕獲名稱必須在要捕獲的括號內...您的模式正在捕獲到此為止的所有內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM