かっぱ@inokara)です。

はじめに

引き続き 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 に送る際に気をつけること