[英]Logstash grok filter custom pattern is not working
我有一個日志文件( http://codepad.org/vAMFhhR2 ),我想從中提取一個特定的數字(第18行)我寫了一個自定義模式grok過濾器,在http:// grokdebug上測試它。 herokuapp.com/ ,它運行正常並提取我想要的值。
這是logstash.conf的樣子:
input {
tcp {
port => 5000
}
}
filter {
grok{
match => [ "message", "(?<scraped>(?<='item_scraped_count': ).*(?=,))" ]
}
}
output {
elasticsearch {
hosts => "elasticsearch:9200"
}
}
但它與Kibana上相同日志中的任何記錄都不匹配
思考?
您的正則表達式可能有效,但前瞻和后瞻(“?=”和“?<=”)在這種情況下不是一個好的選擇。 相反,您可以使用更簡單的過濾器:
match => [ "message", "'item_scraped_count': %{NUMBER:scraped}" ]
這將解壓后的數'item_scraped_count':
一個名為場scraped
,使用“NUMBER”神交內置模式 。
結果在Kibana:
{
"_index": "logstash-2017.04.11",
"_type": "logs",
"_source": {
"@timestamp": "2017-04-11T20:02:13.194Z",
"scraped": "22",
(...)
}
}
如果我可以建議另一個改進:由於您的消息分布在多行中,您可以使用multiline
輸入編解碼器輕松合並它:
input {
tcp {
port => 5000
codec => multiline {
pattern => "^(\s|{')"
what => "previous"
}
}
}
這將合並所有行,以空格開頭或{'
與前一行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.