簡體   English   中英

Logstash,如何使用來自事件數據的grok模式

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

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