[英]Logstash, how to use grok patterns coming from event data
我在kubernetes上部署了一個ELK堆棧,用於收集容器的數據。 在所有其他方法中,它使用grok過濾器根據模式分析實際的日志行。
我希望能夠通過使用kubernetes窗格中的注釋來設置此模式。
我在pod
添加了一個名為elk-grok-pattern
的注釋,配置了filebeat
以便轉發該注釋,到目前為止,我在logstash
中的event
中可以將注釋值作為字段獲取。
問題是我無法將字段的值用作grok pattern
。
我的廣告連播中的注解如下:
Annotations: elk-grok-pattern=%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:status} %{NUMBER:response_time}
我嘗試使用的filter
類似於以下內容:
filter {
# create a new field called "elk-grok-pattern" from the pod annotation
mutate {
rename => { "[kubernetes][annotations][elk-grok-pattern]" => "elk-grok-pattern" }
}
grok {
pattern_definitions => {
"CUSTOM" => "%{elk-grok-pattern}"
}
match => { "log" => "%{CUSTOM}" }
}
}
不幸的是,這會導致錯誤:
Pipeline aborted due to error {:pipeline_id=>"main", :exception=>#<Grok::PatternError: pattern %{elk-grok-pattern} not defined>
實際上,grok是按字面解釋我的模式,而不是評估事件產生的字符串內容。
我還嘗試直接使用模式,而無需定義pattern_definition,如下所示:
grok {
match => { "log" => "%{elk-grok-pattern}" }
}
但是我得到同樣的錯誤。
有沒有辦法實現我的目標? 任何建議或可能的解決方法將不勝感激。
如果您不希望在其他地方使用此模式,為什么不在這樣的比賽中使用它呢?
grok {
match => { "log" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:status} %{NUMBER:response_time}" }
}
如果您想稍后在其他過濾器中使用它,請查看此頁面上的模式創建:
https://www.elastic.co/guide/zh-CN/logstash/current/plugins-filters-grok.html#setting_patterns_dir
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.