簡體   English   中英

Logstash 拆分日志並單獨插入到elasticsearch

[英]Logstash split log and insert it separately into elasticsearch

我正在編寫一個 logstash 配置文件,我收到的日志給我帶來了問題,團隊向我發送了多個日志合並為一個,例如。

消息:[logitem(aaa=1, bbb=1, ccc=1), logitem(aaa=2, bbb=2, ccc=2), logitem(aaa=3, bbb=3, ccc=3)]

是否可以將這些日志分成 3 個並將它們單獨插入到 elasticsearch 中? (3 條記錄)

使用紅寶石過濾器

這種方式應該有效(有關討論和參考,請參閱下面的評論)。 您可能需要在幾個地方調整 grok / scan 正則表達式。

grok {
    match => {
        "message" => "^\[%{GREEDYDATA:logitems}\]$"
    }
}

ruby {
    code => "event.set('logitem', event.get('message').scan(/logitem\([^\)]+\)/))"
}

split {
    field => "logitem"
}

grok {
    match => {
        "logitem" => "^logitem\(aaa=%{DATA:field_a}, bbb=%{DATA:field_b}, ccc=%{DATA:field_c}\)"
    }
}

掃描正則表達式的目的是匹配一個字符串:

  • logitem
  • 然后一個(字符
  • 然后一個或多個任何字符除外)
  • )結尾

使用 grok

令人驚訝的是,這種方式行不通。 有關更多詳細信息,請參閱此 github 問題 TL;DR... grok 不會將重復的匹配項放入數組中。

filter {
  grok {
    match => {
      "message" => "^\[*(logitem\(%{DATA:logitem}\), )*logitem\(%{DATA:logitem}\)\]$"
    }
  }
  split {
    field => "logitem"
  }
}

如果您確定消息將始終具有aaa=, bbb=格式,您可以更明確。

[編輯 1:將 grok 方法標記為非工作並添加了 ruby​​ 方法。 2:重新排序一些東西以獲得更好的流程]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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