5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FluentBitのfluent-bit.confについて

Posted at

業務でFluentBitを扱っているため、今回設定ファイル(fluent-bit.conf)に関して記事に纏めました。

FluentBitとは

FluentBitは、さまざまなデータソースからログを収集し、任意の出力先へ転送するためのオープンソースソフトウェアです。
Fluentdの軽量版として設計されており、リソースの少ない環境やエッジデバイスでも動作可能な点が特徴です。

FluentBitの主な構成要素

FluentBitは以下の3つの主要コンポーネントで構成されています。

Input(入力)
さまざまなデータソース(ファイル、システムログなど)からログを収集します。
Filter(フィルタ)
収集したログを加工・変換します。(例:タグ付け、データの変換、特定のログの除外など)
Output(出力)
収集したログを指定の出力先へ転送します。

FluentBitの基本設定

Fluent Bitは設定ファイル(fluent-bit.conf)を用いて動作を制御します。
例:Windowsログを収集する場合
【補足】
Windowsログは、イベントビューアーにて収集されています。
windowsログ.png

Windowsログの収集のプラグインは、winlogとwinevtlogの2種類あります。
※それぞれ出力されるデータは少し異なります。

【winlogの場合】

fluent-bit.conf
[INPUT]
    Name         winlog
    Channels     System,Application,Setup,Security,ForwardedEvents
    Interval_Sec 1
    DB           winevtlog.sqlite
    Tag          winlog

[OUTPUT]
    Name  stdout
    Match *

◆Input

キー 説明
Name プラグイン名
Channels 収集したいログチャンネル
Interval_Sec 各チャネル監視間隔
DB ログの格納場所
Tag タグ

DBは指定しない場合、毎回最初からログが収集され、指定した場合は、前回実施してからのログが収集されます。
Tagは、FilterやOutputで対象のデータを特定する際に使用されます。(詳細は後述)

◆Output

キー 説明
Name 出力方法(stdoutはコンソールに標準出力します)
Match 対象タグを選択

上記の設定だと全ての対象のデータをコンソールに標準出力しますが、MatchにInputで付与したTagを設定すると設定したTagのみに限定されます。

fluent-bit.conf
[OUTPUT]
    Name  stdout
    Match winlog

上記の設定で出力されるログは以下の通りです。

{"RecordNumber"=>1917, 
"TimeGenerated"=>"2025-02-04 18:21:57 +0900", 
"TimeWritten"=>"2025-02-04 18:21:57 +0900", 
"EventID"=>16384, 
"Qualifiers"=>16384, 
"EventType"=>"Information", 
"EventCategory"=>0, 
"Channel"=>"Application", 
"SourceName"=>"Software Protection Platform Service", 
"ComputerName"=>"(PC名)", 
"Data"=>"", 
"Sid"=>"", 
"Message"=>"ソフトウェア保護サービスの 2125-01-11T09:21:57Z の再起動をスケジュールしました。理由: RulesEngine。", 
"StringInserts"=>["2125-01-11T09:21:57Z", "RulesEngine"]}

windowsログ_winlog.png

【winevtlogの場合】

fluent-bit.conf
[INPUT]
    Name         winevtlog
    Channels     System,Application,Setup,Security,ForwardedEvents
    Interval_Sec 1
    DB           winevtlog.sqlite
    Tag          winevtlog

[OUTPUT]
    Name  stdout
    Match *

先程のNameをwinevtlogに変更すればwinevtlogによるイベントログを収集出来ます。

上記の設定で出力されるログは以下の通りです。

 {"ProviderName"=>"Microsoft-Windows-Security-SPP", 
 "ProviderGuid"=>"{E23B33B0-C8C9-472C-A5F9-F2BDFEA0F156}", 
 "Qualifiers"=>16384, 
 "EventID"=>16384, 
 "Version"=>0, 
 "Level"=>4, 
 "Task"=>0,
 "Opcode"=>0,
 "Keywords"=>"0x80000000000000",
 "TimeCreated"=>"2025-02-28 12:52:40 +0900",
 "EventRecordID"=>4223,
 "ActivityID"=>"",
 "RelatedActivityID"=>"",
 "ProcessID"=>24484,
 "ThreadID"=>0,
 "Channel"=>"Application",
 "Computer"=>"(PC名)",
 "UserID"=>"",
 "Message"=>"ソフトウェア保護サービスの 2125-02-04T03:52:39Z の再起動をスケジュールしました。理由: RulesEngine。",
 "StringInserts"=>["2125-02-04T03:52:39Z", "RulesEngine"]}

windowsログ_winevtlog.png

比較してみるとwinevtlogの方が多くの情報が収集出来るようです。

ここで特定の項目だけ抽出したい、特定の条件に合致したログだけ抽出したいなどの場合にFilterを使用します。

例1:特定の項目だけ抽出、項目名変更、項目追加したい場合

Filterのmodifyプラグインを使用するとログを追加、削除等が出来ます。
[具体例]
Inputのプラグイン:winevtlog
特定の項目だけ抽出:"TimeCreated","Message"
項目名変更:Message"⇒"message"に変更
項目追加:"category"(値は"eventlog")

[INPUT]と[OUTPUT]の間に[FILTER]を追加します。

fluent-bit.conf
[INPUT]
    Name         winevtlog
    Channels     System,Application,Setup,Security,ForwardedEvents
    Interval_Sec 1
    DB           winevtlog.sqlite
    Tag          winevtlog

[FILTER]
    Name         modify
    Match        winevtlog
    Remove       ProviderName
    Remove       ProviderGuid
    Remove       Qualifiers
    Remove       EventID
    Remove       Version
    Remove       Level
    Remove       Task
    Remove       Opcode
    Remove       Keywords
    Remove       EventRecordID
    Remove       ActivityID
    Remove       RelatedActivityID
    Remove       ProcessID
    Remove       ThreadID
    Remove       Channel
    Remove       Computer
    Remove       UserID
    Remove       StringInserts
    Rename       Message message
    Add category eventlog

[OUTPUT]
    Name  stdout
    Match *

上記の設定で出力されるログは以下の通りです。

{"TimeCreated"=>"2025-02-28 12:52:40 +0900", 
"message"=>"ソフトウェア保護サービスの 2125-02-04T03:52:39Z の再起動をスケジュールしました。理由: RulesEngine。", 
"category"=>"eventlog"}

◆Filter

キー 説明
Name プラグイン名(modify)
Match 対象タグを選択
Remove 項目の削除
Rename 項目名の変更
Add 項目を追加

Addは"Add 項目名 値"というように設定する必要があります。
その他にも色々設定出来るみたいなので、下記を参考してみて下さい。

例2:特定の条件に一致したログだけを抽出したい場合

複雑な条件を指定したい場合はluaプラグインを使って条件を指定することが出来ます。
[具体例]
Inputのプラグイン:winevtlog

fluent-bit.conf
[FILTER]
    Name lua
    Match winlog
    Script ./script/winevtlog_filter.lua
    Call filter_winevtlogs

※[INPUT]と[OUTPUT]は例1と同じ設定。

◆Filter

キー 説明
Name プラグイン名(lua)
Match 対象タグを選択
Script luaファイルパス
Call 実行する関数名
winevtlog_filter.lua
function filter_winevtlogs(tag, timestamp, record)
    local level = record["Level"]
    local providername = record["ProviderName"]
    local eventid = record["EventID"]

    if (level == 1)  
    or (providername == "Microsoft-Windows-IsolatedUserMode") 
    or (level == 3 and eventid == 700) then
        return 0, 0, record
    end

    return -1, 0, 0
end

◆引数

引数 キー 説明
1 tag 受信ログのタグ
2 timestamp 受信ログのタイムスタンプ
3 record 受信ログ

◆戻り値

引数 キー 説明
1 code -1:ログ削除、0:ログ変更しない、1:ログ更新
2 timestamp 0:タイムスタンプ変更しない、1:タイムスタンプ更新
3 record 受信ログ

record["項目名"]で項目名の値を取得することが出来ます。
今回の各変数は以下に対応しています。
level:レベル(1:重大、2:エラー、3:警告、4:情報)
eventid:イベントID
providername:イベントソースだがXMLのProvider Nameのことを指す。

例:この場合だとソースはIsolatedUserModeだが、赤枠のMicrosoft-Windows-IsolatedUserModeを指定。
windowsログ_providername.png

以上を踏まえてこの設定の場合、

  • レベルが重大
  • Provider NameがMicrosoft-Windows-IsolatedUserMode
  • レベルが警告でイベントIDが700

のログのみ抽出することが出来ます。

まとめ

今回はFluentBitの基本的な設定に関して纏めました。少しでも参考になれば幸いです。
他にも色々な設定が出来るようなので、自分も色々触ってみて知見を増やしていきたいと思います。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?