はじめに
- 前回のついででメトリクスを
Elasticsearchに突っ込むhandlerを作ってみた - 決して
Graphiteを諦めたわけではありませんが... - 試した環境は
Amazon Linuxです - [追記]「メトリクスデータ」という言葉に違和感あったので「メトリクス」に直した*1
スクリプト
github
- 人様にお見せ出来る代物ではありませんが...アップしました
レッツモニタリング!
config.json に elasticsearch-metrics.rb を使うぞーという設定を行う
/etc/sensu/config.json に以下のような設定を行う。
"elasticsearch-metrics":{ "type": "pipe", "command": "/etc/sensu/handlers/elasticsearch-metrics.rb" }
ディスク使用量を監視するスクリプトを設置
以下を /etc/sensu/conf.d/ に metric_disk_usage.json というファイル名で保存する。(ファイル名にルールが無いのが良い点でもあり悪い点でもある...)
{ "checks": { "disk_usage_metrics": { "type": "metric", "handlers": ["elasticsearch-metrics"], "command": "/etc/sensu/plugins/system/disk-usage-metrics.rb", "subscribers": [ "conohi","mon" ], "interval": 60 } } }
disk-usage-metrics.rb をダウンロードしてくる。
cd /etc/sensu/plugins/system/ wget https://raw.githubusercontent.com/sensu/sensu-community-plugins/master/plugins/system/disk-usage-metrics.rb
Load Average を監視するスクリプトの設置
以下を /etc/sensu/conf.d/ に metric_load.json というファイル名で保存する。
{ "checks": { "load_metrics": { "type": "metric", "handlers": ["elasticsearch-metrics"], "command": "/etc/sensu/plugins/system/load-metrics.rb", "subscribers": [ "conohi","mon" ], "interval": 60 } } }
load-metrics.rb をダウンロードしてくる。
cd /etc/sensu/plugins/system sudo wget https://raw.githubusercontent.com/sensu/sensu-community-plugins/master/plugins/system/load-metrics.rb
Elasticsearch にメトリクスを突っ込むスクリプトの用意
elasticsearch-metrics.rb を適当に /etc/sensu/handlers 辺りに保存する。
sudo wget https://raw.githubusercontent.com/inokappa/sensu-handler-metrics-elasticsearch/master/elasticsearch-metrics.rb
さらに elasticsearch-metrics.json を /etc/sensu/conf.d に保存する。
sudo wget https://raw.githubusercontent.com/inokappa/sensu-handler-metrics-elasticsearch/master/elasticsearch-metrics.json
elasticsearch-metrics.json は elasticsearch-metrics.rb を使う為の設定(Elasticsearch のホスト名、ポート番号等)が定義されている。
Elasticsearch 側の注意点
mapping をちゃんと考えておく...の一言に尽きる。ディスク使用量は Integer で Load Average は float にとか...監視項目毎にインデックス分けた方が良さそう
以下のような mapping 定義の template を試した。
// ディスク使用量のデータを放り込むインデックスの mapping template curl -XPUT localhost:9200/_template/template_1 -d ' { "template" : "sensu-metrics*", "mappings" : { "disk_usage_metrics" : { "properties" : { "@timestamp" : { "type":"date", "format":"dateOptionalTime" }, "client" : {type: "string"}, "status": {type: "long"}, "address": {type: "string"}, "check_name": {type: "string"}, "occurrences": {type: "long"}, "value": {type: "float"}, "command": {type: "string"}, "key": {type: "string"} } } } } } ' // Load Average のデータを放り込むインデックスの mapping template curl -XPUT localhost:9200/_template/template_2 -d ' { "template" : "sensu-metrics*", "mappings" : { "load_metrics" : { "properties" : { "@timestamp" : { "type":"date", "format":"dateOptionalTime" }, "client" : {type: "string"}, "status": {type: "long"}, "address": {type: "string"}, "check_name": {type: "string"}, "occurrences": {type: "long"}, "value": {type: "float"}, "command": {type: "string"}, "key": {type: "string"} } } } } } '
kibana へ
Elasticsearch にデータが入ったということで、お待ちかねの kibana での可視化。
ディスク使用量のスクリーンショット

Load Average のメトリクスを可視化しているスクリーンショット

〆
実際に運用する際のポイント等
Elasticsearchのインデックスの設定やマッピングの定義をちゃんと考慮するべき- メトリクスを突っ込む間隔、インデックスのローテーション等も合わせて考慮が必要
kibana の Histgram を利用する際のポイント
Histgram の Panel 設定のデフォルトは下図のようになっている。

以下のように修正する。

*1:計算や分析を加えてわかりやすいデータ(数値)に変換したのがメトリクス