Logstash中的ruby

lucky_tomato發表於2024-05-29

通常我們都是用 filters/grok 外掛來捕獲欄位的,但是正則耗費大量的 CPU 資源,很容易成為 Logstash 程序的瓶頸。

而實際上,很多流經 Logstash 的資料都是有自己預定義的特殊分隔符的,我們可以很簡單的直接切割成多個欄位。

filters/mutate 外掛裡的 "split" 選項只能切成陣列,後續很不方便使用和識別。而在 filters/ruby 裡,我們可以透過 "init" 引數預定義好由每個新欄位的名字組成的陣列,然後在 "code" 引數指定的 Ruby 語句裡透過兩個陣列的 zip 操作生成一個雜湊並新增進陣列裡。短短一行 Ruby 程式碼,可以減少 50% 以上的 CPU 使用率。

filter {
    ruby {
        init => "@kname = ['client','servername','url','status','time','size','upstream','upstreamstatus','upstreamtime','referer','xff','useragent']"
        code => "event.append(Hash[@kname.zip(event['message'].split('|'))])"
    }
}

  

相關文章