[英]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?
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.