コンテンツにスキップ

設定ファイル@FluentBit

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. SERVICEセクション

SERVICEとは

パイプライン全体の設定やファイルの読み出しを設定する。

各設定の頭文字は大文字とする。

*実装例*

フラッシュについては、以下のリンクを参考にせよ。

[SERVICE]
    # バッファに蓄えられた全てのログを宛先にアウトプットする間隔
    Flush 1
    # FluentBitのプロセスを終了する待機時間
    Grace 30
    # FluentBit自体のログレベル
    Log_Level info
    # 読み込まれるParsers Multilineファイルの名前
    Parsers_File parsers_multiline.conf
    # 読み込まれるStream Processorファイルの名前
    Streams_File stream_processor.conf
    # 監視ツール (Prometheys) で監視する場合は、有効化する
    Http_Server On


実行ログの確認

Log_Level値でFluentBitのログレベルを制御できる。

debugを割り当てると、FluentBitのログがより詳細になり、各セクションの設定値を確認できるようになる。

*実行ログ例*

Fluent Bit v1.8.6
* Copyright (C) 2019-2021 The Fluent Bit Authors
* Copyright (C) 2015-2018 Treasure Data
* Fluent Bit is a CNCF sub-project under the umbrella of Fluentd
* https://fluentbit.io

[2021/01/01 12:00:00] [ info] Configuration:
[2021/01/01 12:00:00] [ info]  flush time     | 1.000000 seconds
[2021/01/01 12:00:00] [ info]  grace          | 30 seconds
[2021/01/01 12:00:00] [ info]  daemon         | 0
[2021/01/01 12:00:00] [ info] ___________
[2021/01/01 12:00:00] [ info]  inputs:
[2021/01/01 12:00:00] [ info]      forward
[2021/01/01 12:00:00] [ info] ___________
[2021/01/01 12:00:00] [ info]  filters:
[2021/01/01 12:00:00] [ info]      stdout.0
[2021/01/01 12:00:00] [ info] ___________
[2021/01/01 12:00:00] [ info]  outputs:
[2021/01/01 12:00:00] [ info]      null.0
[2021/01/01 12:00:00] [ info] ___________
[2021/01/01 12:00:00] [ info]  collectors:
[2021/01/01 12:00:00] [ info] [engine] started (pid=1)
[2021/01/01 12:00:00] [debug] [engine] coroutine stack size: 24576 bytes (24.0K)
[2021/01/01 12:00:00] [debug] [storage] [cio stream] new stream registered: forward.0
[2021/01/01 12:00:00] [ info] [storage] version=1.1.1, initializing...
[2021/01/01 12:00:00] [ info] [storage] in-memory
[2021/01/01 12:00:00] [ info] [storage] normal synchronization mode, checksum disabled, max_chunks_up=128
[2021/01/01 12:00:00] [ info] [cmetrics] version=0.2.1
[2021/01/01 12:00:00] [debug] [in_fw] Listen='0.0.0.0' TCP_Port=24224
[2021/01/01 12:00:00] [ info] [input:forward:forward.0] listening on 0.0.0.0:24224
[2021/01/01 12:00:00] [debug] [null:null.0] created event channels: read=21 write=22
[2021/01/01 12:00:00] [debug] [router] match rule forward.0:null.0
[2021/01/01 12:00:00] [ info] [sp] stream processor started


02. INPUT

INPUTとは

ログのパイプラインへのインプット方法を設定する。

fluent-bit_input

プラグインを使用して、ログのインプット方法を設定する。

コマンドの-iオプションでINPUT名を指定し、実行もできる。

Inputs
  cpu                     CPU Usage
  mem                     Memory Usage
  thermal                 Thermal
  kmsg                    Kernel Log Buffer
  proc                    Check Process health
  disk                    Diskstats
  systemd                 Systemd (Journal) reader
  netif                   Network Interface Usage
  docker                  Docker containers metrics
  docker_events           Docker events
  node_exporter_metrics   Node Exporter Metrics (Prometheus Compatible)
  fluentbit_metrics       Fluent Bit internal metrics
  tail                    Tail files
  dummy                   Generate dummy data
  head                    Head Input
  health                  Check TCP server health
  http                    HTTP
  collectd                collectd input plugin
  statsd                  StatsD input plugin
  serial                  Serial input
  stdin                   Standard Input
  syslog                  Syslog
  exec                    Exec Input
  tcp                     TCP
  mqtt                    MQTT, listen for Publish messages
  forward                 Fluentd in-forward
  random                  Random


ビルトインのプラグイン

デフォルトで組み込まれているビルトンのプラグインは、ソースコードから確認できる。


dummyプラグイン

▼ dummyプラグインとは

ダミーの構造化ログをパイプラインにインプットする。

非構造化ログはインプットデータとして使用できない。

開発環境でパイプラインの動作を確認するために役立つ。

{"message": "dummy"}

▼ セットアップ

*実装例*

[INPUT]
    Name   dummy
    # ダミーJSON型データ
    Dummy  {"message":"dummy"}

▼ コマンド

*例*

$ /fluent-bit/bin/fluent-bit -i dummy -o stdout


forwardプラグイン

▼ forwardプラグインとは

受信したログを指定されたポートで受信し、パイプラインにインプットする。

▼ セットアップ

*実装例*

[INPUT]
    # プラグイン名
    Name        forward
    Listen      0.0.0.0
    # プロセスの受信ポート

*実行ログ例*

Fluent Bit v1.8.6
* Copyright (C) 2019-2021 The Fluent Bit Authors
* Copyright (C) 2015-2018 Treasure Data
* Fluent Bit is a CNCF sub-project under the umbrella of Fluentd
* https://fluentbit.io

[2021/01/01 12:00:00] [ info] [engine] started (pid=1)
[2021/01/01 12:00:00] [ info] [storage] version=1.1.1, initializing...
[2021/01/01 12:00:00] [ info] [storage] in-memory
[2021/01/01 12:00:00] [ info] [storage] normal synchronization mode, checksum disabled, max_chunks_up=128
[2021/01/01 12:00:00] [ info] [cmetrics] version=0.2.1
[2021/01/01 12:00:00] [ info] [input:forward:forward.0] listening on 0.0.0.0:24224
[2021/01/01 12:00:00] [ info] [sp] stream processor started

▼ コマンド

*例*

$ /fluent-bit/bin/fluent-bit \
    -i forward \
    -o stdout


tailプラグイン

▼ tailプラグインとは

指定したパスに継続的にアウトプットされるログファイルを順次結合し、パイプラインにインプットする。

あらかじめ、FluentBitコンテナ内にログファイルを配置する必要があり、Pathでこれを指定する。

v1.8を境にオプションが変わっていることに注意する。

▼ セットアップ

*実装例*

[INPUT]
    # プラグイン名
    Name              tail
    # FluentBitコンテナ内のログファイルの場所。ワイルドカードを使用できる。
    Path              /var/www/foo/storage/logs/*.log
    # 使用するパーサー名
    multiline.parser  laravel-multiline-parser
log_router:
  container_name: fluent-bit
  build:
    dockerfile: ./docker/fluent-bit/Dockerfile
    context: .
  volumes:
    # アプリケーションのログファイルのボリュームマウント
    - ./storage/logs:/var/www/foo/storage/logs

▼ コマンド

*例*

$ fluent-bit \
    -i tail \
    -p path=/var/www/foo/storage/logs/*.log \
    -o stdout

*実行ログ例*

* Copyright (C) 2019-2021 The Fluent Bit Authors
* Copyright (C) 2015-2018 Treasure Data
* Fluent Bit is a CNCF sub-project under the umbrella of Fluentd
* https://fluentbit.io

[2021/01/01 12:00:00] [ info] [engine] started (pid=1)
[2021/01/01 12:00:00] [ info] [storage] version=1.1.1, initializing...
[2021/01/01 12:00:00] [ info] [storage] in-memory
[2021/01/01 12:00:00] [ info] [storage] normal synchronization mode, checksum disabled, max_chunks_up=128
[2021/01/01 12:00:00] [ info] [cmetrics] version=0.2.1
[2021/01/01 12:00:00] [ info] [sp] stream processor started
[2021/01/01 12:00:00] [ info] [input:tail:tail.0] inotify_fs_add(): inode=31621169 watch_fd=1 name=/var/www/foo/storage/logs/laravel.log
[0] tail.0: [1634640932.010306200, {"log"=>"[2021-01-01 12:00:00] local.INFO: メッセージ"}]
[1] tail.0: [1634640932.013139300, {"log"=>"[2021-01-01 12:00:00] local.INFO: メッセージ"}]
[2] tail.0: [1634640932.013147300, {"log"=>"[2021-01-01 12:00:00] local.INFO: メッセージ"}]


03. PARSER

PARSERとは

非構造化ログを構造化ログに変換する。

fluent-bit_parser


自前criプラグイン

▼ 自前criプラグインとは

執筆時点 (2023/04/04) では、公式がcriプラグインを提供していない。

そこで、自前のcriプラグインを定義する。

自前criプラグインでは、Containerdのテキスト形式ログにマッチできるような正規表現を設定する。

Containerdのコンテナが作成する非構造化ログを構造化ログに変換する。

▼ セットアップ

*実装例*

PARSERセクションで、criプラグインを定義する。

[PARSER]
    Name        cri
    Format      regex
    # Containerdのテキスト形式ログにマッチできるような正規表現
    Regex       ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<message>.*)$
    Time_Key    time
    Time_Format %Y-%m-%dT%H:%M:%S.%L%z

INPUTセクションでcriプラグインを読み込む。

[INPUT]
    Name            tail
    Path            /var/log/containers/*.log
    Parser          cri
    Tag             kube.*
    Mem_Buf_Limit   5MB
    Skip_Long_Lines On

例えば、以下のような非構造化ログがあったとする。

criプラグインは、<timeキー> <streamキー> <logtagキー> <messageキー>を認識する。

2021-12-17T08:03:23.918838346+09:00 stderr F 2021/12/17 08:03:23 [INFO] start worker processes

その場合、構造化されて以下のようなログとなる。

{
  "time": "2021-12-17T08:03:23.918838346+09:00",
  "record":
    {
      "stream": "stderr",
      "logtag": "F",
      "message": "2021/12/17 08:03:23 [INFO] start worker processes",
      "time": "2021-12-17T08:03:23.918838346+09:00",
    },
}


04. FILTER

FILTERとは

ログのキーや値を加工する。

fluent-bit_filter


ビルトインのプラグイン

デフォルトで組み込まれているビルトンのプラグインは、ソースコードから確認できる。


grepプラグイン

▼ grepプラグインとは

ログが構造化ログの場合、条件にマッチしたログのみを取得する。

▼ セットアップ

[FILTER]
    name   grep
    match  *
    regex  log foo


modify

▼ modifyプラグインとは

ログが構造化ログの場合、ログの構造を変更する。

▼ セットアップ

変更前の構造化ログが以下だとする。

[0] memory: [1488543156, {"Mem.total"=>1016044, "Mem.used"=>841388, "Mem.free"=>174656, "Swap.total"=>2064380, "Swap.used"=>139888, "Swap.free"=>1924492}]
...

FILTERセクションで、modifyプラグインを定義する。

[INPUT]
    Name mem
    Tag  mem.local

[OUTPUT]
    Name  stdout
    Match *

[FILTER]
    Name modify
    Match *

    # キーとその値を構造化ログに追加する。
    Add Service1 SOMEVALUE
    Add Service3 SOMEVALUE3
    Add Mem.total2 TOTALMEM2
    Add Mem.total TOTALMEM

    # マッチしたキー名を変更する。
    Rename Mem.free MEMFREE
    Rename Mem.used MEMUSED
    Rename Swap.total SWAPTOTAL

以下の構造化ログに変更される。

[2018/04/06 01:35:13] [ info] [engine] started
[0] mem.local: [1522980610.006892802, {"Mem.total"=>4050908, "MEMUSED"=>738100, "MEMFREE"=>3312808, "SWAPTOTAL"=>1046524, "Swap.used"=>0, "Swap.free"=>1046524, "Service1"=>"SOMEVALUE", "Service3"=>"SOMEVALUE3", "Mem.total2"=>"TOTALMEM2"}]
...


modifyプラグイン

▼ modifyプラグインとは

ログが構造化ログの場合、キーや値の追加/コピー/変更/削除を実行する。

▼ セットアップ

[FILTER]
    Name            modify
    Match           *
    # 追加するキーと値
    Add             filter_type modify
    # コピーするキーと値
    Copy            copied_key copied_value
    # 変更するキーと値
    Set             updated_key updated_value
    # 削除するキー
    Remove          deleted_key
    # 削除対象キーの最初の文字 (前方一致) 。
    # もしこれ以外の文字列で始まる場合は、削除の非対象とする。
    Remove_wildcard ignored_key


multilineプラグイン

▼ multilineプラグインとは

マッチした複数行のログを結合する。

結合ルールは、MULTILINE_PARSERの設定ファイルに定義し、これをSERVICEで読み込む必要がある。

ただし、本番環境ではログが複数行にならないようにアプリケーション側で実装を行い、ログを収集して可視化する段階でフィルタリングできれば問題ない、という考え方もある。

▼ セットアップ

[SERVICE]
    # 読み込むファイル
    Parsers_File parsers_multiline.conf

[FILTER]
    # プラグイン名
    name                  multiline
    # マッチさせるログ
    match                 *
    multiline.key_content log
    # 使用するパーサー名
    multiline.parser      laravel

コマンドの-fオプションでFILTER名を指定し、実行もできる。

Filters
  alter_size              Alter incoming chunk size
  aws                     Add AWS Metadata
  checklist               Check records and flag them
  record_modifier         modify record
  throttle                Throttle messages using sliding window algorithm
  kubernetes              Filter to append Kubernetes metadata
  modify                  modify records by applying rules
  multiline               Concatenate multiline messages
  nest                    nest events by specified field values
  parser                  Parse events
  expect                  Validate expected keys and values
  grep                    grep events by specified field values
  rewrite_tag             Rewrite records tags
  lua                     Lua Scripting Filter
  stdout                  Filter events to STDOUT
  geoip2                  add geoip information to records

▼ MULTILINE_PARSER

複数行のログを結合するためのルールを設定する。

ここで定義したパーサー名を、multilineプラグインで指定する必要がある。

*実装例*

Laravelのスタックトレースを結合する。

[MULTILINE_PARSER]
    # パーサー名
    name          laravel
    # パーサータイプ
    type          regex
    # フラッシュ時間
    flush_timeout 1000

    # パーサールール。スタックトレースの文頭をstart_state、また以降に結合する文字列をcontで指定する。
    # 開始地点
    # [%Y-%m-%d %H:%M:%S] をスタックトレースの開始地点とする。
    rule          "start_state" "/\[[12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])\s+([01]?\d|2[0-3]):([0-5]\d):([0-5]\d)\].*/" "cont"

    # スタックトレース
    # [stacktrace]、[previous exception]、#、行間、"} 、で始まる文字列の場合に結合する。
    rule          "cont" "/(\[(stacktrace|previous exception)\]|#|\n\n|"\}).*/" "cont"

    # アプリケーション独自仕様のログ
    rule          "cont" "/・.*/" "cont"


parserプラグイン

▼ parserプラグインとは

マッチしたログを解析し、正規表現の名前付きキャプチャ機能 (?<foo>) を使用して新しいキーに文字列を抽出する。

FluentBitでの名前付きキャプチャについては、Fluentdのドキュメントを参考にせよ。

▼ バリデーション

FluentBitは、内部的にはruby製関数を使用して正規表現を検証している。

そのため、これを確認できるバリデーションツールを使用する。

代わりに、Fluentdの正規表現チェッカーでも良い。

▼ セットアップ


stdoutプラグイン

▼ stdoutプラグインとは

マッチしたログを、OUTPUTを経ずにそのまま標準出力に出力する。

FILTERまでのパイプラインが正しく動作しているかのデバッグとして役立つ。

▼ セットアップ

[FILTER]
    # プラグイン名
    Name  stdout
    Match *

▼ コマンド

*例*

$ /fluent-bit/bin/fluent-bit \
    -i <インプット名> \
    -F stdout \
    -m "*" \
    -o null

*実行ログ例*

Fluent Bit v1.8.6
* Copyright (C) 2019-2021 The Fluent Bit Authors
* Copyright (C) 2015-2018 Treasure Data
* Fluent Bit is a CNCF sub-project under the umbrella of Fluentd
* https://fluentbit.io

[2021/01/01 06:18:52] [ info] [engine] started (pid=40)
[2021/01/01 06:18:52] [ info] [storage] version=1.1.1, initializing...
[2021/01/01 06:18:52] [ info] [storage] in-memory
[2021/01/01 06:18:52] [ info] [storage] normal synchronization mode, checksum disabled, max_chunks_up=128
[2021/01/01 06:18:52] [ info] [cmetrics] version=0.2.1
[2021/01/01 06:18:52] [ info] [sp] stream processor started
[0] cpu.0: [1634710733.114477665, {"cpu_p"=>0.166667, "user_p"=>0.000000, "system_p"=>0.166667, "cpu0.p_cpu"=>0.000000, "cpu0.p_user"=>0.000000, "cpu0.p_system"=>0.000000, "cpu1.p_cpu"=>1.000000, "cpu1.p_user"=>0.000000, "cpu1.p_system"=>1.000000, "cpu2.p_cpu"=>0.000000, "cpu2.p_user"=>0.000000, "cpu2.p_system"=>0.000000, "cpu3.p_cpu"=>0.000000, "cpu3.p_user"=>0.000000, "cpu3.p_system"=>0.000000, "cpu4.p_cpu"=>0.000000, "cpu4.p_user"=>0.000000, "cpu4.p_system"=>0.000000, "cpu5.p_cpu"=>0.000000, "cpu5.p_user"=>0.000000, "cpu5.p_system"=>0.000000}]
[0] cpu.0: [1634710734.115201385, {"cpu_p"=>0.333333, "user_p"=>0.166667, "system_p"=>0.166667, "cpu0.p_cpu"=>0.000000, "cpu0.p_user"=>0.000000, "cpu0.p_system"=>0.000000, "cpu1.p_cpu"=>0.000000, "cpu1.p_user"=>0.000000, "cpu1.p_system"=>0.000000, "cpu2.p_cpu"=>0.000000, "cpu2.p_user"=>0.000000, "cpu2.p_system"=>0.000000, "cpu3.p_cpu"=>0.000000, "cpu3.p_user"=>0.000000, "cpu3.p_system"=>0.000000, "cpu4.p_cpu"=>0.000000, "cpu4.p_user"=>0.000000, "cpu4.p_system"=>0.000000, "cpu5.p_cpu"=>0.000000, "cpu5.p_user"=>0.000000, "cpu5.p_system"=>0.000000}]
[0] cpu.0: [1634710735.114646610, {"cpu_p"=>1.500000, "user_p"=>0.666667, "system_p"=>0.833333, "cpu0.p_cpu"=>0.000000, "cpu0.p_user"=>0.000000, "cpu0.p_system"=>0.000000, "cpu1.p_cpu"=>3.000000, "cpu1.p_user"=>2.000000, "cpu1.p_system"=>1.000000, "cpu2.p_cpu"=>2.000000, "cpu2.p_user"=>1.000000, "cpu2.p_system"=>1.000000, "cpu3.p_cpu"=>1.000000, "cpu3.p_user"=>0.000000, "cpu3.p_system"=>1.000000, "cpu4.p_cpu"=>1.000000, "cpu4.p_user"=>0.000000, "cpu4.p_system"=>1.000000, "cpu5.p_cpu"=>2.000000, "cpu5.p_user"=>1.000000, "cpu5.p_system"=>1.000000}]


05. STREAM_TASK

STREAM_TASKとは

現在のデータストリームからログを抽出し、新しいストリームを作成する。

このストリームは、パイプラインのINPUTに再び取り込まれ、処理し直される。

同時に、SERVICEでSTREAM_TASKの設定ファイルを読み込む必要がある。

[SERVICE]
    Streams_File stream_processor.conf

fluent-bit_stream-task


SQLステートメント

▼ SQLステートメントとは

STREAM_TASKセッションは、ユーザー定義のSQLステートメントで定義される。

▼ CREATE STREAM

SELECTステートメントの結果を使用して、データストリームを作成する。

*実装例*

[STREAM_TASK]
    Name foo-stream-task
    # SELECT句の結果からfooデータストリームを作成する。
    Exec CREATE STREAM foo AS SELECT * FROM TAG:'foo';

[STREAM_TASK]
    Name bar-stream-task
    # SELECT句の結果に、WITH句でbarタグを付与し、barデータストリームを作成する。
    Exec CREATE STREAM bar WITH (tag='bar') AS SELECT * FROM TAG:'bar';

▼ SELECT

マッチしたログから、指定したキーを抽出する。

*実装例*

タグが*-bar-* (ワイルドカード指定) であるログのうち、container_nameキーの値がquxであるもののみをフィルタリングし、これのlogキーを抽出する。

SELECT log FROM TAG:'*-foo-*' WHERE container_name = 'qux';
# 本来、改行はないが、わかりやすいように改行している。
# <コンテナ名>-foo-<AWS ECSタスクID>
[0] foo-bar-baz: [
    {
        "log"=>"127.0.0.1 -  01/01/2022:0:00:00 +0000 "GET /index.php" 200",
        "container_name"=>"qux",
    }
]


06. BUFFER

BUFFERとは

ログを蓄え、またこれを順番にROUTINGに渡す。

fluent-bit_buffer


SERVICEから


INPUTから

▼ storage.type

バッファーとして使用する媒体を設定する。

*実装例*

メモリ上でバッファリングを実行する。

デフォルト値である。

[SERVICE]
    flush         1
    log_Level     info

[INPUT]
    name          cpu
    # メモリ上でバッファリングが実行される (デフォルト値) 。
    storage.type  memory

*実装例*

ファイル上でバッファリングを実行する。

[SERVICE]
    flush         1
    log_Level     info
    # ファイルの場所
    storage.path  /var/log/fluent-bit/

[INPUT]
    name          cpu
    # ファイル上でバッファリングが実行される。
    storage.type  filesystem

指定した場所にcpu.0ディレクトリやtail.0ディレクトリが作成され、.flbファイルとしてバッファリングが実行される。

$ ls -ls /var/log/fluent-bit/cpu.0

drwxr-xr-x.  2 root root     107  9月 13 20:45 .
drwxr-xr-x. 11 root root     150  9月 13 20:42 ..
-rw-------.  1 root root 1492587  9月 13 20:44 *-*.*.flb
-rw-------.  1 root root  819079  9月 13 20:44 *-*.*.flb
-rw-------.  1 root root    4096  9月 13 20:45 *-*.*.flb
...


OUTPUTから

記入中...


07. ROUTING、OUTPUT

ROUTING、OUTPUTとは

ログのアウトプット先を設定する。

設定できるアウトプット先の種類については、以下のリンクを参考にせよ。

コマンドの-oオプションでOUTPUT名を指定し、実行もできる。

fluent-bit_output

Outputs
  azure                   Send events to Azure HTTP Event Collector
  azure_blob              Azure Blob Storage
  bigquery                Send events to BigQuery via streaming insert
  counter                 Records counter
  datadog                 Send events to DataDog HTTP Event Collector
  es                      Elasticsearch
  exit                    Exit after a number of flushes (test purposes)
  file                    Generate log file
  forward                 Forward (Fluentd protocol)
  http                    HTTP Output
  influxdb                InfluxDB Time Series
  logdna                  LogDNA
  loki                    Loki
  kafka                   Kafka
  kafka-rest              Kafka REST Proxy
  nats                    NATS Server
  nrlogs                  New Relic
  null                    Throws away events
  plot                    Generate data file for GNU Plot
  slack                   Send events to a Slack channel
  splunk                  Send events to Splunk HTTP Event Collector
  stackdriver             Send events to Google Stackdriver Logging # 現在は、Google CloudLoggingに改名
  stdout                  Prints events to STDOUT
  syslog                  Syslog
  tcp                     TCP Output
  td                      Treasure Data
  flowcounter             FlowCounter
  gelf                    GELF Output
  websocket               Websocket
  cloudwatch_logs         Send logs to Amazon CloudWatch
  kinesis_firehose        Send logs to Amazon Kinesis Firehose
  kinesis_streams         Send logs to Amazon Kinesis Streams
  prometheus_exporter     Prometheus Exporter
  prometheus_remote_write Prometheus remote write
  s3                      Send to S3


ビルトインのプラグイン

デフォルトで組み込まれているビルトンのプラグインは、ソースコードから確認できる。


AWS全部入り

▼ AWS全部入り

全てのAWS系プラグインを含んでいる

▼ セットアップ

AWSから提供される他の全てのFluentBitイメージを束ねたベースイメージを使用する。


cloudwatch_logプラグイン (新cloudwatchプラグイン)

▼ cloudwatch_logプラグインとは

ログをCloudWatchログにルーティングする。

元々、『cloudwatchプラグイン』という名前だった。

▼ セットアップ

cloudwatch_logsプラグインがプリインストールされているベースイメージを使用する。

設定ファイルに予約されたAWS変数については、以下のリンクを参考にせよ。

# ---------------------------------------------
# CloudWatchログへのルーティング
# ---------------------------------------------
[OUTPUT]
    # プラグイン名
    Name              cloudwatch_logs
    # ルーティング先のログのタグ
    Match             laravel
    # アウトプットJSONのうち、宛先にルーティングするキー名
    log_key           log
    region            ap-northeast-1
    # 予約変数あり。
    log_group_name    /prd-foo-ecs-container/laravel/log
    # ログストリーム名。予約変数あり。AWS ECSタスクIDなどアウトプットできる。
    log_stream_name   container/laravel/$(ecs_task_id)
    # ログを特定のAWSアカウントで中央集権的に管理する場合に、IAMロールを設定する。
    role_arn          arn:aws:iam::<AWSアカウントID>:role/prd-foo-flunetbit-role

[OUTPUT]
    Name              cloudwatch_logs
    Match             nginx
    log_key           log
    region            ap-northeast-1
    log_group_name    /prd-foo-ecs-container/nginx/log
    log_stream_name   container/nginx/$(ecs_task_id)
    # ログを特定のAWSアカウントで中央集権的に管理する場合に、IAMロールを設定する。
    role_arn          arn:aws:iam::<AWSアカウントID>:role/prd-foo-flunetbit-role

CloudWatchログに送信されるデータはJSON型である。

logキーにログが割り当てられている。

特定のキーの値のみをCloudWatchログに送信する場合、log_keyオプションでキー名を設定する。

例えば、logキーのみを送信する場合、『log』と設定する。

{
  "container_id": "*****",
  "container_name": "foo",
  "ecs_cluster": "prd-foo-ecs-cluster",
  "ecs_task_arn": "arn:aws:ecs:ap-northeast-1:<AWSアカウントID>:task/cluster-name/*****",
  "ecs_task_definition": "prd-foo-ecs-task-definition:1",
  "log": "<ログ>",
  "source": "stdout",
  "ver": "1.5",
}


datadogプラグイン

▼ datadogプラグインとは

ログをdatadogプラグインにルーティングする。

▼ セットアップ

全てのベースイメージにdatadogプラグインがプリインストールされているため、datadogプラグインのインストールは不要である。

# ---------------------------------------------
# Datadogへのルーティング
# ---------------------------------------------
[OUTPUT]
    # プラグイン名
    Name              datadog
    # ルーティング先のログのタグ
    Match             laravel
    # ルーティング先ホスト
    Host              http-intake.logs.datadoghq.com
    TLS               on
    compress          gzip
    # DatadogのAPIキー。
    apikey            *****
    # DatadogログエクスプローラーにおけるService名
    dd_service        prd-foo
    # DatadogログエクスプローラーにおけるSource名
    dd_source         prd-foo
    dd_message_key    log
    # 追加タグ
    dd_tags           env:prd-foo

[OUTPUT]
    Name              datadog
    Match             nginx
    Host              http-intake.logs.datadoghq.com
    TLS               on
    compress          gzip
    apikey            *****
    dd_service        prd-foo
    dd_source         prd-foo
    dd_message_key    log
    dd_tags           env:prd-foo


kinesis_firehoseプラグイン

▼ kinesis_firehoseプラグインとは

ログをKinesisFirehoseにルーティングする。

kinesis_firehoseプラグインがプリインストールされているベースイメージを使用する。


kinesis_streamsプラグイン

▼ kinesis_streamsプラグインとは

ログをKinesisStreamsにルーティングする。

kinesis_streamsプラグインがプリインストールされているベースイメージを使用する。


newRelicプラグイン

▼ newRelicプラグインとは

ログをNewRelicにルーティングする。

▼ セットアップ

newRelicプラグインがプリインストールされているベースイメージを使用する。


stackdriverプラグイン

▼ stackdriverプラグインとは

ログをCloudLoggingにルーティングする。

▼ セットアップ

FluentBitはデフォルトでstackdriverプラグインを持つ。

つまり、特に追加のセットアップなくCloudLoggingにログをルーティングできる。

[OUTPUT]
    Name   stackdriver
    match  *


stdoutプラグイン

▼ stdoutプラグインとは

標準出力にアウトプットする、FluentBitの実行ログに混じって、対象のログがアウトプットされることになる。

[OUTPUT]
    Name   stdout
    match  *


nullプラグイン

▼ nullプラグインとは

アウトプットを破棄する。

*実装例*

[OUTPUT]
    Name   null
    match  *

▼ コマンド

*例*

$ /fluent-bit/bin/fluent-bit \
    -i <インプット名> \
    -F stdout \
    -m "*" \
    -o null