本篇文章給大家分享的是有關(guān)Fluentd事件的生命周期有哪些,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供浉河網(wǎng)站建設(shè)、浉河做網(wǎng)站、浉河網(wǎng)站設(shè)計(jì)、浉河網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、浉河企業(yè)網(wǎng)站模板建站服務(wù),10年浉河做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
什么是事件?
事件(Event)是Fluentd內(nèi)部處理流程使用的數(shù)據(jù)結(jié)構(gòu),日志記錄一旦進(jìn)入Fluentd便被封裝成一個(gè)event。Event由三部分組成:tag、time、record。
tag標(biāo)識(shí)事件的來(lái)源,或者說(shuō)類型,用于內(nèi)部消息路由,即后續(xù)交由哪個(gè)插件處理;
time是事件的發(fā)生時(shí)間;
record為日志的實(shí)際內(nèi)容,這是一個(gè)JSON對(duì)象。
Input插件負(fù)責(zé)將源數(shù)據(jù)封裝為event,比如in_tail插件從文本中生成event。對(duì)于下邊這行文本:
192.168.0.1 - - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777
將會(huì)產(chǎn)生下邊的event對(duì)象:
tag: apache.access #根據(jù)插件的tag參數(shù)來(lái)設(shè)置
time: 1362020400 # 28/Feb/2013:12:00:00 +0900
record: {"user":"-","method":"GET","code":200,"size":777,"host":"192.168.0.1","path":"/"} #根據(jù)in_tail插件中的parse項(xiàng)來(lái)決定如何解析單行日志記錄,并生成相應(yīng)的JSON對(duì)象
下邊我們通過(guò)一個(gè)具體的配置來(lái)講解事件的處理過(guò)程。
本例使用一個(gè)很基礎(chǔ)的配置片段來(lái)描述各插件是如何關(guān)聯(lián)到一起的,它包括了如何定義輸入源(或者說(shuō)監(jiān)聽(tīng)器),以及如何設(shè)置通用的匹配規(guī)則將event路由到輸出端。
我們使用in_http和out_stdout這兩個(gè)插件來(lái)描述event的循環(huán)過(guò)程。
上邊的配置使用in_http插件定義了一個(gè)HTTP服務(wù)器,監(jiān)聽(tīng)端口為8888。然后我們?cè)俣x一個(gè)匹配(Match)規(guī)則,event路由引擎會(huì)根據(jù)這個(gè)規(guī)則將http請(qǐng)求派發(fā)到輸出端。這里的輸出端是stdout,僅僅將http請(qǐng)求打印到屏幕上。
@type stdout
Match的作用是設(shè)置一個(gè)匹配規(guī)則test.cycle,對(duì)于每個(gè)進(jìn)入Fluentd的event,如果其tag值和test.cycle相等(或者說(shuō)匹配,因?yàn)閙atch可以使用通配符。這里的tag是由in_http插件生成的。),那么這個(gè)event就會(huì)進(jìn)入此match定義的output插件,本例中的output插件就是out_stdout。
至此,我們定義了三個(gè)基本項(xiàng):Input、Match和Output,雖然僅僅使用兩個(gè)配置段。這就是一個(gè)可以使用的采集配置了,可以通過(guò)以下命令進(jìn)行測(cè)試:
curl -i -X POST -d 'json={"action":"login","user":2}' http://localhost:8888/test.cycle
你會(huì)看到如下輸出:
HTTP/1.1 200 OKContent-Type: text/plainConnection: Keep-AliveContent-Length: 0
在/var/log/td-agent.log中會(huì)有如下輸出:
2020-03-05 14:06:24.144168913 +0800 test.cycle: {"action":"login","user":2}
過(guò)濾器(Filters)
過(guò)濾器用于對(duì)事件進(jìn)行篩選,決定是否接收或者丟棄事件。我們可以在上邊的示例中增加一個(gè)過(guò)濾器。
@type http
port 8888
bind 0.0.0.0
@type grep
key action
pattern ^logout$
@type stdout
添加過(guò)濾器之后,事件在路由到match之前必須經(jīng)過(guò)過(guò)濾器的處理。過(guò)濾器根據(jù)事件的類型和過(guò)濾規(guī)則來(lái)決定是否接受此事件。
我們示例中使用的是grep過(guò)濾器,這個(gè)過(guò)濾器對(duì)test.cycle這類事件進(jìn)行過(guò)濾,會(huì)排除http請(qǐng)求中action值為logout的事件。
所以,如果嘗試發(fā)送下邊的請(qǐng)求,在td-agent.log中是看不到任何輸出的。
curl -i -X POST -d 'json={"action":"logout","user":2}' http://localhost:8888/test.cycle
從示例中可以看到,事件是根據(jù)配置順序自上而下來(lái)被處理的。我們可以根據(jù)需要配置任意多個(gè)過(guò)濾器,這樣一來(lái),配置文件會(huì)變得很長(zhǎng)很復(fù)雜。Fluentd提供了標(biāo)簽來(lái)解決此問(wèn)題。
標(biāo)簽(Labels)
標(biāo)簽的作用是用來(lái)定義一組配置項(xiàng),這組配置項(xiàng)可以被其他配置項(xiàng)引用,從而實(shí)現(xiàn)事件路由跳轉(zhuǎn)。類似編程語(yǔ)言中的goto的功能。
還是上邊的示例,我們定義一個(gè)標(biāo)簽來(lái)看一下效果。
@type http
bind 0.0.0.0
port 8888
@label @STAGING
@type grep
key action
pattern ^login$
@type grep
key action
pattern ^logout$
@type stdout
這個(gè)STARTING標(biāo)簽將之前的filter和match封裝到了一起,然后在source中進(jìn)行了引用。如此一來(lái),事件由input插件生成后將會(huì)跳過(guò)那個(gè)獨(dú)立的filter,直接進(jìn)入STARTING定義的處理流程中。
緩存(Buffers)
我們看到了事件從input產(chǎn)生,經(jīng)由filter篩選,最后到達(dá)output的過(guò)程。在上邊的示例中,我們使用的是stdout插件直接輸出到控制臺(tái),并沒(méi)有經(jīng)過(guò)緩存。
實(shí)際應(yīng)用中,一般會(huì)先把數(shù)據(jù)進(jìn)行緩存,達(dá)到一定條件后再flush到目標(biāo)存儲(chǔ)中。這樣可以提升系統(tǒng)可靠性,對(duì)于穩(wěn)定系統(tǒng)吞吐量也很重要。可在后續(xù)文章中共同了解更多關(guān)于緩存插件的知識(shí)。
以上就是Fluentd事件的生命周期有哪些,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。