はじめに
引き続き nxlog と fluentd の組み合わせで Windows のイベントログ収集を試みてます。
とりあえず、現時点で確認出来ていること
tcpdump したりググっていたりしてたらこちらに辿りつきました。
- fluentd 側は in_http で待ち受けましょう
- リクエストヘッダの Content-Type はデフォルトは text/plain なので application/x-www-form-urlencoded に指定しましょう
- リクエストのフォーマットは
json={"host":"xxxxx"....}
という感じに整形する必要があります
fluentd 側は in_http で待ち受けましょう
以下のようにしておきます。
fluentd.conf
<source> type http port 8888 bind 0.0.0.0 body_size_limit 32m keepalive_timeout 10s </source> <match **> type stdout </match>
リクエストヘッダとリクエストのフォーマット
nxlog.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
Exec $raw_event = "json=" + to_json(); # ここ
</Input>
<Output out>
Module om_http
ContentType application/x-www-form-urlencoded # ここ
URL http://xxx.xxx.xxx.xxx:8888/win.event
</Output>
<Route r>
Path in => out
</Route>
Input の $raw_event に "json=" + to_json()
を突っ込んでいるのと、Output に ContentType application/x-www-form-urlencoded
を追加してます。
とりあえずは
ログは fluentd 側で取得出来ることは確認していますが、nxlog 側で Bad Request になってしまうことがありますので引き続き調査が必要です。
元記事は、こちらです。
「Windows のイベントログを nxlog + om_http で fluentd に送る際に気をつけること」