Y-Ken Studio

新しもの好きのデータエンジニアが四方山話をお届けします。

Fluentdが流行る理由がいま分かる、10の実践逆引きユースケース集

f:id:yoshi-ken:20131204220909p:plain

ログデータを活用してビジネスに役立てようという最近のトレンドは理解できる。

しかし、なぜログ収集ソフトウェアのFluentdがこれほどまで話題になるのか、不思議に感じている方もいるのではないだろうか。単にログデータを収集するならばsyslog-ngやrsyslogで十分ではないかという意見もあるだろう。

それらは既存のログシステムを置き換えるプロダクトであり、Fluentdのそれとは根本的に異なる。Fluentdは、既存のログシステムに手を入れることなく新たにログの収集を行い、ストリームデータ処理を実現するプロダクトなのである。

一般的にログデータはサーバの数だけ分散しており、それを定期実行処理で収集するということだけでも、なかなか骨の折れる仕事である。さらに集めるだけでなく、日々増え続けるログデータを活用できる形に加工してしかるべきデータストアに保管するということに挫折した方もいるのではないだろうか。

明らかにこれはどの企業でも行う車輪の再発明であるため、Fluentdを早々に導入することで本来行いたかったログの活用フェーズへ移るべきである。

もちろんFluentdは万能では無いため、要件によっては向き不向きは存在するのは事実だ。
そこで今回、Fluentd周りの機能の紹介の後に、現実的な各種ユースケースを紹介する。

なお、詳しい設定例は紙面の都合上、割愛するがご了承頂きたい。

Fluentdコアとプラグインが提供する主な機能

Fluentdのコア機能では、実にシンプルでログデータの収集と、他Fluentdサーバへの転送程度しか機能は無い。有志によるプラグインで、その他の機能は実現していると言っても過言では無い。
実際にどのような機能があるのか、大まかにまとめると次の通りである。

入力プラグイン
  • ログファイルを吸い上げてJSON形式にする(アクセスログ、エラーログ、アプリログ等)
  • Fluentdデーモンが直接JSONメッセージを受け取る(Syslog, HTTP等)
  • システム稼働状況等の定期収集を行う(dstat, munin等)
出力プラグイン(フィルタ的な役割)
  • リアルタイム集計
  • タグの書き換え
  • レコードの書き換え
出力プラグイン
  • ストレージへの保存(ローカルファイル, Amazon S3, WebHFDS等)
  • RDBデータベースへの保存(PostgreSQL, MySQL, RedShift等)
  • NoSQLデータベースへの保存(MongoDB, TreasureData, CouchDB, ElasticSearch, Solr等)
  • グラフ化(GrowthForecast, HRForecasts, Graphite, CloudWatch, Cacti, MetricSense, Librato Metrics等)
  • メッセージ通知・電話通知(HipChat, Growl, Jabber(XMPP), Twilio, Twitter等)

こんな事をしたいという要望はあっても、どのプラグインと組み合わせて使うべきか悩んだ際には、Fluentd MLでの質問のほか、#fluentdハッシュタグをつけてツイートすれば、暖かくコメントしてくれる人がいるはずである。

10の逆引きユースケース

多数のプラグインと組み合わせることで便利なことが出来ると聞くが、それがどう嬉しいのかは私も触るまで分からなかったのは事実だ。そこで、具体的にどのような用途に向いているのか、ユースケース集として次に紹介する。
いずれも基本的にサーバさえあれば、追加費用が発生することなく実現が可能だ。(Amazon S3を除く)

  • アクセスログを収集して、サイト(ドメイン)毎にファイル名を分けて、gzip圧縮したログのアーカイブをAmazon S3に行う。

  • 単位時間毎のアクセス量やステータスコード別の集計結果を、サイト毎にGrowthForecastでグラフ化する。

  • 超高速な自前Webビーコンを作る。QUERY_STRINGにパラメータを渡して、NginxのアクセスログからFluentdへ取り込み、クエリパラメータを展開し、それを非同期にデータベースに保存する。

  • ログ量のスパイク等、異常値を検出をしたらチャットツール、例えばHipChatやiChatに通知する。

  • muninやdstat、シリアルポートから取得したシステム稼働状況をデータベースに保存する。

  • アプリログ/アクセスログを収集し、ヒストグラム化や完全/部分一致での検索が出来るダッシュボードをElasticSearch+Kibanaで作る。

    • IPアドレスを元にGeoIPを用いた緯度経度情報を付与し、地図にプロット
    • エラーログの俯瞰(WEBサーバやDBサーバのエラーログ)
    • ページの応答速度の推移(アクセスログ応答時間
    • n秒以上応答に掛かるページの推移(アクセスログ応答時間
    • HTTPステータスコードが404・500エラーとなった推移
    • Googlebot等からのクロール状況
    • ログイン成功数/ログイン失敗数
    • ボタンの効果測定を行うA/Bテスト
    • 自社広告の露出回数・クリック回数の推移
    • MySQLのスロークエリの可視化
  • メールの配信失敗ログをステータスコードと共に収集してMySQLに保存し、配信禁止リスト登録までのラグの最小化を行う。

  • メールの配信履歴を収集して、メアドを難読化(SHA1)した上で保存し、それを検索出来るダッシュボードをElasticSearch+Kibanaで作る。

  • CEPエンジンと呼ばれるストリームデータのリアルタイム集計処理をSQLで実現するEsperを利用する機能をNorikraで作る。

  • iOSAndroidへのプッシュ通知を行うキューイング型のメッセージサーバ機能として利用する。

まとめ

Fluentdを活用することで、ストリームデータのリアルタイム処理が容易となる。
しかし、1つのfluentd(td-agent)にあまり機能を詰め込まず、適宜機能分割を行い、シンプルな構成を維持できるよう心掛る事を忘れてはならない。企業組織で利用するシステムであるからには、保守及び運用できるミドルウェアという枠に収めることが重要であるからだ。

なお、保守サポートが必要であれば、Fluentdの開発元であるTreasureDataに問い合わせると良いだろう。サイトは英語だが、日本語でのやりとりも可能だ。

追記(2014年7月27日)

共著で、Fluentdについて詳細に特集された書籍(ムック本)が8月8日に発売となります。
ログ/メッセージ収集から保存を行うまでの各種ノウハウ解説のほか、運用監視手法、そして日本語による逆引きプラグイン集(250個)が収録されています。

本書は既にFluentdを利用されている方にも、これから使い始めようと検討されている方にも最適です。
手ごろな価格ですので、Fluentdの逆引きプラグイン集だけでも購入の価値があるかもしれませんね。

サーバ/インフラエンジニア養成読本 ログ収集~可視化編 [現場主導のデータ分析環境を構築!] (Software Design plus)


このエントリは「Fluentd Advent Calendar 2013」の4日目でした。明日は u-ichi さんです! http://qiita.com/advent-calendar/2013/fluentd/participants

なお、12月13日(金)には「Fluentd Casual Talks #3」が開催されます。私も参加予定で、Fluentdの応用プロダクトについてお話しする予定です。 http://atnd.org/events/45386