お金をかけずにサーバーの勉強をしよう

Windowsサーバーのイベントログを Grafanaで一覧する 2

2023年7月23日

メニューへ戻る

fluentbitを Windowsサーバーにインストール・設定しますよ。

Windowsサーバーのイベントログを Grafanaで一覧する 1」ではタイトルの企画を実現するための設計について書きました。

こんな環境を作りたいなと。
構成

fluentbitが取得した Windowsイベントログのデータを送りつける先のデータベースである OpenSearchの準備ができている前提になりますので、以下で作った環境を使っています。

OpenSearchインストール
OpenSearch Dashboardsインストール
OpenSearchのユーザー追加
OpenSearchで日本語の検索をする

上の環境では、OpenSearchの一般ユーザーとして [subro]ユーザーを作っていますが、この環境用に [fluentbit]ユーザーを作っています。


1.fluentbitダウンロード

ここでは Windows Server 2022に fluentbitをインストールしますので、Windows版をダウンロードします。

ダウンロードサイトはこちら。
Getting Started with Fluent Bit


Windows Server用のインストールファイルをダウンロードします。
fluentbitダウンロード

2023年7月23日時点での最新バージョンは 2.1.7でした。


2.fluentbitインストール

ダウンロードしたのは GUIのインストーラーなので簡単です。

ダウンロードファイルはこれです。
ダブルクリックします。
fluentbitインストール 1

次へを押します。
fluentbitインストール 2

同意するを押します。
fluentbitインストール 3

[インストール先フォルダ]はこれで良いでしょう。
([Program Files]フォルダのような間にスペースを含むフォルダ名が含まれる場合は後で手順に注意点があります)
次へを押します。
fluentbitインストール 4

インストールを押します。
fluentbitインストール 5

完了を押します。
fluentbitインストール 6

できあがった [C:¥Program Files¥fluent-bit]フォルダの中はこんな風。
fluentbit設定 1

後で使いますので、[buffer]フォルダ・ [log]フォルダを手動で作りました。
fluentbit設定 2


3.fluentbit設定

fluentbitの設定ファイルは、[C:¥Program Files¥fluent-bit¥conf¥fluent-bit.conf]ファイルです。

私独自の設定ですが、これでどうにか動いたものになります。
デフォルトのファイルにあったコメント行は残していますのでちょっと長いですが、実際に生きている行はそんなにありません。

[C:¥Program Files¥fluent-bit¥conf¥fluent-bit.conf]

[SERVICE]
    # Flush
    # =====
    # set an interval of seconds before to flush records to a destination
    flush        1

    # Daemon
    # ======
    # instruct Fluent Bit to run in foreground or background mode.
    daemon       Off

    # Log_Level
    # =========
    # Set the verbosity level of the service, values can be:
    #
    # - error
    # - warning
    # - info
    # - debug
    # - trace
    #
    # by default 'info' is set, that means it includes 'error' and 'warning'.
    log_level    info
    log_file C:\Program Files\fluent-bit\log\fluentbit.log  ← fluentbitの動作ログをファイルに出力するようにしました

    # Parsers File
    # ============
    # specify an optional 'Parsers' configuration file
    parsers_file parsers.conf

    # Plugins File
    # ============
    # specify an optional 'Plugins' configuration file to load external plugins.
    plugins_file plugins.conf

    # HTTP Server
    # ===========
    # Enable/Disable the built-in HTTP Server for metrics
    http_server  On  ← fluentbitの動作データ(メトリクス)を取得できるよう一応Onに変えていますが無くても良かったです
    http_listen  0.0.0.0
    http_port    2020

    # Storage
    # =======
    # Fluent Bit can use memory and filesystem buffering based mechanisms
    #
    # - https://docs.fluentbit.io/manual/administration/buffering-and-storage
    #
    # storage metrics
    # ---------------
    # publish storage pipeline metrics in '/api/v1/storage'. The metrics are
    # exported only if the 'http_server' option is enabled.
    #
    storage.metrics on

    # storage.path
    # ------------
    # absolute file system path to store filesystem data buffers (chunks).
    #
    # storage.path /tmp/storage
    storage.path C:\Program Files\fluent-bit\buffer  ← このフォルダに送信し切れないデータをバッファリングするんだと思いますがファイルができた試しなし

    # storage.sync
    # ------------
    # configure the synchronization mode used to store the data into the
    # filesystem. It can take the values normal or full.
    #
    # storage.sync normal
    storage.sync normal  ← [normal]にしておけば上のフォルダにバッファリングするものと思います

    # storage.checksum
    # ----------------
    # enable the data integrity check when writing and reading data from the
    # filesystem. The storage layer uses the CRC32 algorithm.
    #
    # storage.checksum off

    # storage.backlog.mem_limit
    # -------------------------
    # if storage.path is set, Fluent Bit will look for data chunks that were
    # not delivered and are still in the storage layer, these are called
    # backlog data. This option configure a hint of maximum value of memory
    # to use when processing these records.
    #
    # storage.backlog.mem_limit 5M
    storage.backlog.mem_limit 100M  ← 送信データのメモリバッファを 100MBにしておきました

#[INPUT]
#    Name         winlog
#    Channels     Setup,Windows PowerShell
#    Interval_Sec 1

[INPUT]  ← Windowsイベントログを収集元(INPUT)にする設定
    Name         winlog  ← 任意の名前付けではなくプラグイン名のようです
    Channels     System,Application
    Interval_Sec 5
    Tag          winlog  ← 集めたWindowsイベントログのデータには[winlog]という名前(タグ)を付ける

#[OUTPUT]
#    name  stdout
#    match *

[OUTPUT]  ← OpenSearchを送信先(OUTPUT)にする設定
    Name  opensearch
    Match winlog  ← [INPUT]に指定されるデータのうち[winlog]というタグが付いているデータだけを対象にする
    Host  192.168.1.102
    Port  9200
    Index win_eventlog  ← OpenSearchのインデックス名でOpenSearchで自動作成されます
    #Type  my_type
    Suppress_Type_Name On  ← OpenSearchから返されるインデックスタイプのワーニングかだかを無視する
    HTTP_User fluentbit  ← AWSではなくオンプレのOpenSearchの場合はここでユーザーの指定をします
    HTTP_Passwd jA*034t7;8Sd  ← パスワードは私の環境のものなので自分の環境に合わせましょう
    tls On  ← AWSではなくオンプレのOpenSearchの場合はデフォルトではこれが必要と思います
    tls.verify Off  ← AWSではなくオンプレのOpenSearchの場合はオレオレ証明書の回避をします


fluentbitを Windowsサービスとして登録します。
上で書いた([Program Files]フォルダのような間にスペースを含むフォルダ名が含まれる場合は後で手順に注意点があります)に相当するパターンのコマンドで、実行パスにスペースが含まれる場合の対応がされています。

C:\Users\Administrator> sc.exe create fluent-bit binpath= "\"C:\Program Files\fluent-bit\bin\fluent-bit.exe\" -c \"C:\Program Files\fluent-bit\conf\fluent-bit.conf\""
[SC] CreateService SUCCESS

今作ったサービスの実行モードを[自動]に変更します。

C:\Users\Administrator> sc.exe config fluent-bit start= auto
[SC] ChangeServiceConfig SUCCESS

今作ったサービスを開始します。

C:\Users\Administrator> net start fluent-bit
fluent-bit サービスを開始します.
fluent-bit サービスは正常に開始されました。

これでネットワークや OpenSearchに問題なければ、OpenSearch内にインデックスが作られているはずです。


fluentbitのインストールはこれだけで完了です。


fluentbitが持つ、INPUT・OUTPUTのプラグインは多岐に渡っていて、これからも増えていくのだと思います。
どんどん増やして NXLogに迫って欲しいですが、どこまでタダで使わせてくれるかはまだ不明です。

面白い OUTPUTプラグインとして Prometheusへのプラグインがありました。
これは(Windowsであれば) Prometheusの Windowsエクスポーターを代替できる機能です。

他のデータ送信をしながら Prometheusのエクスポーター役もやってくれるので、実行プログラムを fluentbitに統一できるメリットを狙っているようです。

NXLogと fluentbit、どちらを使うかは個人の趣味に依るところが大きいですが、こういう高機能なツールはどんどん使い倒したいものです。


次回「Windowsサーバーのイベントログを Grafanaで一覧する 3」で、まずは OpenSearch Dashboardsで Windowsイベントログを見てみます。