您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關Fluentd事件的生命周期有哪些,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
什么是事件?
事件(Event)是Fluentd內部處理流程使用的數據結構,日志記錄一旦進入Fluentd便被封裝成一個event。Event由三部分組成:tag、time、record。
tag標識事件的來源,或者說類型,用于內部消息路由,即后續交由哪個插件處理;
time是事件的發生時間;
record為日志的實際內容,這是一個JSON對象。
Input插件負責將源數據封裝為event,比如in_tail插件從文本中生成event。對于下邊這行文本:
192.168.0.1 - - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777
將會產生下邊的event對象:
tag: apache.access #根據插件的tag參數來設置
time: 1362020400 # 28/Feb/2013:12:00:00 +0900
record: {"user":"-","method":"GET","code":200,"size":777,"host":"192.168.0.1","path":"/"} #根據in_tail插件中的parse項來決定如何解析單行日志記錄,并生成相應的JSON對象
下邊我們通過一個具體的配置來講解事件的處理過程。
本例使用一個很基礎的配置片段來描述各插件是如何關聯到一起的,它包括了如何定義輸入源(或者說監聽器),以及如何設置通用的匹配規則將event路由到輸出端。
我們使用in_http和out_stdout這兩個插件來描述event的循環過程。
<source> @type http port 8888 bind 0.0.0.0</source>
上邊的配置使用in_http插件定義了一個HTTP服務器,監聽端口為8888。然后我們再定義一個匹配(Match)規則,event路由引擎會根據這個規則將http請求派發到輸出端。這里的輸出端是stdout,僅僅將http請求打印到屏幕上。
<match test.cycle> @type stdout </match>
Match的作用是設置一個匹配規則test.cycle,對于每個進入Fluentd的event,如果其tag值和test.cycle相等(或者說匹配,因為match可以使用通配符。這里的tag是由in_http插件生成的。),那么這個event就會進入此match定義的output插件,本例中的output插件就是out_stdout。
至此,我們定義了三個基本項:Input、Match和Output,雖然僅僅使用兩個配置段。這就是一個可以使用的采集配置了,可以通過以下命令進行測試:
curl -i -X POST -d 'json={"action":"login","user":2}' http://localhost:8888/test.cycle
你會看到如下輸出:
HTTP/1.1 200 OKContent-Type: text/plainConnection: Keep-AliveContent-Length: 0
在/var/log/td-agent.log中會有如下輸出:
2020-03-05 14:06:24.144168913 +0800 test.cycle: {"action":"login","user":2}
過濾器(Filters)
過濾器用于對事件進行篩選,決定是否接收或者丟棄事件。我們可以在上邊的示例中增加一個過濾器。
<source>
@type http
port 8888
bind 0.0.0.0
</source>
<filter test.cycle>
@type grep
<exclude>
key action
pattern ^logout$
</exclude>
</filter>
<match test.cycle>
@type stdout
</match>
添加過濾器之后,事件在路由到match之前必須經過過濾器的處理。過濾器根據事件的類型和過濾規則來決定是否接受此事件。
我們示例中使用的是grep過濾器,這個過濾器對test.cycle這類事件進行過濾,會排除http請求中action值為logout的事件。
所以,如果嘗試發送下邊的請求,在td-agent.log中是看不到任何輸出的。
curl -i -X POST -d 'json={"action":"logout","user":2}' http://localhost:8888/test.cycle
從示例中可以看到,事件是根據配置順序自上而下來被處理的。我們可以根據需要配置任意多個過濾器,這樣一來,配置文件會變得很長很復雜。Fluentd提供了標簽來解決此問題。
標簽(Labels)
標簽的作用是用來定義一組配置項,這組配置項可以被其他配置項引用,從而實現事件路由跳轉。類似編程語言中的goto的功能。
還是上邊的示例,我們定義一個標簽來看一下效果。
<source>
@type http
bind 0.0.0.0
port 8888
@label @STAGING
</source>
<filter test.cycle>
@type grep
<exclude>
key action
pattern ^login$
</exclude>
</filter>
<label @STAGING>
<filter test.cycle>
@type grep
<exclude>
key action
pattern ^logout$
</exclude>
</filter>
<match test.cycle>
@type stdout
</match>
</label>
這個STARTING標簽將之前的filter和match封裝到了一起,然后在source中進行了引用。如此一來,事件由input插件生成后將會跳過那個獨立的filter,直接進入STARTING定義的處理流程中。
緩存(Buffers)
我們看到了事件從input產生,經由filter篩選,最后到達output的過程。在上邊的示例中,我們使用的是stdout插件直接輸出到控制臺,并沒有經過緩存。
實際應用中,一般會先把數據進行緩存,達到一定條件后再flush到目標存儲中。這樣可以提升系統可靠性,對于穩定系統吞吐量也很重要。可在后續文章中共同了解更多關于緩存插件的知識。
以上就是Fluentd事件的生命周期有哪些,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。