IDCF テックブログ

IDCF テックブログ

クラウド・データセンターを提供するIDCフロンティアの公式テックブログ

WindowsのイベントログをfluentdでYBIへインポートする (後編)

※2016年10月1日より、サービス名称が「Yahoo!ビッグデータインサイト」から「トレジャーデータサービス by IDCF」に変更となっております。

さて、前回の記事に続いて、WindowsのイベントログをfluentdでYahoo!ビッグデータインサイト(以下「YBI」)へインポートする手順のご紹介 後編です。
winevt_to_YBI

前回の記事で、fluentdがWindowsサービスとして起動できるところまでを確認しました。 後編では下の図のように、集めたWindowsイベントログをYBIへインポートする手順を紹介します。
winevttoYBI2

前回のおさらい

  1. Rubyのインストール
  2. Gitのインストール
  3. fluentdのインストール
  4. fluentdの起動テスト
  5. fluentdのサービス登録
  6. サービスとして起動テスト

fluentdで使うコンフィグファイルとログファイルは次のものを使っています。

  • コンフィグファイル: C:/fluent/conf/fluent.conf
  • ログファイル: C:/fluent/log/fluent.log

7. Windowsイベントログを集める

Windowsイベントログをfluentdで収集するための設定と試験を行います。 まずは必要になるfluentdのプラグインを2つインストールします。

7-1. fluent-plugin-winevtlogのインストール

fluentdは、様々なデータソースからプラグイン経由でデータをinputして、様々な宛先にプラグイン経由でデータをoutputするツールです。 今回は、Windowsイベントログをinputするのに使うfluentdのプラグインをインストールします。

C:\>gem install fluent-plugin-winevtlog
Fetching: win32-eventlog-0.6.5.gem (100%)
Successfully installed win32-eventlog-0.6.5
Fetching: fluent-plugin-winevtlog-0.0.3.gem (100%)
Successfully installed fluent-plugin-winevtlog-0.0.3
Parsing documentation for win32-eventlog-0.6.5
unable to convert "\xE3" from ASCII-8BIT to UTF-8 for CHANGES, skipping
Installing ri documentation for win32-eventlog-0.6.5
Parsing documentation for fluent-plugin-winevtlog-0.0.3
Installing ri documentation for fluent-plugin-winevtlog-0.0.3
Done installing documentation for win32-eventlog, fluent-plugin-winevtlog after 0 seconds
2 gems installed

7-2. fluent-plugin-record-modifierのインストール

これは、fluentdのフィルタプラグインの1つで、レコードの内容を修正することができるプラグインです。 日本語環境のWindowsであれば、イベントログはWindows-31Jの文字コードになりますが、YBIへインポートする際にUTF-8にしておくために、今回はこのプラグインを使用します。

C:>gem install fluent-plugin-record-modifier
Fetching: uuidtools-2.1.5.gem (100%)
Successfully installed uuidtools-2.1.5
Fetching: fluent-mixin-config-placeholders-0.3.1.gem (100%)
Successfully installed fluent-mixin-config-placeholders-0.3.1
Fetching: fluent-plugin-record-modifier-0.4.0.gem (100%)
Successfully installed fluent-plugin-record-modifier-0.4.0
Parsing documentation for uuidtools-2.1.5
Installing ri documentation for uuidtools-2.1.5
Parsing documentation for fluent-mixin-config-placeholders-0.3.1
Installing ri documentation for fluent-mixin-config-placeholders-0.3.1
Parsing documentation for fluent-plugin-record-modifier-0.4.0
Installing ri documentation for fluent-plugin-record-modifier-0.4.0
Done installing documentation for uuidtools, fluent-mixin-config-placeholders, fluent-plugin-record-modifier after 0 seconds
3 gems installed

なお今回は使いませんが、このプラグインでは、元々のレコードにはない項目をfluentdで追加したり、不要な項目を削除したりもできるようです。

7-3. fluent.confの設定

Windowsイベントログをfluentdで捕捉してoutputファイルに書き出せるかどうか、確認してみましょう。 fluent.confを下記のように設定します。

<source>
  type winevtlog
  channel application,security
  pos_file C:/fluent/log/eventlog.pos
  read_interval 5
  tag winevt.raw
</source>

<match winevt.raw>
  type record_modifier
  char_encoding Windows-31J:utf-8
  tag winevt.filtered
</match>

<match winevt.filtered>
  type file
  path C:/fluent/test/output
  time_slice_format %Y%m%d_%H%M%S
  time_slice_wait 5s
</match>

上記設定内容を説明すると、sourceでinputをWindowsイベントログに指定し、ApplicationログとSecurityログを取得するようにしています。 次にmatch winevt.rawで、文字コードをWindows-31JからUTF-8へ変換しています。 最後にmatch winevt.filteredで、outputファイルへ書き出す指定をしています。

設定が終わったら、管理ツールのサービスから「Fluentd Windows Service」を開始し、fluent.logのログファイルを確認しておきましょう。設定に問題がなければ以下のように表示されるはずです。

2016-01-21 10:42:31 +0900 [info]: reading config file path="C:/fluent/conf/fluent.conf"
2016-01-21 10:42:31 +0900 [info]: starting fluentd-0.12.15
2016-01-21 10:42:31 +0900 [info]: spawn command to main (windows) : C:/Ruby22-x64/bin/ruby.exe 'C:/Ruby22-x64/bin/fluentd' -c C:/fluent/conf/fluent.conf -o C:/fluent/log/fluent.log -x fluentdwinsvc --no-supervisor
2016-01-21 10:42:31 +0900 [info]: reading config file path="C:/fluent/conf/fluent.conf"
2016-01-21 10:42:31 +0900 [info]: starting fluentd-0.12.15 without supervision
2016-01-21 10:42:31 +0900 [info]: gem 'fluent-mixin-config-placeholders' version '0.3.1'
2016-01-21 10:42:31 +0900 [info]: gem 'fluent-plugin-record-modifier' version '0.4.0'
2016-01-21 10:42:31 +0900 [info]: gem 'fluent-plugin-winevtlog' version '0.0.3'
2016-01-21 10:42:31 +0900 [info]: gem 'fluentd' version '0.12.15'
2016-01-21 10:42:31 +0900 [info]: adding match pattern="winevt.raw" type="record_modifier"
2016-01-21 10:42:35 +0900 [info]: adding match pattern="winevt.filtered" type="file"
2016-01-21 10:42:35 +0900 [info]: adding source type="winevtlog"
2016-01-21 10:42:35 +0900 [info]: using configuration file: 
<ROOT> <source> type winevtlog channel application,security pos_file C:/fluent/log/eventlog.pos read_interval 5 tag winevt.raw </source> <match winevt.raw> type record_modifier char_encoding Windows-31J:utf-8 tag winevt.filtered </match> <match winevt.filtered> type file path C:/fluent/test/output time_slice_format %Y%m%d_%H%M%S time_slice_wait 5s buffer_path C:/fluent/test/output.* </match> </ROOT>

7-4. イベントログテスト

管理者権限でコマンドプロンプトを立ち上げて、Windowsのeventcreateコマンドでログを書き込んでみます。

C:\>eventcreate /ID 999 /L Application /SO EvtTest /T Information /D "テストメッセージ"

成功: 種類が 'Information' のイベントが、'Application' ログ内に、'EvtTest' をソースとして作成されました。

C:\>

上手く行くと、C:/fluent/test/配下のoutputファイルに下記のようなログが書き込まれます。
09_eventlog_test
確認できたらFluentd Windows Serviceを一旦停止しておきましょう。

8. YBIへログ転送

前後編に分かれた手順もあともう少し。YBIへWindowsイベントログを転送します。

8-1. fluent-plugin-tdのインストール

まずは、YBIへログ転送できるようにするために、Treasure Dataアウトプットプラグイン(fluent-plugin-td)をインストールします。

C:>gem install fluent-plugin-td
Fetching: httpclient-2.5.3.3.gem (100%)
Successfully installed httpclient-2.5.3.3
Fetching: td-client-0.8.77.gem (100%)
Successfully installed td-client-0.8.77
Fetching: fluent-plugin-td-0.10.28.gem (100%)
Successfully installed fluent-plugin-td-0.10.28
Parsing documentation for httpclient-2.5.3.3
Installing ri documentation for httpclient-2.5.3.3
Parsing documentation for td-client-0.8.77
Installing ri documentation for td-client-0.8.77
Parsing documentation for fluent-plugin-td-0.10.28
Installing ri documentation for fluent-plugin-td-0.10.28
Done installing documentation for httpclient, td-client, fluent-plugin-td after 6 seconds
3 gems installed

8-2. fluent.confの設定

YBIへログ転送できるよう7-3で変更した設定をさらに変更します。 fluent.confを下記のように設定します。

<source>
  type winevtlog
  channel application,security
  pos_file C:/fluent/log/eventlog.pos
  read_interval 5
  tag winevt.raw
</source>

<match winevt.raw>
  type record_modifier
  char_encoding Windows-31J:utf-8
  tag td.testdb.windows_eventlog
</match>

<match td.*.*>
  type copy
  <store>
    type file
    path C:/fluent/test/output
    time_slice_format %Y%m%d_%H%M
    time_slice_wait 5s
  </store>
  <store>
    type tdlog
    apikey xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    endpoint ybi.jp-east.idcfcloud.com
    auto_create_table
    buffer_type file
    buffer_path C:/fluent/buffer/ybi
    flush_interval 60s
    use_ssl true
  </store>
</match>

match td..が、YBIへログを転送する設定です。 今回は、YBIへログを送りつつ、ローカルのoutputファイルでもログ出力が確認できるように、type copyを使ってログを2箇所にstoreする設定をしています。 apikeyはYBIのWrite-Only API keyを使いましょう。 endpointを明記するのを忘れずに! インポート先となるYBI上のDBとテーブルは、td..で指定します。 上記例ではmatch winevt.rawの中でtag td.testdb.windows_eventlogと指定しているので、DB:testdb、テーブル:windows_eventlogがインポート先となります。

設定が終わったら、管理ツールのサービスから「Fluentd Windows Service」を開始し、fluent.logのログファイルを確認しておきましょう。

2016-01-21 12:21:50 +0900 [info]: reading config file path="C:/fluent/conf/fluent.conf"
2016-01-21 12:21:50 +0900 [info]: starting fluentd-0.12.15
2016-01-21 12:21:50 +0900 [info]: spawn command to main (windows) : C:/Ruby22-x64/bin/ruby.exe 'C:/Ruby22-x64/bin/fluentd' -c C:/fluent/conf/fluent.conf -o C:/fluent/log/fluent.log -x fluentdwinsvc --no-supervisor
2016-01-21 12:21:51 +0900 [info]: reading config file path="C:/fluent/conf/fluent.conf"
2016-01-21 12:21:51 +0900 [info]: starting fluentd-0.12.15 without supervision
2016-01-21 12:21:51 +0900 [info]: gem 'fluent-mixin-config-placeholders' version '0.3.1'
2016-01-21 12:21:51 +0900 [info]: gem 'fluent-plugin-record-modifier' version '0.4.0'
2016-01-21 12:21:51 +0900 [info]: gem 'fluent-plugin-td' version '0.10.28'
2016-01-21 12:21:51 +0900 [info]: gem 'fluent-plugin-winevtlog' version '0.0.3'
2016-01-21 12:21:51 +0900 [info]: gem 'fluentd' version '0.12.15'
2016-01-21 12:21:51 +0900 [info]: adding match pattern="winevt.raw" type="record_modifier"
2016-01-21 12:21:54 +0900 [info]: adding match pattern="td.*.*" type="copy"
2016-01-21 12:21:54 +0900 [info]: adding source type="winevtlog"
2016-01-21 12:21:54 +0900 [info]: using configuration file: 
<ROOT> <source> type winevtlog channel application,security pos_file C:/fluent/log/eventlog.pos read_interval 5 tag winevt.raw </source> <match winevt.raw> type record_modifier char_encoding Windows-31J:utf-8 tag td.testdb.windows_eventlog </match> <match td.*.*> type copy <store> type file path C:/fluent/test/output time_slice_format %Y%m%d_%H%M time_slice_wait 5s buffer_path C:/fluent/test/output.* </store> <store> type tdlog apikey xxxxxx endpoint ybi.jp-east.idcfcloud.com auto_create_table buffer_type file buffer_path C:/fluent/buffer/ybi flush_interval 60s use_ssl true </store> </match> </ROOT>

8-3. YBIへイベントログ転送テスト

さあ、いよいよ、YBIへログが転送できるかどうか、最後のテストをやっていきます。

7-4と同様、Windowsのeventcreateコマンドでログを書き込んでみます。

c:\>eventcreate /ID 999 /L Application /SO EvtTest /T Information /D "テストメッセージ"

成功: 種類が 'Information' のイベントが、'Application' ログ内に、'EvtTest' をソースとして作成されました。

c:\>

outputファイルにログ出力を確認できたら、YBIでも確認してみましょう。
10_ybiwebui
出力できましたね!

動作確認した環境まとめ

今回、動作確認した環境をまとめて記載しておきます。

  • Windows Server 2012 R2 Std (64-bit)
  • Ruby 2.2.3 (x64)
  • Git 2.6.3 (64-bit)
  • Ruby gem
    • fluent-plugin-record-modifier (0.4.0)
    • fluent-plugin-td (0.10.28)
    • fluent-plugin-winevtlog (0.0.3)
    • fluentd (0.12.15)
    • msgpack (0.5.12)
    • td-client (0.8.77)

終わりに

2回に渡って、WindowsイベントログをYBIへインポートする手順を紹介しました。いかがでしたか?

Windowsのイベントログをインポートできるようになると、例えばWindowsサーバのセキュリティログやアプリケーションログをYBIにためて分析に使ったり、warningのログを拾って対処をすぐにできるようにしたり、いろいろなログの活用方法が考えられそうです。 みなさんも、YBIによるログの収集と分析を試してみてください。

Yahoo!ビッグデータインサイトが気になる方はこちらから!
YBI

執筆者

大寒波、やっと北の方へ帰ってくれましたね。冬の初めに暖冬予想が出ていたのは何だったんだ..と思ってしまいます。都内の陽当たりの悪い路地では雪が凍ったまま残っています。なんでも沖縄や奄美でも雪が降ったとか、びっくりです。(◎_◎;) 最近の寒暖差で体調を崩してしまった方、ご自愛ください。

ビッグデータ・ソリューションアーキテクトの高階(takashina)でした。 それでは、ごきげんよう!

参考記事

今回の投稿作成にあたり、次の記事を参考にさせていただきました。感謝申し上げます。m( )m

<関連記事>

Copyright © IDC Frontier Inc.