何したか?
fluentd のドキュメントにちゃんと載っていました…。
- nxlog をインストールして設定
- とりあえずは fluentd 側は type syslog で待ち受ける
- fluentd まで届けばあとは良しなに…
nxlog というツールで Windows のイベントログを in_tail っぽいことをして type syslog
で待ち構えている fluentd にログを飛ばすという流れです。
nxlog とは
個人的に気になったは…
- こちらを御覧ください
- マルチプラっとフォーム
- モジュールアーキテクチャ
- クラサバモード
- Apache の設定ファイルと同様のシンタックス
などなど
nxlog のインストールと設定
インストール
Windows Server 2012 を利用します。
こちらから MSI ファイルをダウンロードしてダブルクリックすると以下のようにセットアップウィザードが起動します。
ウィザードに従ってインストールを完了します。
設定
nxlog が正常にインストールされると C:Program Files (x86)nxlog
以下にバイナリファイルや関連する設定ファイルが保存されます。
confnxlog.conf を以下のように設定します。
nxlog.conf
define ROOT C:Program Files (x86)nxlog
Moduledir %ROOT%modules
CacheDir %ROOT%data
Pidfile %ROOT%datanxlog.pid
SpoolDir %ROOT%data
LogFile %ROOT%datanxlog.log
<Extension syslog>
Module xm_syslog
</Extension>
<Extension json>
Module xm_json
</Extension>
<Input in>
Module im_mseventlog
</Input>
<Processor t>
Module pm_transformer
OutputFormat syslog_bsd
Exec $Message=(": "+$raw_event);
</Processor>
<Output out>
Module om_udp
Host ${fluentd_host}
Port 5140
</Output>
<Route r>
Path in => t => out
</Route>
先述のように nxlog も fluentd のようにプラグイン(モジュール)機構が採用されており、今回は im_mseventlog
を Input in
に設定します。また、Output out
には ${fluentd_host} とポート番号を指定します。
ちなみに
Route r
の定義あたりは面白いなあと思います。詳しくドキュメントを読み込めていませんが、ログのルーティングを矢印で表現してるようです。また、Processor t
あたりはログを任意の形式に書き換えるような設定のようです。
fluentd 側の設定(td-agent 側の設定)
fluentd(td-agent)を動かすホストは Windows Server とは別の Linux マシンにあらかじめ td-agent をインストールしておきます。
/etc/td-agent/conf.d/winlogconf
<source>
type syslog
port 5140
tag windowslog
</source>
<match windowslog.**>
type stdout
</match>
上記のように fluentd 側は type syslog
で待ち受けます。
nxlog を起動してログを見てみる
Windows Server にてコマンドプロンプト又は PowerShell を起動して nxlog がインストールパスまで移動して以下のように実行します。
.nxlog.exe -f -c '.confnxlog.conf'
実行すると以下のように表示されればとりあえず nxlog は起動しているはずです。
この状態で Windows で適当に操作していると td-agent の /var/log/td-agent/td-agent.log に以下のようにログが出力されます。
おお、イベントログが記録されています。しかも JSON 形式となっています。
設定例から nxlog をも少しみてみる
設定例から nxlog をも少しみてみます。
以下は output モジュールの HTTP(S) 用の設定例です。
path/to/nxlog.conf
<Input in>
Module im_file
File 'input.log'
ReadFromLast FALSE
</Input>
<Output out>
Module om_http
URL https://server:8080/
HTTPSCertFile %CERTDIR%/client-cert.pem
HTTPSCertKeyFile %CERTDIR%/client-key.pem
HTTPSCAFile %CERTDIR%/ca.pem
HTTPSAllowUntrusted FALSE
</Output>
<Route httpout>
Path in => out
</Route>
Input in
には im_file
を設定して対象となるファイルを File 'input.log'
で指定しています。次に Output out
に Output の om_http
を指定しています。そして、Output に対するルーティングを Route httpout
で定義しています。Path in => out
は Input をそのまま Output にルーティングする定義のようです。
とりあえず…
本来は全てを fluentd でまかなえると嬉しい(次回は fluentd Windows 版を試してみたいと思います)のですが fluentd まで持ってくることが出来れば、後は S3 に保存するなり、可視化するなりの道は開けてきそうです。
元記事は、こちらです。
「Windows のイベントログを fluentd で何とか出来ないか調べてみたら nxlog を組み合わせることで…」