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

43
fluentdとダッシュボードを使った ビジュアルなシステム管理 SITW24 2014-07-26 諸星佑樹 @hoshi_sano

Upload: yuki-morohoshi

Post on 30-Jun-2015

1.704 views

Category:

Technology


2 download

DESCRIPTION

第24回山陰ITPro勉強会のサブセッションでお話させていただいた際のスライドです。 (2014-08-08) コメントにてp.38の間違いのご指摘をいただき、訂正後再アップロードしました。

TRANSCRIPT

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

fluentdとダッシュボードを使った

ビジュアルなシステム管理

SITW24

2014-07-26

諸星佑樹 @hoshi_sano

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

おおまかな流れ

•背景 • ビジュアルなシステム管理はなぜ必要か

• fluentdとは何か

• Fluentdによる収集データの視覚化デモ

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

背景

クラウドな時代

→個人/サービス単位で利用するホスト数の増加

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

背景 インフラ構築、デプロイの自動化の重要性↑

例) Chef, Capistrano, …etc

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

背景

監視対象はたくさんある

ログ、CPU/メモリ使用率、各センサー値、…etc

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

背景

ただでさえ大変なのに、台数増えたらたまんないよ!

監視もなるべくシンプルにしたい!

(;ω;)

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

http://www.fluentd.org/architecture より

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

fluentdで!

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

http://www.fluentd.org/architecture より

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

fluentdとは

• (準)リアルタイムデータ収集システム

• Treasure Data

• ビッグデータのクラウドサービス

• Ruby製

• gem版: fluentd

•パッケージ版: td-agent

•中身は同じ

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

fluentdの特徴

• JSON & msgpack

•高速・コンパクト

• プラガブル Pluggable • さまざまなプラグインが多くの人の手によって開発されている

• プラグインリスト

• Routing, Retry, Scalable, …

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

データ構造

• tag (文字列)

• time (epoch)

• record (JSON)

‚syslog‛

1405924812

{

‚host‛: ‚myPC‛,

‚ident‛: ‚kernel‛,

‚message‛: ‚…‛

}

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

fluentdのデータの流れ

Input Plugin Engine

Input Plugin

Output

Plugin

Output

Plugin

(かなり雑に…)

ホントはここに

Buffer Pluginも

いるけど割愛

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

fluentdのデータの流れ

Input Plugin Engine

Input Plugin

Output

Plugin

Output

Plugin

tag

time

record

tag

time

record

tag

time

record

data

chunk

別のfluentdから

データが流れてきたり

ポーリングしたり

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

fluentdのデータの流れ

Input Plugin Engine

Input Plugin

Output

Plugin

Output

Plugin

tag

time

record

tag

time

record

タグを見てどのOutput

Pluginを使うか判定

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

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へデータを

送ったり、ストレージにデータを書き込んだり

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

Input と Output の組み合わせでいろんな応用が可能!

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

今日の主題

統一&視覚化

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

GrowthForecast

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

Elasticsearch + Kibana

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

共通点 client API storage

graph

user

process

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

共通点 client API storage

graph

user

process

GrowthForecast

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

共通点 client API storage

graph

user

process

Elasticsearch

Kibana

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

デモ環境

agent1(VM)

ホストマシン

agent2(VM)

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

GrowthForecastデモ 目指すもの

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

dstat

• サーバのリソース状況を取得するコマンド

• fluentdで送受信可能な形式に

• →GrowthForecastでグラフ化

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

fluent-plugin-dstat

<source>

type dstat

tag dstat

option -cm

delay 1

</source>

<match dstat>

type stdout

</match>

取得したデータにはこのタグをつけます

dstat実行時のオプションを指定します

とりあえず

出力してみます

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

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が期待するデータ構造でない

• ネストしてるのがダメ

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

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>

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

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"

}

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

GrowthForecastへのデータストア

$ curl -F number=10 ¥

http://gfhost:5125/api/service/section/graph

JSONを投げると自動でグラフ化

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

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

を除去します

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

GrowthForecast簡単で便利!

…だけど最近はあまり流行ってない?

• 数値しか受け付けない

• 再利用性がちょっと低い • JSONでグラフデータをエクスポートする機能はあるけど

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

Elasticsearch + Kibana デモ 目指すもの

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

Elasticsearch

• 高速スケーラブル検索エンジン

• REST APIによるデータ操作

• スキーマレス • 各フィールドの型は自動で決定

• 「ちょっと試す」のが簡単 • zip/tar.gzを展開するだけですぐ使える

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

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でデータストア

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

Elasticsearch

$ curl -X PUT ¥

http://localhost:9200/blog/article/1 -d ‘{...}’

インデックス ≒ RDBのデータベース

タイプ≒ RDBのテーブル

ドキュメント ≒ RDBのレコード

インデックス (ドキュメントの) タイプ

ID

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

Kibana

• Elasticsearchをバックエンドとしたログ視覚化ツール

• HTML、CSS、JSなどで構成 • webサーバに置けばすぐ使える

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

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のフォーマットと親和性が高い

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

• Elasticsearch + Kibanaでできることはデータのグラフ化だけではない

• クエリによるsyslogやapachelogのフィルタリング、時間毎のカウントなども可能

• だけど…

• GrowthForecastほどのお手軽感はない • 扱えるものが増えるのでそりゃ当たり前なんだけど

• 便利でかっこいいダッシュボードを作るには作りこみが必要

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

応用編

詳細は話しませんが…

Zabbixとの連携(fluent-plugin-zabbix)

Norikra(stream processing with SQL)

アラート(有料サービス, IRC, mail, …)

ネットワーク監視(fluent-plugin-network-probeなど)