溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Fluentd事件的生命周期有哪些

發(fā)布時(shí)間:2021-07-22 14:17:00 來源:億速云 閱讀:212 作者:Leah 欄目:大數(shù)據(jù)

本篇文章給大家分享的是有關(guān)Fluentd事件的生命周期有哪些,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

什么是事件?

事件(Event)是Fluentd內(nèi)部處理流程使用的數(shù)據(jù)結(jié)構(gòu),日志記錄一旦進(jìn)入Fluentd便被封裝成一個(gè)event。Event由三部分組成:tag、time、record。

tag標(biāo)識(shí)事件的來源,或者說類型,用于內(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ù)來設(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)來決定如何解析單行日志記錄,并生成相應(yīng)的JSON對(duì)象

下邊我們通過一個(gè)具體的配置來講解事件的處理過程。

      本例使用一個(gè)很基礎(chǔ)的配置片段來描述各插件是如何關(guān)聯(lián)到一起的,它包括了如何定義輸入源(或者說監(jiān)聽器),以及如何設(shè)置通用的匹配規(guī)則將event路由到輸出端。

我們使用in_http和out_stdout這兩個(gè)插件來描述event的循環(huán)過程。






<source>  @type http  port 8888  bind 0.0.0.0</source>


    上邊的配置使用in_http插件定義了一個(gè)HTTP服務(wù)器,監(jiān)聽端口為8888。然后我們再定義一個(gè)匹配(Match)規(guī)則,event路由引擎會(huì)根據(jù)這個(gè)規(guī)則將http請(qǐng)求派發(fā)到輸出端。這里的輸出端是stdout,僅僅將http請(qǐng)求打印到屏幕上。




<match test.cycle>  @type stdout </match>

    Match的作用是設(shè)置一個(gè)匹配規(guī)則test.cycle,對(duì)于每個(gè)進(jìn)入Fluentd的event,如果其tag值和test.cycle相等(或者說匹配,因?yàn)閙atch可以使用通配符。這里的tag是由in_http插件生成的。),那么這個(gè)event就會(huì)進(jìn)入此match定義的output插件,本例中的output插件就是out_stdout。

    至此,我們定義了三個(gè)基本項(xiàng):Input、Match和Output,雖然僅僅使用兩個(gè)配置段。這就是一個(gè)可以使用的采集配置了,可以通過以下命令進(jìn)行測試:


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}
     

     
    下邊我們開始了解一下事件是如何被處理和改變的。  
     
    當(dāng)你準(zhǔn)備好一個(gè)采集配置后,F(xiàn)luentd就生成了用以處理輸入數(shù)據(jù)的各種規(guī)則。日志事件會(huì)歷經(jīng)一系列的處理流程,從而決定了事件的循環(huán)周期。  
    • 過濾器(Filters)

    • 過濾器用于對(duì)事件進(jìn)行篩選,決定是否接收或者丟棄事件。我們可以在上邊的示例中增加一個(gè)過濾器。


















      <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之前必須經(jīng)過過濾器的處理。過濾器根據(jù)事件的類型和過濾規(guī)則來決定是否接受此事件。


      我們示例中使用的是grep過濾器,這個(gè)過濾器對(duì)test.cycle這類事件進(jìn)行過濾,會(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ù)配置順序自上而下來被處理的。我們可以根據(jù)需要配置任意多個(gè)過濾器,這樣一來,配置文件會(huì)變得很長很復(fù)雜。Fluentd提供了標(biāo)簽來解決此問題。


    • 標(biāo)簽(Labels)

      標(biāo)簽的作用是用來定義一組配置項(xiàng),這組配置項(xiàng)可以被其他配置項(xiàng)引用,從而實(shí)現(xiàn)事件路由跳轉(zhuǎn)。類似編程語言中的goto的功能。


      還是上邊的示例,我們定義一個(gè)標(biāo)簽來看一下效果。

      <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>

      這個(gè)STARTING標(biāo)簽將之前的filter和match封裝到了一起,然后在source中進(jìn)行了引用。如此一來,事件由input插件生成后將會(huì)跳過那個(gè)獨(dú)立的filter,直接進(jìn)入STARTING定義的處理流程中。


    • 緩存(Buffers)

      我們看到了事件從input產(chǎn)生,經(jīng)由filter篩選,最后到達(dá)output的過程。在上邊的示例中,我們使用的是stdout插件直接輸出到控制臺(tái),并沒有經(jīng)過緩存。

      實(shí)際應(yīng)用中,一般會(huì)先把數(shù)據(jù)進(jìn)行緩存,達(dá)到一定條件后再flush到目標(biāo)存儲(chǔ)中。這樣可以提升系統(tǒng)可靠性,對(duì)于穩(wěn)定系統(tǒng)吞吐量也很重要??稍诤罄m(xù)文章中共同了解更多關(guān)于緩存插件的知識(shí)。

總的來說,事件會(huì)在各插件之間接續(xù)流轉(zhuǎn),直到到達(dá)output,結(jié)束整個(gè)生命周期。如下圖:  

Fluentd事件的生命周期有哪些

以上就是Fluentd事件的生命周期有哪些,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI