Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
fluentdとダッシュボードを使った
ビジュアルなシステム管理
SITW24
2014-07-26
諸星佑樹 @hoshi_sano
おおまかな流れ
• 背景
• ビジュアルなシステム管理はなぜ必要か
• fluentdとは何か
• Fluentdによる収集データの視覚化デモ
背景
クラウドな時代
→個人/サービス単位で利用するホスト数の増加
背景
インフラ構築、デプロイの自動化の重要性↑
例) Chef, Capistrano, …etc
背景
監視対象はたくさんある
ログ、CPU/メモリ使用率、各センサー値、…etc
背景
ただでさえ大変なのに、台数増えたらたまんないよ!
監視もなるべくシンプルにしたい!
(;ω;)
http://www.fluentd.org/architecture より
fluentdで!
http://www.fluentd.org/architecture より
fluentdとは
• (準)リアルタイムデータ収集システム
• Treasure Data
• ビッグデータのクラウドサービス
• Ruby製
• gem版: fluentd
• パッケージ版: td-agent
• 中身は同じ
fluentdの特徴
• JSON & msgpack
• 高速・コンパクト
• プラガブル Pluggable
• さまざまなプラグインが多くの人の手によって開発さ
れている
• プラグインリスト
• Routing, Retry, Scal...
データ構造
• tag (文字列)
• time (epoch)
• record (JSON)
‚syslog‛
1405924812
{
‚host‛: ‚myPC‛,
‚ident‛: ‚kernel‛,
‚message‛: ‚…‛
}
fluentdのデータの流れ
Input Plugin Engine
Input Plugin
Output
Plugin
Output
Plugin
(かなり雑に…)
ホントはここに
Buffer Pluginも
いるけど割愛
fluentdのデータの流れ
Input Plugin Engine
Input Plugin
Output
Plugin
Output
Plugin
tag
time
record
tag
time
record
tag
time
recor...
fluentdのデータの流れ
Input Plugin Engine
Input Plugin
Output
Plugin
Output
Plugin
tag
time
record
tag
time
record
タグを見てどのOutput
...
fluentdのデータの流れ
Input Plugin Engine
Input Plugin
Output
Plugin
Output
Plugin
tag
time
record
tag
time
record
tag
time
recor...
Input と Output の組み合わせで
いろんな応用が可能!
今日の主題
統一&視覚化
GrowthForecast
Elasticsearch + Kibana
共通点
client API storage
graph
user
process
共通点
client API storage
graph
user
process
GrowthForecast
共通点
client API storage
graph
user
process
Elasticsearch
Kibana
デモ環境
agent1(VM)
ホストマシン
agent2(VM)
GrowthForecastデモ
目指すもの
dstat
• サーバのリソース状況を取得するコマンド
• fluentdで送受信可能な形式に
• →GrowthForecastでグラフ化
fluent-plugin-dstat
<source>
type dstat
tag dstat
option -cm
delay 1
</source>
<match dstat>
type stdout
</match>
取得したデータに...
fluent-plugin-dstatで得られたもの
dstat
{
"hostname":‚agent1",
"dstat":{
"total cpu usage":{
"usr":"0.215",
"sys":"0.436",
"idl":...
fluent-plugin-map
<match dstat>
type copy
<store>
type map
tag ‚dstat.agent1.cpu"
time time
record record['dstat']['total ...
fluent-plugin-map
dstat
{
"hostname":‚agent1",
"dstat":{
"total cpu usage":{
"usr":"0.215",
"sys":"0.436",
"idl":"99.301",...
GrowthForecastへのデータストア
$ curl -F number=10 ¥
http://gfhost:5125/api/service/section/graph
JSONを投げると自動でグラフ化
fluent-plugin-growthforecast
<match dstat.**>
type growthforecast
gfapi_url http://localhost:5125/api/
service dstat-demo
...
GrowthForecast簡単で便利!
…だけど最近はあまり流行ってない?
• 数値しか受け付けない
• 再利用性がちょっと低い
• JSONでグラフデータをエクスポートする機能はあるけど
fluentd + GrowthForecast参考情報
• GrowthForecast を CentOS 6.3 にインストールし
て Supervisor で管理してみた
• GrowthForecastというグラフ表示ツールで捗る話
•...
Elasticsearch + Kibana デモ
目指すもの
Elasticsearch
• 高速スケーラブル検索エンジン
• REST APIによるデータ操作
• スキーマレス
• 各フィールドの型は自動で決定
• 「ちょっと試す」のが簡単
• zip/tar.gzを展開するだけですぐ使える
Elasticsearch
$ bin/elasticsearch [-d] [-p]
起動
$ curl -X PUT ¥
http://localhost:9200/blog/article/1 -d ¥
'{"title": "First...
Elasticsearch
$ curl -X PUT ¥
http://localhost:9200/blog/article/1 -d ‘{...}’
インデックス ≒ RDBのデータベース
タイプ≒ RDBのテーブル
ドキュメント ≒ R...
Kibana
• Elasticsearchをバックエンドとしたログ
視覚化ツール
• HTML、CSS、JSなどで構成
• webサーバに置けばすぐ使える
fluent-plugin-elasticserach
<smatch dstat.**>
type elasticsearch
host 127.0.0.1
port 9200
type_name dstat
logstash_format ...
• Elasticsearch + Kibanaでできることは
データのグラフ化だけではない
• クエリによるsyslogやapachelogのフィル
タリング、時間毎のカウントなども可能
• だけど…
• GrowthForecastほどのお...
fluentd + Elasticsearch + Kibana
参考情報
• fluentd + Elasticsearch + Kibanaで始め
るログ解析
• Kibana入門
• Kibana3を環境構築だけで終わらせない
(前編)(...
応用編
詳細は話しませんが…
Zabbixとの連携(fluent-plugin-zabbix)
Norikra(stream processing with SQL)
アラート(有料サービス, IRC, mail, …)
ネットワーク監視(fl...
Upcoming SlideShare
Loading in …5
×

SITW24 fluentdとダッシュボードを使った ビジュアルなシステム管理

3,181 views

Published on

第24回山陰ITPro勉強会のサブセッションでお話させていただいた際のスライドです。

(2014-08-08)
コメントにてp.38の間違いのご指摘をいただき、訂正後再アップロードしました。

Published in: Technology
  • @JunOhtani
    ご指摘いただきありがとうございます。
    間違った情報を流布してしまいました、すみません。

    p.38は以下のようになっておりますが、

    BEFORE
    * blog: インデックス
    * article: ドキュメント
    * インデックス ≒ RDBのテーブル
    * ドキュメント ≒ RDBのレコード

    以下のように修正したいと思います。

    AFTER
    * blog: インデックス
    * article: (ドキュメントの)タイプ
    * インデックス ≒ RDBのデータベース
    * タイプ ≒ RDBのテーブル
    * ドキュメント ≒ RDBのレコード
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • ども。
    p.38の「ドキュメント」の部分は「タイプ」が正式名称になります。

    http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/_basic_concepts.html#_type
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

SITW24 fluentdとダッシュボードを使った ビジュアルなシステム管理

  1. 1. fluentdとダッシュボードを使った ビジュアルなシステム管理 SITW24 2014-07-26 諸星佑樹 @hoshi_sano
  2. 2. おおまかな流れ • 背景 • ビジュアルなシステム管理はなぜ必要か • fluentdとは何か • Fluentdによる収集データの視覚化デモ
  3. 3. 背景 クラウドな時代 →個人/サービス単位で利用するホスト数の増加
  4. 4. 背景 インフラ構築、デプロイの自動化の重要性↑ 例) Chef, Capistrano, …etc
  5. 5. 背景 監視対象はたくさんある ログ、CPU/メモリ使用率、各センサー値、…etc
  6. 6. 背景 ただでさえ大変なのに、台数増えたらたまんないよ! 監視もなるべくシンプルにしたい! (;ω;)
  7. 7. http://www.fluentd.org/architecture より
  8. 8. fluentdで!
  9. 9. http://www.fluentd.org/architecture より
  10. 10. fluentdとは • (準)リアルタイムデータ収集システム • Treasure Data • ビッグデータのクラウドサービス • Ruby製 • gem版: fluentd • パッケージ版: td-agent • 中身は同じ
  11. 11. fluentdの特徴 • JSON & msgpack • 高速・コンパクト • プラガブル Pluggable • さまざまなプラグインが多くの人の手によって開発さ れている • プラグインリスト • Routing, Retry, Scalable, …
  12. 12. データ構造 • tag (文字列) • time (epoch) • record (JSON) ‚syslog‛ 1405924812 { ‚host‛: ‚myPC‛, ‚ident‛: ‚kernel‛, ‚message‛: ‚…‛ }
  13. 13. fluentdのデータの流れ Input Plugin Engine Input Plugin Output Plugin Output Plugin (かなり雑に…) ホントはここに Buffer Pluginも いるけど割愛
  14. 14. fluentdのデータの流れ Input Plugin Engine Input Plugin Output Plugin Output Plugin tag time record tag time record tag time record data chunk 別のfluentdから データが流れてきたり ポーリングしたり
  15. 15. fluentdのデータの流れ Input Plugin Engine Input Plugin Output Plugin Output Plugin tag time record tag time record タグを見てどのOutput Pluginを使うか判定
  16. 16. fluentdのデータの流れ Input Plugin Engine Input Plugin Output Plugin Output Plugin tag time record tag time record tag time record chunk tagやrecordを書き換えて engineに戻すものも。 Filter系のOutput Plugin 別のfluentdへデータを 送ったり、ストレージに データを書き込んだり
  17. 17. Input と Output の組み合わせで いろんな応用が可能!
  18. 18. 今日の主題 統一&視覚化
  19. 19. GrowthForecast
  20. 20. Elasticsearch + Kibana
  21. 21. 共通点 client API storage graph user process
  22. 22. 共通点 client API storage graph user process GrowthForecast
  23. 23. 共通点 client API storage graph user process Elasticsearch Kibana
  24. 24. デモ環境 agent1(VM) ホストマシン agent2(VM)
  25. 25. GrowthForecastデモ 目指すもの
  26. 26. dstat • サーバのリソース状況を取得するコマンド • fluentdで送受信可能な形式に • →GrowthForecastでグラフ化
  27. 27. fluent-plugin-dstat <source> type dstat tag dstat option -cm delay 1 </source> <match dstat> type stdout </match> 取得したデータにはこ のタグをつけます dstat実行時のオプ ションを指定します とりあえず 出力してみます
  28. 28. fluent-plugin-dstatで得られたもの dstat { "hostname":‚agent1", "dstat":{ "total cpu usage":{ "usr":"0.215", "sys":"0.436", "idl":"99.301", "wai":"0.033", "hiq":"0.0", "siq":"0.017" }, "memory usage":{ "used":"77672448.0", "buff":"12271616.0", "cach":"40595456.0", "free":"256532480.0" } } } タグ • 値はちゃんと取れてる • でもGrowthForecastが期待 するデータ構造になってない • 厳密には、GrowthForecastへ データを送るためのPluginが期 待するデータ構造でない • ネストしてるのがダメ
  29. 29. fluent-plugin-map <match dstat> type copy <store> type map tag ‚dstat.agent1.cpu" time time record record['dstat']['total cpu usage'] </store> <store> type map tag ‚dstat.agent1.mem" time time record record['dstat']['memory usage'] </store> </match>
  30. 30. fluent-plugin-map dstat { "hostname":‚agent1", "dstat":{ "total cpu usage":{ "usr":"0.215", "sys":"0.436", "idl":"99.301", "wai":"0.033", "hiq":"0.0", "siq":"0.017" }, "memory usage":{ "used":"77672448.0", "buff":"12271616.0", "cach":"40595456.0", "free":"256532480.0" } } } dstat.agent1.cpu { "usr":"0.215", "sys":"0.436", "idl":‚99.301", "wai":"0.033", "hiq":"0.0", "siq":"0.017" } dstat.agent1.mem { "used":"77672448.0", "buff":"12271616.0", "cach":"40595456.0", "free":"2565322480.0" }
  31. 31. GrowthForecastへのデータストア $ curl -F number=10 ¥ http://gfhost:5125/api/service/section/graph JSONを投げると自動でグラフ化
  32. 32. fluent-plugin-growthforecast <match dstat.**> type growthforecast gfapi_url http://localhost:5125/api/ service dstat-demo tag_for section remove_prefix dstat name_key_pattern .* </match> http://gfhost:5125/api/service/section/graph dstat.agent1.mem { "used":"77672448.0", "buff":"12271616.0", "cach":"40595456.0", "free":"2565322480.0" } タグをsectionに 使うけども タグからdstat を除去します
  33. 33. GrowthForecast簡単で便利! …だけど最近はあまり流行ってない? • 数値しか受け付けない • 再利用性がちょっと低い • JSONでグラフデータをエクスポートする機能はあるけど
  34. 34. fluentd + GrowthForecast参考情報 • GrowthForecast を CentOS 6.3 にインストールし て Supervisor で管理してみた • GrowthForecastというグラフ表示ツールで捗る話 • dstatをfluentd + GrowthForecastで可視化する
  35. 35. Elasticsearch + Kibana デモ 目指すもの
  36. 36. Elasticsearch • 高速スケーラブル検索エンジン • REST APIによるデータ操作 • スキーマレス • 各フィールドの型は自動で決定 • 「ちょっと試す」のが簡単 • zip/tar.gzを展開するだけですぐ使える
  37. 37. Elasticsearch $ bin/elasticsearch [-d] [-p] 起動 $ curl -X PUT ¥ http://localhost:9200/blog/article/1 -d ¥ '{"title": "First Aritcle", "content": "This is my 1st article.", "tags": [‚tips", "elasticsearch"]}' APIでデータストア
  38. 38. Elasticsearch $ curl -X PUT ¥ http://localhost:9200/blog/article/1 -d ‘{...}’ インデックス ≒ RDBのデータベース タイプ≒ RDBのテーブル ドキュメント ≒ RDBのレコード インデックス (ドキュメントの) タイプ ID
  39. 39. Kibana • Elasticsearchをバックエンドとしたログ 視覚化ツール • HTML、CSS、JSなどで構成 • webサーバに置けばすぐ使える
  40. 40. fluent-plugin-elasticserach <smatch dstat.**> type elasticsearch host 127.0.0.1 port 9200 type_name dstat logstash_format true logstash_prefix dstat logstash_dateformat %Y%m%d include_tag_key true tag_key _key </match> この設定でGrowthForecastのデモ で使ったデータをそのまま Elasticsearchにストアできる Kibanaは元々logstashというログ収集 ツールのフロントエンドだったため、 logstashのフォーマットと親和性が高い
  41. 41. • Elasticsearch + Kibanaでできることは データのグラフ化だけではない • クエリによるsyslogやapachelogのフィル タリング、時間毎のカウントなども可能 • だけど… • GrowthForecastほどのお手軽感はない • 扱えるものが増えるのでそりゃ当たり前なんだけど • 便利でかっこいいダッシュボードを作るに は作りこみが必要
  42. 42. fluentd + Elasticsearch + Kibana 参考情報 • fluentd + Elasticsearch + Kibanaで始め るログ解析 • Kibana入門 • Kibana3を環境構築だけで終わらせない (前編)(後編)
  43. 43. 応用編 詳細は話しませんが… Zabbixとの連携(fluent-plugin-zabbix) Norikra(stream processing with SQL) アラート(有料サービス, IRC, mail, …) ネットワーク監視(fluent-plugin-network-probeなど)

×