2013年4月30日火曜日

sumologicってなんじゃ?(sumologic fluent pluginをつくってみた)

ログ解析システムはいろいろあるみたいで、今回はsumologicを触ってみました。

sumologicはサービス型のログ解析システムです。
このサービスについて、また、ログ解析システムが何故必要とされているかは以下のAWS荒木さんのスライドがわかりやすいです。

ログブラウズ、解析サービスSumologicの紹介
http://www.slideshare.net/ar_maniacs/sumologicno

さっそく使ってみます。
いままでと同じようにfluentdでデータを入れ込みたいのですが、Sumologic用のPluginはないようです。
ログ収集基盤としてfluentdで統一させたい場合もあるので、今回はSumologic用のプラグインも作ってみます。



Sumologicへの登録と設定



まず、会員登録して、ログインします。


「Get Started Now」をクリックします。

次にCollectorを追加します。Collectorはログ収集コンポーネントです。
Collectorにはログがあるサーバー側にモジュールをインストールすることもできますし、ログサーバー側で待ち受けることもできます。今回は後者を選択します。


「Add Collector」の画面で「Hosted Collector」を選択します。




ここでは仮に「testhost」という名前で登録します。




次に作成されたtesthostの「Add Source」をクリックします。




すると、入力ソースの選択画面が表示されます。
S3のデータがある場合はS3の場所を設定します。
今回は、fluentでログを送るので、HTTPタイプを選択します。



詳細な設定画面が表示されますが、とりあえずNameだけ入力して「Save」します。



作成されたら一段落です。




あとでfluentdのエンドポイント設定に使用するため、ソースの「Show URL」で表示されるURLをコピーしておきます。





Fluentdの設定



次にfluentdの設定です。
sumologic用のプラグインが無かったので作ってみました。
テストコードはスタブのままですが、、

fluent-plugin-sumologic
https://github.com/memorycraft/fluent-plugin-sumologic
https://rubygems.org/gems/fluent-plugin-sumologic



作成手順は、tagomorisさんの記事が非常に参考になります。

これをtd-agentにインストールします。
# /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-sumologic


sumologicはjsonのパースが面倒そうなので、今回は、素のテキストで送って、プリセットのapacheフォーマットでパースさせます。そのためapacheログのinputには普通のtailではなく、生のフォーマットでtailできるtail_asisを使用しました。
# /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-tail-asis


次に設定ファイルです。
sumologicの設定では、host, port, path は先ほどコピーしたURLを分解したものをそれぞれに設定します。
<source>
  type tail_asis
  format apache
  path /var/log/httpd/access_log
  tag server1.apache.access
</source>

<match *.apache.*>
  type sumologic
  host collectors.sumologic.com
  port 443
  format json
  path /receiver/v1/http/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX==
</match>



まずは、formatをjsonに設定した状態で、使用してみます。
# /etc/init.d/td-agent start


しばらくしてログが溜まっていくのがわかります。
ログの内容を見ると、messageがJSONになっているのが分かります。




これはこれで使い道がある場合もありますが、sumologicはJSONのパースに長い正規表現を使用しないと行けなそうなので、format textにしてみます。
<match *.apache.*>
  type sumologic
  host collectors.sumologic.com
  port 443
  format text
  path /receiver/v1/http/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX==
</match>



そのあとのログはクエリ欄に以下のように入力すると、カラムごとに項目がわかれて表示されます。
_collector=testhost | parse using public/apache/access





このようにすることで、集計も以下のようなクエリで簡単にレポートを作ることができます。
_collector=testhost | parse using public/apache/access | count by status_code






料金は、無料版は1日500MBまでで、データ保持期間は7日間、トータルで3.5GBまでのデータが保持可能です。有償の場合は1日5GBから1TB以上までの段階型のプランで、データ保持期間によっても価格が異なります。(⇛ 料金表 )

あくまで無料枠での体感ですが、同じサービス型のSplunkStormよりも動作は軽快なようです。
また、Splunkと同じくユーザーとロールを追加できるのでプロジェクト毎の設定などもできそうです。

以上です。