※2016年10月1日より、サービス名称が「Yahoo!ビッグデータインサイト」から「トレジャーデータサービス by IDCF」に変更となっております。
さて、前回の記事に続いて、WindowsのイベントログをfluentdでYahoo!ビッグデータインサイト(以下「YBI」)へインポートする手順のご紹介 後編です。
前回の記事で、fluentdがWindowsサービスとして起動できるところまでを確認しました。 後編では下の図のように、集めたWindowsイベントログをYBIへインポートする手順を紹介します。
前回のおさらい
- Rubyのインストール
- Gitのインストール
- fluentdのインストール
- fluentdの起動テスト
- fluentdのサービス登録
- サービスとして起動テスト
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ファイルに下記のようなログが書き込まれます。
確認できたら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でも確認してみましょう。
出力できましたね!
動作確認した環境まとめ
今回、動作確認した環境をまとめて記載しておきます。
- 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!ビッグデータインサイトが気になる方はこちらから!
執筆者
大寒波、やっと北の方へ帰ってくれましたね。冬の初めに暖冬予想が出ていたのは何だったんだ..と思ってしまいます。都内の陽当たりの悪い路地では雪が凍ったまま残っています。なんでも沖縄や奄美でも雪が降ったとか、びっくりです。(◎_◎;) 最近の寒暖差で体調を崩してしまった方、ご自愛ください。
ビッグデータ・ソリューションアーキテクトの高階(takashina)でした。 それでは、ごきげんよう!
参考記事
今回の投稿作成にあたり、次の記事を参考にさせていただきました。感謝申し上げます。m( )m
- fluentd for WindowsをRuby 2.2で動かす
- Fluentd が Windows を正式サポートしたので動かした
- fluentd Windows版をWindowsサービスとして動かす
- Fluentd v0.14.0.pre.1のリリース
- Windowsイベントログをfluentdプラグインで集めてmongoDBに突っ込む
<関連記事>