怎么用Fluentd进行简单流处理
這篇文章主要講解了“怎么用Fluentd進行簡單流處理”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用Fluentd進行簡單流處理”吧!
在某些日志采集場景中,我們需要對數據流進行一些轉換。比如,我們可能需要從日志記錄中提取某些字段以進行錯誤告警,或向日志記錄中插入新的字段用以后續的分析。
本文簡單介紹一下使用Fluentd進行數據操作的技術細節。
-
根據日志字段取值來過濾事件 談到過濾,我們通常會想到正則表達式,在linux中通常使用grep來進行文本查找和過濾。Fluentd內置了filter_grep過濾插件,可對數據流進行正則過濾。
假設我們正在使用一個web服務,比如Apache,我們需要對其訪問日志進行監控。由輸入插件產生的事件類似如下結構:
{"host":"192.168.1.1","method":"GET","path":"/index.html","code":200,"size":2344,"referer":null}這其中的code字段表示用戶請求狀態,我們可能對狀態為2xx的請求不太關心,這樣就可以將這類事件過濾掉,專門處理用戶請求可能發生的異常情況。
我們可以通過在Fluentd中增加如下<filter>配置來實現事件過濾。
<filterapache.**>@typegrep<exclude>keycodepattern^2\d\d$</exclude></filter>
使用grep過濾插件,通過key指定code字段為過濾字段,通過pattern匹配code值為2xx的事件,將這些事件排除(exclude)掉。
filter_grep還可以對多個字段進行過濾。比如,保留狀態碼為5xx的事件,但過濾掉url中以/test/開頭的請求。如下所示:
<filterapache.**>@typegrep<regexp>keycodepattern^5\d\d$</regexp><exclude>keypathpattern^/test/</exclude></filter>
-
向事件中插入定制字段 我們可以在某個處理階段向日志記錄中插入一些字段,供后續使用。這可以通過Fluentd內置的filter_record_transformer過濾器插件來實現。 假設我們是以集群的方式來部署web服務的,我們可能需要標記用戶請求是由哪臺服務器來處理的。 在Fluentd中進行如下配置即可實現此類需求: <filterapache.**>@typerecord_transformer<record>server"${hostname}"</record></filter>這里,record_transformer插件向事件record中插入了一個server字段,其值為web服務器的主機名。新的日志record就更新為如下格式:
{"host":"192.168.1.1","method":"GET","path":"/index.html","code":200,"size":2344,"referer":null,"server":"app1"}filter_record_transformer除了可以直接插入預定義的一些變量,如${hostname},還可以插入其他變量或者使用ruby表達式來計算字段值。具體可參考此插件的使用說明,我們也會在后續的插件系列中進行介紹。
總結
以上是生活随笔為你收集整理的怎么用Fluentd进行简单流处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT_B_1047_Java(20分)
- 下一篇: 京东自营靠谱吗