簡體   English   中英

Logstash grok過濾器自定義模式不起作用

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

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