それFluentdで! #fluentd

6,742 views
6,510 views

Published on

社内で実はあまり知らない、という声もあって、それfluentdでできるんだけどなぁという実装が多かったので、勉強会してみました。

Published in: Technology
0 Comments
37 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,742
On SlideShare
0
From Embeds
0
Number of Embeds
855
Actions
Shares
0
Downloads
70
Comments
0
Likes
37
Embeds 0
No embeds

No notes for slide

それFluentdで! #fluentd

  1. 1. それfuentdで! - 社内勉強会資料 - 2014/03/04 @boheanimato
  2. 2. 自己紹介 のりしろエンジニア。 プロジェクトで落っこちてきた、 なんか細々としたことを拾い上げてやってます。 Twitter : boheanimato -SIer 1999/10~ -Yahoo! 2005/11~ -Indival 2007/7~
  3. 3. INDEX -fluentdの紹介 – こんなことができるようになります – アーキテクチャ簡単紹介 -こんなことをやってみました – apacheのログを集約して、elasticsearchにいれて、kibanaでみてみる – apacheのログをURL毎にグルーピングしてレスポンスタイムを GrowthForecastでみてみる -現状をこうしよう! – apacheログの集約、集計、活用 – MySQLの更新履歴をfluentdでSolrにいれる -可視化について – 事前に考え抜くこと – 目的の明確化、KGIとKPI – 設計サンプル
  4. 4. INDEX -fluentdの紹介 – こんなことができるようになります – アーキテクチャ簡単紹介 -こんなことをやってみました – apacheのログを集約して、elasticsearchにいれて、kibanaでみてみる – apacheのログをURL毎にグルーピングしてレスポンスタイムを GrowthForecastでみてみる -現状をこうしよう! – Apacheログの集約、集計、活用 – MYSQLの更新履歴をfluentdでSolrにいれる – もっといろんなこと -可視化について – 事前に考え抜くこと – 目的の明確化、KGIとKPI – 設計サンプル
  5. 5. こんなことができるようになります -ログを一箇所に集約!集計!格納! MySQL、MongoDB、Solr、Redis、 elasticsearch、 Hadoopに簡単にはいります -サーバの閾値監視、通知! Zabbixに値を送れたりします メールおくれます、電話もかけれます
  6. 6. アーキテクチャ簡単紹介 一般的にログ収集ソフトウェアは 何らかの「イベント」を検知し、 その内容を発生時刻などの情報とともに ファイルやデータベースなどのストレージなどに出力す る、という処理を行います。 fluentdでも同じです。 ただ、fluentdでは イベントの受け取り(input)、 バッファに一時的に保存し(buffer)、 ストレージなどへの出力(output) がすべてプラグインとして実装されています。
  7. 7. アーキテクチャ簡単紹介 柔軟なログ収集を可能にする「fluentd」入門 - さくらのナレッジ : http://knowledge.sakura.ad.jp/tech/1336/ ・テキストファイルの末尾か らイベントを読み込む ・TCPソケットをリッスンし て、イベントストリームを受 信する ・syslogプロトコル経由でレ コードを取得 ・ほかのfluentdのノートに 出力する ・MongoDBへとレコードを出 力する ・ファイルに書き出す
  8. 8. アーキテクチャ簡単紹介
  9. 9. プラグイン 超豊富 Fluentd plugins : http://fluentd.org/plugin/
  10. 10. こんなことができるようになります 「細かい単位で常にログを回収し続ける仕組み」 をいったんfluentdでつくっておくと → プラグイン実装 → プラグインが豊富 なので、 回収したログをファイルに出力していたが、 elasticsearchにも格納しようとした場合、 プラグインを追加して設定するだけで、 その要求にすぐに応えられます。
  11. 11. INDEX -fluentdの紹介 – こんなことができるようになります – アーキテクチャ簡単紹介 -こんなことをやってみました – apacheのログを集約して、elasticsearchにいれて、kibanaでみてみる – apacheのログをURL毎にグルーピングしてレスポンスタイムを GrowthForecastでみてみる -現状をこうしよう! – apacheログの集約、集計、活用 – MySQLの更新履歴をfluentdでSolrにいれる -可視化について – 事前に考え抜くこと – 目的の明確化、KGIとKPI – 設計サンプル
  12. 12. システム構成 APIServerWebServer Elasticsearch Redis GrouthForcast Raw File StorageServer WebServer forwarder fluent-agent-lite Aggregator Worker serializer Fluentd + plugin watcher Raw File
  13. 13. APIServerWebServer Elasticsearch Redis GrouthForcast Raw File StorageServer WebServer forwarder fluent-agent-lite Aggregator Worker serializer Fluentd + plugin watcher Raw File apacheのログを集約(Forwarder)
  14. 14. apacheのログを集約(Forwarder) LTSV - Labeled Tab-Separated Values テキストのフォーマットの仕様。 タブ区切りのフィールドで、ラベルと値を持ちます。 主にログ、特に httpd のアクセスログなどに適用すると便利。 後で、ログの解析の属性指定やelasticsearchに格納する際のカ ラム名として利用。 LTSV FAQ - LTSV って何? どういうところが良いの? - naoyaのはてなダイア リー : http://d.hatena.ne.jp/naoya/20130209/1360381374
  15. 15. apacheのログを集約(Forwarder) LTSV - Labeled Tab-Separated Values Apacheの設定をこうしておくと、 LogFormat "domain:%Vthost:%htserver:%Atident:%ltuser:%uttime:%{%Y/%m/%d %H:%M:%S %z}ttmethod:%mtpath:%U%qtprotocol:%Htstatus:%>stsiz e:%btreferer:%{Referer}itagent:%{User-Agent}itresponse_time:%D" combined_lts こうなります タブ区切りで、ラベル:値で出力されます。
  16. 16. apacheのログを集約(Forwarder) fluent-agent-lite INPUTプラグイン ログ収集専用のエージェント 正規表現をパースしないため、動作が軽く、負荷の高いアプリ ケーションサーバに同居させてもCPUを使わない。 現状、そのままのログをシェルで集約して、それをもとにバッ チが動いて集計しているので、 既存の仕組みをそのままで、導入できる! #fluentd 用ログ収集専用のエージェント fluent-agent-lite 書いた - tagomorisのメモ置き場 : http://d.hatena.ne.jp/tagomoris/20120314/1331716214
  17. 17. apacheのログを集約(Forwarder) fluent-agent-lite インストールはプラグインを rpmで入れるか、 Gitからcloneして./install.shするか td-agentはインストールしません
  18. 18. apacheのログを集約(Forwarder) fluent-agent-lite Forward先のサーバ 集約したいログ
  19. 19. apacheのログを集約(Forwarder) Fluentdのログ構造 -Tag – ログの種類。 Fluentdではログの管理を「タグ」で管理します。 タグはイベントを発生させる側などで指定します。 -Time – ログの時刻をUNIX時刻で表したもの -Record – ログの内容がJSONオブジェクトではいります アプリケーション側でのパースが容易 Tag : koala.www. Time : 137084495 Record: {k1:100, k2 :value1}
  20. 20. apacheのログを集約(Forwarder) fluent-agent-lite -Tag 前述の記述の場合、 以下の3つのタグがついたレコードが流れます。 -koala.www -koala.app -koala.stat -Record そのまま、messageというattributeが付いた中に入っ て送られます。 レコードのattributeも変更可 (デフォルトmessage) Tag : koala.www. Time : 137084495 message : {ログが1行づつ入りま す}
  21. 21. apacheのログを集約 (Aggregater/worker/serializer) APIServerWebServer Elasticsearch Redis GrouthForcast Raw File StorageServer WebServer forwarder fluent-agent-lite Aggregator Worker serializer Fluentd + plugin watcher Raw File
  22. 22. td-agentをインストール http://docs.fluentd.org/categories/installation apacheのログを集約 (Aggregater/worker/serializer)
  23. 23. fluent-plugin-file-alternative OUTPUTプラグイン 出力フォーマットを自由に変更できる! (fluentd 標準のファイル出力プラグイン out_file はメッ セージをJSONにシリアライズして出力するというものなので) 前述のプラグインとあわせると、 「そのままのログを集約して一か所で出力!」がfluentdで実現 できるわけです。 #fluentd fluent-plugin-file-alternative released! - tagomorisのメモ置 き場 : http://d.hatena.ne.jp/tagomoris/20120316/1331886385 apacheのログを集約 (Aggregater/worker/serializer)
  24. 24. 設定ファイルの記述ポイント2つ /etc/td-agent/td-agnet.conf -source イベントの受信方法を指定 -match 受信したイベントをどのように処理するかを 条件文とともに指定 条件はタグの名前 条件にマッチしたら、次のプラグインに 処理が渡されます apacheのログを集約 (Aggregater/worker/serializer)
  25. 25. fluent-plugin-file-alternative koala.www.*のタグにマッチしたイベントを処理 apacheのログを集約 (Aggregater/worker/serializer) forward TCP/IPを使ってイベントを受け取る。
  26. 26. ログでました /tmp/ koala.access.20140228_0.log.gz apacheのログを集約 (Aggregater/worker/serializer)
  27. 27. さらに、このLTSVのログをパースして elasticsearchにいれてしまいます apacheのログを集約 (Aggregater/worker/serializer)
  28. 28. apacheのログを集約 (Aggregater/worker/serializer) LTSV形式をパースして Elasticsearchにいれてる fluent-plugin-parser fluent-plugin-elasticsearch
  29. 29. fluent-plugin-parser 最初、そのままelasticsearchにデータを流すと、messageタグの中には いったまんまelasticsearchインデックスが作成されてしまい、うおおお とか思っていたのですが、 @tagomorisさんから、アドバイスいただきました。 fluent-plugin-parser released! - tagomorisのメモ置き場 : http://d.hatena.ne.jp/tagomoris/20120402/1333363444 apacheのログを集約 (Aggregater/worker/serializer) 負荷の問題がないのなら、 fluent-plugin-parser で ltsv をparse してしまえばいいと思いますよ
  30. 30. -parse実行前 apacheのログを集約 (Aggregater/worker/serializer)
  31. 31. elasticsearch apacheのログを集約 (Aggregater/worker/serializer)
  32. 32. kibana apacheのログを集約 (Aggregater/worker/serializer)
  33. 33. kibana apacheのログを集約 (Aggregater/worker/serializer) LTSVでつけたラベル毎に検索 できる
  34. 34. INDEX -fluentdの紹介 – こんなことができるようになります – アーキテクチャ簡単紹介 -こんなことをやってみました – apacheのログを集約して、elasticsearchにいれて、kibanaでみてみる – apacheのログをURL毎にグルーピングしてレスポンスタイムを GrowthForecastでみてみる -現状をこうしよう! – apacheログの集約、集計、活用 – MySQLの更新履歴をfluentdでSolrにいれる -可視化について – 事前に考え抜くこと – 目的の明確化、KGIとKPI – 設計サンプル
  35. 35. apacheのログをURL毎にグルーピング (Aggregater/worker/serializer) 画像、JS、CSSを対象外に 200以外のステータスは捨てる GET以外のメソッドは捨てる fluent-plugin-rewrite Index.phpはtopとして扱う グルーピングする
  36. 36. apacheのログをURL毎にグルーピング (Aggregater/worker/serializer) fluent-plugin-rewrite このプラグインを用いると、ひとつひとつのmessageについて、 指定したkeyのvalueが特定のパタンにマッチしたら、 -valueを書き換えて、再emitする -そのmessageを無視する -マッチした文字列をtagに追加して、再emitする ということができる。また、それらのルールを複数指定するこ とも可能。 fluent-plugin-rewriteというプラグインを作成した #fluentd - delirious thoughts : http://blog.kentarok.org/entry/2012/07/01/000518
  37. 37. apacheのログをURL毎にグルーピング (Aggregater/worker/serializer) fluent-plugin-rewrite タグ毎にグルーピングできました
  38. 38. apacheのログをURL毎にグルーピング (Aggregater/worker/serializer) fluent-plugin-numeric-monitor fluent-plugin-forest / fluent-plugin-growthforecast レスポンスタイムの集計 集計をgrowthforcastにくわせる
  39. 39. apacheのログをURL毎にグルーピング (Aggregater/worker/serializer) fluent-plugin-numeric-monitor 指定したフィールド(の数値)について、min/max/avg およ び指定したパーセンタイル値を算出する。 パーセンタイル値は複数指定できるので、 たとえば 90, 95, 98, 99 パーセンタイル値をそれぞれ出 力したりできる。 fluent-plugin-numeric-monitor v0.1.0 and fluent-plugin-numeric- counter v0.1.0 released! - tagomorisのメモ置き場 : http://d.hatena.ne.jp/tagomoris/20120706/1341560190
  40. 40. apacheのログをURL毎にグルーピング (Aggregater/worker/serializer) Growthforcast 定期的にGrowthForecastに値をPOSTするだけで、設定なしでグ ラフが作れます GrowthForecast - Lightning fast Graphing / Visualization : http://kazeburo.github.io/GrowthForecast/index.ja.html
  41. 41. apacheのログをURL毎にグルーピング (Aggregater/worker/serializer) Growthforcast
  42. 42. INDEX -fluentdの紹介 – こんなことができるようになります – アーキテクチャ簡単紹介 -こんなことをやってみました – apacheのログを集約して、elasticsearchにいれて、kibanaでみてみる – apacheのログをURL毎にグルーピングしてレスポンスタイムを GrowthForecastでみてみる -現状をこうしよう! – apacheログの集約、集計、活用 – MySQLの更新履歴をfluentdでSolrにいれる -可視化について – 事前に考え抜くこと – 目的の明確化、KGIとKPI – 設計サンプル
  43. 43. 現状をこうしよう! (apacheログの集約、集計、活用) そこfluentdで! APIServerWebServer MySQL StorageServer WebServer SCP SCP SCP Batch
  44. 44. 現状をこうしよう! (MySQLの更新履歴をSolrにいれる) fluent-plugin-mysql-replicator
  45. 45. 運用面メモ Aggregator側:1プロセスでは1つのCPUコアしか使わない ので、サーバのリソースを使い切るために、複数プロセス を起動 →8プロセス起動させる (プロセッサ8つ、物理CPUは1つ、コア数4の場合) 割り当てポートは、24200~24207などに Forwarderから送信時に、ポート指定で送信するようにす る。 INPUTで受け取る大きさを考慮してバッファは指定するな ど、実運用で検討すべきパラメータはたくさんあります。 本番運用のまえに 各種パラメータとか流量は検討しよう!
  46. 46. INDEX -fluentdの紹介 – こんなことができるようになります – アーキテクチャ簡単紹介 -こんなことをやってみました – apacheのログを集約して、elasticsearchにいれて、kibanaでみてみる – apacheのログをURL毎にグルーピングしてレスポンスタイムを GrowthForecastでみてみる -現状をこうしよう! – apacheログの集約、集計、活用 – MySQLの更新履歴をfluentdでSolrにいれる -可視化について – 事前に考え抜くこと – 目的の明確化、KGIとKPI – 設計サンプル
  47. 47. 可視化について 今回はプロトタイプ作成のために、 とりあえず可視化できるよ! というのをしたのですが、 できることが把握できた後は、 何のため?という目的を明確化して 本番の実装はすすめていこう(自戒)
  48. 48. 可視化について 事前に考え抜くこと 「何を可視化するか」 「可視化すべきKPIを決める」 「具体的なKPIの中身を定義する」 目的から指標を決める 目的は何かを考え抜くこと
  49. 49. 可視化について 目的の明確化、KGIとKPIを決める 目標:「売り上げ向上」 KGI(Key Goal indicator) 目標そのものを定量的に評価するもの – 「売上」 KPI(Key Performance indicator) KGIの構成要素を細分化したもの KGIを達成するために何が必要かを定量的にあらわ す指標 – 「顧客数、一人あたり単価、PV、継続率」
  50. 50. 可視化について 項目 内容 目的 一目でサーバ情報の異常や傾向を把握できるだけでなく、気になった ところを拡大して調査できるようにする データ変数 ⇔視覚変数 時間(間隔尺度)⇔ X座標(定量性・順序性) 各種サーバ情報(比例尺度)⇔ Y座標(定量性・順序性) 利用する 可視化手法 折れ線グラフ 推奨Web特性 アニメーション(リアルタイムでのデータ反映) インタラクション(時間の選択範囲)
  51. 51. 可視化について 読むといいかも(参考図書)
  52. 52. おわりに ありがとうございました

×