BigQuery、楽しげですね!
けど、なんていうか、特にインプットのフェーズにおいて活用するとなるとWindowsワールドの住人、またはそこで暮らさざるを得ない人からはちょっと遠いところ感があって、利用しようと思った刹那、途端にナニソレオイシイノ?みたいな状況になっている人も少なからずいると思います。
そんな人達のために!
fluentd Windowsブランチを使ってお手軽BigQueryと行きましょう!
WindowsのイベントログをBigQueryにためこんでみます。
ということで目指す構成はこんな感じ。
- Windows Server 2012 日本語版
- Ruby 2.1
- fluentd Windows版
- fluent-plugin-winevtlog
- fluent-plugin-bigquery
ポイントは
- fluent-plugin-bigqueryがWindowsでも動くっぽい!
ところでしょう!素晴らしい。
なお、本記事の作成にあたっては以下の投稿を多いに参考にさせて頂きました。
[FluentdでGoogle BigQueryにログを挿入してクエリを実行する](FluentdでGoogle BigQueryにログを挿入してクエリを実行する)
##1. Google BigQueryの基本準備
BigQueryに送るのですから、何はともあれBibQueryは利用できるよにしておく必要があります。
BigQueryそのものの利用開始はこちらから。
[Google Cloud Platform BigQuery]
(https://cloud.google.com/bigquery/?hl=ja)
無料体験的なボタンから入っていて指示に従えばよいでしょう。
fluentdからの利用には、fluentdの導入先となるマシンに bq command line toolsとよばれるBigQueryのクライアントの導入が必要です。Windowsベースの記事は少ないのですが、以下のSIOS社のエントリがよくまとまっていると思います。一部誤字脱字がありますが、まぁこの通り問題無く作業できるでしょう。
[Google BigQuery - bq command編]
(http://sstd-bigdata.blogspot.jp/2013/07/google-bigquery-bq-command.html)
Windowsイベントログの回収元とする(fluentd Windows版を導入する)サーバーで作業してください。ここまでの作業により、以下の状況が達成できているはずです。
- Google BigQueryがAPIベースで利用可能
- Windowsイベントログを回収元とするサーバー内にbq command line toolsが導入済み
- 上記環境のbq command line toolsからBigQueryにアクセス可能
##2. BigQuery側にWindowsイベントログの受領先となるプロジェクトを作る
プロジェクトの作成はブラウザベースでちゃちゃっといきましょう。
Google Developer Consoleを開き、プロジェクト一覧画面から「プロジェクトを作成」をクリックします。
プロジェクト名はなんでもいいんですが、ここでは
win-fluentd-bq
とします。ここではプロジェクトIDも同じものとしwin-fluentd-bqとしておきます。
プロジェクトが作成できたらプロジェクト内でBigQuery APIの使用を許可します。画面左側のAPI欄を選択して表示される画面で有効化してください。画面はしょりますが特段問題ないでしょう。
次にデータセットを作ります。bq command line clinetからいきます。コマンドプロンプトを起動して、以下のようにタイプします。データセット名はserverlogとしておきましょう。
>bq mk win-fluentd-bq:serverlog
Dataset 'win-fluentd-bq:serverlog' successfully created.
次はテーブルを作ります。BigQueryのテーブルはスキーマが必要ですので、事前にjson形式で作成しておいて、bqコマンドでテーブル作成時にそのファイルを指定する形を取ります。
以下のようなファイルを作り、c:\fluentd\schema\winevtlog.jsonとして保存ておきましょう。
[
{
"name":"channel",
"type":"STRING"
},
{
"name":"record_number",
"type":"INTEGER"
},
{
"name":"time_generated",
"type":"STRING"
},
{
"name":"time_written",
"type":"STRING"
},
{
"name":"event_id",
"type":"INTEGER"
},
{
"name":"event_type",
"type":"STRING"
},
{
"name":"event_category",
"type":"STRING"
},
{
"name":"source_name",
"type":"STRING"
},
{
"name":"computer_name",
"type":"STRING"
},
{
"name":"user",
"type":"STRING"
},
{
"name":"description",
"type":"STRING"
}
]
このスキーマはこの後インストールするfluent-plugin-winevtlogにあわせてありますので、いじらずにこのままで。
で、テーブル作成のコマンドを叩きます。テーブル名はwinevtlogとしておきましょう。
bq mk の最後の部分は上記で作成したスキーマ定義のjsonファイルを指定しています。
> c:
> cd \fluent
> bq mk win-fluentd-bq:serverlog.winevtlog ./schema/winevtlog.json
Table 'win-fluentd-bq:serverlog.winevtlog' successfully created.
ちゃんと作成されたか、ブラウザから確認してみましょう。
Google Devloper Consoleのwin-fluentd-bqプロジェクトビューからビッグデータ-BigQueryといってテーブルを確認します。
いいですね!
##3. 作成したGooble Cloud Plotformプロジェクトのサービスアカウントを取得する
上記で作成したwin-fluentd-bqプロジェクトを外部プログラムから利用する場合、そのためのサービスアカウントを作成し、そのサービスアカウントに紐づけられたメールアドレスとp12ファイルが必要となります。
記事 [FluentdでGoogle BigQueryにログを挿入してクエリを実行する](FluentdでGoogle BigQueryにログを挿入してクエリを実行する) の中程「FluentdからBigQueryにログを挿入する」-「認証キーを取得する」を参照し、メールアドレスを鍵ファイル(p12ファイル)を取得してください。
取得したp12ファイルはC:\fluentフォルダに配置してください
ここまでくれば、あとは普通にfluentdを導入するだけです。
今回はWindows Server 2012 + Ruby 2.1の環境に導入します。
次の記事を参考にしてRuby 2.1およびfluentdを導入します。
fluentd WindowsブランチをRuby 2.1上で動かす
##4. fluentdプラグインを入れる
今回(意図的に)いれるプラグインは3つです。
- fluent-plugin-winevtlog ... Windowsイベントログを回収するインプットプラグインです
- fluent-plugin-record-modifier ... コード変換に利用するフィルタプラグインです
- fluent-plugin-bigquery ... BigQueryへのアウトプットプラグインです
プラグイン開発者のrepeatedlyさん、tagomorisさんに感謝。
すべてgem installで行けます。コマンドプロンプトを叩いてください。
gem install fluent-plugin-winevtlog
gem install fluent-plugin-record-modifier
gem install fluent-plugin-bigquery
特に問題ないと思います。
と、いいたいところですが。
依存関係で導入するretriableというgemパッケージですが、バージョンが上がった際に下位互換性が失われておりretrialbe1の2.xのバージョンではうまく動かない場合があります。もし「6. いざ!」で実行時エラーが出た場合は、retriableをアンインストールし、バージョン指定で1.4.1系(1.4.1など)をインストールしてください。(この記事執筆時点でPRがでていてるのでおそらく皆様が試すときには解決されていると思います。もしエラーがでたら、で。)
fluent-plugin-winevtlogとfluent-plugin-record-modifierの関係についてはこちら([Windowsイベントログをfluentdプラグインで集めてmongoDBに突っ込む]
(http://qiita.com/okahashi117/items/245d6cb68e6aa42c004a))に記事あります。参考にしてください。
##5. fluentdの設定ファイルを書く
Windowsイベントログからは、Application, System, Security, Setupのログを回収するものとします。また、念のため、標準出力にも表示をおこなうようにしておきましょう。
以下のような設定ファイルを記述し、c:\fluent\fluent.confとして保管してください。
<source>
type winevtlog
channel application,system,security,setup
pos_file C:/fluent/winevtlog.pos
tag winevt.raw
</source>
<match winevt.raw>
type record_modifier
tag winevt.filtered
char_encoding Windows-31J:utf-8
</match>
<match winevt.filtered>
type copy
<store>
type stdout
</store>
<store>
type bigquery
method insert
auth_method private_key
email <上記の「3. 作成した~」で取得したアドレスを入力>
private_key_path ./<上記の「3. 作成した~」で取得したp12ファイル名を入力(ファイル名だけですよ!)>
project win-fluentd-bq
dataset serverlog
table winevtlog
schema_path ./schema/winevtlog.json
</store>
</match>
必ず管理者権限を有するアカウントでコマンドプロンプトを立ち上げ、以下のようにタイプします。fluentd-plugin-winevtlogにおけるsecurityおよびsetupログの収集には管理者権限が必須です。
> C:
> cd \fluent
> fluentd -c ./fluent.conf
2014-12-12 02:22:23 +0900 [info]: starting fluentd-0.10.46.win141021001
2014-12-12 02:22:23 +0900 [info]: is windows platform : true
2014-12-12 02:22:23 +0900 [info]: spawn command to main (windows) : C:/Ruby21-x64/bin/ruby.exe 'C:/Ruby21-x64/bin/fluent
d' -c ./fluent.conf -U 3672
2014-12-12 02:22:24 +0900 [info]: starting fluentd-0.10.46.win141021001
2014-12-12 02:22:24 +0900 [info]: is windows platform : true
2014-12-12 02:22:24 +0900 [info]: reading config file path="./fluent.winevtlog.conf"
2014-12-12 02:22:25 +0900 [info]: gem 'fluent-mixin-config-placeholders' version '0.3.0'
2014-12-12 02:22:25 +0900 [info]: gem 'fluent-mixin-plaintextformatter' version '0.2.6'
2014-12-12 02:22:25 +0900 [info]: gem 'fluent-plugin-bigquery' version '0.2.5'
2014-12-12 02:22:25 +0900 [info]: gem 'fluent-plugin-buffer-lightening' version '0.0.2'
2014-12-12 02:22:25 +0900 [info]: gem 'fluent-plugin-record-modifier' version '0.2.0'
2014-12-12 02:22:25 +0900 [info]: gem 'fluent-plugin-winevtlog' version '0.0.3'
2014-12-12 02:22:25 +0900 [info]: gem 'fluentd' version '0.10.46.win141021001'
2014-12-12 02:22:25 +0900 [info]: using configuration file: <ROOT>
<source>
type winevtlog
channel application,system,security,setup
pos_file C:/fluent/pos/winevtlog.ps
tag winevt.raw
</source>
<match winevt.raw>
type record_modifier
tag winevt.filtered
char_encoding Windows-31J:utf-8
</match>
<match winevt.filtered>
type copy
<store>
type stdout
</store>
<store>
type bigquery
method insert
auth_method private_key
email <上記の「3. 作成した~」で取得したアドレス>
private_key_path ./<上記の「3. 作成した~」で取得したp12ファイル名>
project win-fluentd-bq
dataset serverlog
table winevtlog
schema_path ./schema/winevtlog.json
</store>
</match>
</ROOT>
2014-12-12 02:22:25 +0900 [info]: adding source type="winevtlog"
2014-12-12 02:22:25 +0900 [info]: adding match pattern="winevt.raw" type="record_modifier"
2014-12-12 02:22:28 +0900 [info]: adding match pattern="winevt.filtered" type="copy"
はい、問題ないですね!
ではイベントがBigQueryに送られているか確認をしましょう。
とはいえ何がしかイベントの発生を待つ必要がありますので、1日くらいまっってみましょう。はい、待てないひとは
"Windowsイベントログをfluentdプラグインで集めてmongoDBに突っ込む"
の記事を参考に手打ちでイベント発生させます。
で、win-fluentd-bqプロジェクトのBigQueryのコンソールに移動してQueryを実行します。
queryはこんな感じになります。
SELECT * FROM [serverlog.winevtlog] ORDER BY time_generated DESC LIMIT 1000
次の画像は何日か動かしたQuery状態でのスクショ。
いいんじゃないでしょうかね!
##7. その他
今回はデータとしてWindowsイベントログを使っておりますが、データはなんであれWindowsであってもfluentdを使うことでそのままBigQueryに放り込めるところは大きなポイントかと思います。
ご参考になれば。
おわり。