Posted on Apr 28
最近、随所に RabbitMQ を見かけるようになった気がするかっぱです、こんばんわ…
RabbitMQ も当然アプリケーションの一つでサーバーマシンのリソースは多少なりにも使っているわけで…ということで RabbitMQ の各種稼働ステータスを RabbitMQ 自身が提供する Management HTTP API で監視してみようという算段です。
今回は Sensu で利用している RabbitMQ の以下の項目を監視してみる為に色々とやってみようと思いますです。
以下の全ての操作は RabbitMQ が稼働しているホスト上にて実行した。また、認証情報(下記の -u オプションで指定している部分)は環境に応じて読み替えて頂きたいのとデフォルトのパスワードは変更しましょう。
ちなみに RabbitMQ の管理用のダッシュボードは以下のように状態を示しております。

こんな感じで。
curl -s -u guest:guest localhost:15672/api/nodes | jq '.[].mem_used'
結果は以下の通り。

こんな感じで。
curl -s -u guest:guest localhost:15672/api/connections | jq -r '.|length'
結果は以下の通り。

こんな感じで。
curl -s -u guest:guest localhost:15672/api/channels | jq -r '.|length'
結果は以下の通り。

せっかくなので簡単な bash を使って取得出来る値を InfluxDB に突っ込んでみましょ。
#!/bin/bash
T=`ruby -e 'puts Time.now.to_i * 1000'`
V1=`curl -s -u guest:guest localhost:15672/api/nodes | jq '.[].mem_used'`
V2=`curl -s -u guest:guest localhost:15672/api/connections | jq -r '.|length'`
V3=`curl -s -u guest:guest localhost:15672/api/channels | jq -r '.|length'`
cat << EOT > data
[
{
"name": "rabbitmq_metrics",
"columns": ["time", "mem_used", "connection", "channels"],
"points": [
[$T, $V1, $V2, $V3]
]
}
]
EOT
curl --dump-header - -X POST 'http://localhost:8086/db/rabbitmq/series?u=root&p=root' -d @data
も少し工夫が出来ますが、とりあえず上記のスクリプトを cron 使ってグルグル回します。
暫くすると InfluxDB にメトリクスが蓄積されてきたのが以下の図です。

おお、お手軽ですな。
以下のような特徴があります。
InfluxDB をメトリクスストアとしてサポートするアプリケーションGraphite もサポートしているようですSinatra で実装されていてグラフの表示には D3.js が利用されています以下は github のリポジトリです。
個人的な印象としては…
tasseo セットアップをご覧下さい)JavaScript で設定を書ける(自分は JavaScript はよく知りません)既に Ruby の 1.9.3 以上がインストールされている環境でセットアップを行いました。
git clone https://github.com/obfuscurity/tasseo.git
cd tasseo
bundle install
export INFLUXDB_URL=http://${influxdb_host}:8086/db/rabbitmq
export INFLUXDB_AUTH=${influxdb_user}:${influxdb_pass}
次に tasseo/dashboards 以下に設定ファイルを作成します。設定ファイルは JavaScript で記述して .js という拡張子で保存します。今回は InfluxDB を利用するので以下のように設定します。
var metrics =
[
{
target: "mem_used",
series: "rabbitmq_metrics"
},
{
target: "connection",
series: "rabbitmq_metrics"
},
{
target: "channels",
series: "rabbitmq_metrics"
}
];
target には InfluxDB のカラムを指定します。series にはその名の通り InfluxDB の series を指定します。また、上記以外にも以下のような設定が可能です。
dark. (optional)#afdab1)critical graph color. (optional, defaults to #d59295)warning graph color. (optional, defaults to #f5cb56)設定が終わったら以下のようにして tasseo を起動します。
foreman start
又は以下のように起動することも出来るようです。
bundle exec rackup -I lib -p 5000 -s thin
起動してブラウザから http://${tasseo_host}:5000 にアクセスすると…以下のような画面が表示されます。

おお。rabbitmq-metrics のリンクをクリックすると…

上図のように InfluxDB のメトリクスを取得出来ていますが…グラフ…描かれておりません。ガビーン。本来であれば以下のような図が表示されるようです…

とりあえず 3 つのメトリクスを一つの画面で確認出来ることは出来てます…。
RabbitMQ の HTTP API を利用して RabbitMQ の各種ステータスを取得出来ますねInfluxDB に放り込むのも簡単ですtasseo は kibana や Grafana のようなメトリクスデータを表示する dashboard ツールの一つ2014 かっぱのほげふが