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 かっぱのほげふが