Fluentd構成

8406 ワード

Fluentd


Fluentdは、125以上の異なるタイプのシステムでログを収集することをサポートする完全オープンソース無料のログ収集システムです.
システムの概略図は次のとおりです.

インストール


第一歩、RPMパッケージのインストール


RedHat/CentOS 6,7,64ビットシステムには、以下の方法でインストールできます.
curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh

ステップ2、開始


システムのバージョンに応じて、次のいずれかの方法で起動できます.
systemctl start td-agent
/etc/init.d/td-agent start

ステップ3、検証


デフォルトでは、プロファイルは/etc/td-agent/td-agentです.confは、HTTPの8888ポートからログを受信しstdout(/var/log/td-agent/td-agent.log)にルーティングする.次のコマンドでテストログを開始できます.
curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test

ログを表示する最後の行は、送信したばかりのテストログです.
# tail /var/log/td-agent/td-agent.log
2018-09-14 16:42:14 +0800 [warn]: #0 [output_td] secondary type should be same with primary one primary="Fluent::Plugin::TreasureDataLogOutput" secondary="Fluent::Plugin::FileOutput"
2018-09-14 16:42:14 +0800 [info]: adding match pattern="debug.**" type="stdout"
2018-09-14 16:42:14 +0800 [info]: adding source type="forward"
2018-09-14 16:42:14 +0800 [info]: adding source type="http"
2018-09-14 16:42:14 +0800 [info]: adding source type="debug_agent"
2018-09-14 16:42:14 +0800 [info]: #0 starting fluentd worker pid=24064 ppid=24051 worker=0
2018-09-14 16:42:14 +0800 [info]: #0 [input_debug_agent] listening dRuby uri="druby://127.0.0.1:24230" object="Fluent::Engine" worker=0
2018-09-14 16:42:14 +0800 [info]: #0 [input_forward] listening port port=24224 bind="0.0.0.0"
2018-09-14 16:42:14 +0800 [info]: #0 fluentd worker is now running worker=0
2018-09-14 16:46:16.388094455 +0800 debug.test: {"json":"message"}

コンフィギュレーション


プロファイルは、Fluentd入力(input)と出力(output)の動作をユーザーに制御させるために使用されます.(1)入力プラグインと出力プラグインを選択し、(2)プラグインパラメータを指定します.プロファイルは、Fluentdを正常に動作させるために存在する必要があります.

文字コード


Fluentdは、プロファイルがUTF-8またはASCIIとして符号化されると仮定する.

めいれいリスト


プロファイルは、次のコマンドで構成されています.
  • source命令は入力源を決定する.
  • match命令は出力先を決定する.
  • filter命令は、イベント処理パイプを決定する.
  • system命令システムレベル構成を設定します.
  • label命令はoutputとfilterをグループ化して内部ルーティングを行う.
  • @includeコマンドは、他のファイルを含むために使用されます.

  • 構成例Step by Step


    1.source:すべてのデータのソース


    Fluentdの入力ソースを選択して構成するには、sourceコマンドが必要です.Fluentdの標準入力プラグインにはhttpとforwardが含まれています.httpは、HTTPポートを傍受し、HTTPからのログメッセージを受信する.forwardはfluentdにTCPポートを傍受させ、TCPパケットを受け入れる.もちろん、両方を同時にオンにすることもできます(必要なソースを追加できます).
    # Receive events from 24224/tcp
    # This is used by log forwarding and the fluent-cat command
    
      @type forward
      port 24224
    
    
    # http://this.host:9880/myapp.access?json={"event":"data"}
    
      @type http
      port 9880
    
    

    各source命令には@typeパラメータが含まれている必要があります.@typeパラメータは、どの入力プラグインが使用されるかを指定します.

    挿入:Routing


    ソースはイベントをFluentdのルーティングエンジンにコミットします.各イベントは、tag、time、recordの3つのエンティティで構成されます.tagは'.'分離された文字列(myapp.accessなど)は、Fluentd内部ルーティングの指示として使用されます.timeフィールドはinputプラグインによって指定され、Unix時間フォーマットでなければなりません.レコードはJSONオブジェクトです.

    2.match:fluentdに何をすべきか教えて!


    match命令は、一致tagを有するすべてのイベントを検索し、処理する.match命令の最も一般的な使い方は、イベントを他のシステムに出力することです(したがって、match命令に対応するプラグインは「output」プラグインと呼ばれます).Fluentdの標準出力プラグインにはfileとforwardが含まれています.プロファイルに追加します.
    # Receive events from 24224/tcp
    # This is used by log forwarding and the fluent-cat command
    
      @type forward
      port 24224
    
    
    # http://this.host:9880/myapp.access?json={"event":"data"}
    
      @type http
      port 9880
    
    
    # Match events tagged with "myapp.access" and
    # store them to /var/log/fluent/access.%Y-%m-%d
    # Of course, you can control how you partition your data
    # with the time_slice_format option.
    
      @type file
      path /var/log/fluent/access
    
    

    各match命令には、マッチングテンプレートと@typeパラメータが含まれている必要があります.テンプレートに一致するtagのイベントのみが出力先に送られます(上記の例では、tagが「myapp.access」のイベントのみが一致します).typeパラメータは、使用するoutputプラグインを指定します.

    3.filter:イベント処理パイプ


    filter命令はmatchと同じ構文を持つが、filterは処理をパイプに直列化することができる.filterを使用すると、イベントフローは次のように表示されます.
    Input -> filter 1 -> ... -> filter N -> Output
    

    標準のrecord_を追加します.Transformer filterは、書いたばかりのmatchの例にあります.
    # http://this.host:9880/myapp.access?json={"event":"data"}
    
      @type http
      port 9880
    
    
    
      @type record_transformer
      
        host_param "#{Socket.gethostname}"
      
    
    
    
      @type file
      path /var/log/fluent/access
    
    

    イベント{"event":"data"}を受け取ったら、filter:record_に捨てます.transformerでrecord_transformerはイベントに「host_param」フィールドを追加し、「event」:「data」、「host_param」:「webserver 1」}に続き、イベントは最終的にfile出力プラグインに到達する.

    matchテンプレート


    ワイルドカードと展開


    次のmatchテンプレートは、和のtagに使用できます.
  • *は、単一のtag部分に一致します.
  • 例えば、テンプレートa.*はa.bに一致するが、aとa.b.c
  • には一致しない
  • **0個以上のtag部分に一致
  • 例えば、a.**マッチングa,a.bおよびa.b.c
  • {X,Y,Z}マッチングX,Y,またはZ,ここでX,Y,Zはマッチングテンプレートである
  • 例えば、テンプレート{a,b}はaとbに一致するが、c
  • には一致しない
  • この方法は、*および**テンプレートの組合せに使用することができる.例:a.{b,c}.*およびa.{b,c.*}
  • 複数のテンプレートが同時に単一のtagにリストされている場合(1つ以上のスペースで区切られている場合)、リストされている任意のテンプレートに一致します.例:
  • テンプレートマッチングaおよびb
  • テンプレートマッチングa,a.b,a.b.c(前のテンプレートにマッチング)およびb.d(後のテンプレートにマッチング)

  • 照合順序


    Fluentdは、プロファイルにテンプレートが表示される順序で一致しようとします.次の例を見てみましょう
    # ** matches all tags. Bad :(
    
      @type blackhole_plugin
    
    
    
      @type file
      path /var/log/fluent/access
    
    

    上の例ではmyapp.アクセスは永遠に一致しません.より緩やかなマッチングテンプレートは、より厳密なマッチングテンプレートの後に定義する必要があります.このように:
    
      @type file
      path /var/log/fluent/access
    
    
    # Capture all unmatched tags. Good :)
    
      @type blackhole_plugin
    
    

    もちろん、同じテンプレートが2つある場合、後者のmatchは永遠に一致しません.イベントを複数の出力に送信する場合はout_を使用することを考慮してください.copyプラグイン.
    よくある落とし穴は、後に置くことです.前述の理由で、イベントはfilterに到達できず、予想通りに動作しません.

    COPY出力カード


    out_copyはFluentdのコアプラグインで、別途インストールする必要はありません.out_copyはイベントを複数コピーし、それぞれ複数の出力プラグインに送ります.直接例を示します.
    
      @type copy
      
        @type file
        path /var/log/fluent/myapp1
        ...
      
      
        ...
      
      
        ...
      
    
    

    次の例では、ローカルフォルダ/var/log/fluent/myappにイベントを保存し、Elasticsearchインスタンスのfluentdに送信する.testコレクションで.詳細についてはout_を参照してくださいfileとout_Elasticsearchプラグインの詳細説明.
    
      @type copy
      
        @type file
        path /var/log/fluent/myapp
        compress gzip
        
          localtime false
        
        
          timekey_wait 10m
          timekey 86400
          timekey_use_utc true
          path /var/log/fluent/myapp
        
        
          time_format %Y%m%dT%H%M%S%z
          localtime false
        
      
      
        @type elasticsearch
        host 192.168.198.46
        port 9200
        index_name fluentd
        type_name test
      
    
    

    dockerを起動し、log-driverをfluentdに向けると、ログをfluentdに出力し、elasticsearchに転送し、ログバックアップをローカルに残します.
    docker run --rm --log-driver fluentd --log-opt fluentd-address=192.168.198.46:24224 --log-opt tag=docker.test alpine date
    

    out_copyパラメータ

  • @type-この値は「copy」
  • でなければなりません.
  • deep_copy-深度コピー、デフォルトfalse、out_copyは、各storeプラグイン間でイベントレコードを共有します.この値がtrueの場合out_copyはstoreプラグインごとにイベントレコードをコピーします.
  • フィールド-保存先を指定します.フォーマットは命令と一致する.このフィールドは少なくとも1回表示する必要があります.
  • ignore_error-エラーを無視します.storeにエラーが発生した場合、このパラメータは残りのstoreに作用します.たとえば、
    
      @type copy
      
        @type plugin1
      
      
        @type plugin2
      
    
    
    plugin 1にエラーが発生した場合、plugin 2は実行されません.重要でないstoreで発生したエラーを無視するには、storeのignore_を指定します.Errorパラメータ.
    
      @type copy
      
        @type plugin1
      
      
        @type plugin2