Tags

By year

  1. 2014 (28)

RabbitMQ の HTTP API でクラスタ、ノードの各種稼働ステータスメトリクスを監視してみる

RabbitMQ Sensu InfluxDB Jq よくわからん

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'

結果は以下の通り。



InfluxDB にメトリクスを放り込む

せっかくなので簡単な bash を使って取得出来る値を InfluxDB に突っ込んでみましょ。

こんな bash

#!/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 の DataInterface

暫くすると InfluxDB にメトリクスが蓄積されてきたのが以下の図です。

おお、お手軽ですな。



tasseo で可視化

tasseo ってなんすか?

以下のような特徴があります。

  • InfluxDB をメトリクスストアとしてサポートするアプリケーション
  • 他にも Graphite もサポートしているようです
  • Sinatra で実装されていてグラフの表示には D3.js が利用されています
  • しきい値を設けることでしきい値を超えるような値を検知した場合にはグラフの色を変えて表示出来るようです

以下は github のリポジトリです。

個人的な印象としては…

  • かなりお手軽(以下の tasseo セットアップをご覧下さい)
  • JavaScript で設定を書ける(自分は JavaScript はよく知りません)
  • でも良くわからない

tasseo セットアップ

既に Ruby1.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 にはその名の通り InfluxDBseries を指定します。また、上記以外にも以下のような設定が可能です。

  • period - Range (in minutes) of data to query from Graphite. (optional, defaults to 5)
  • refresh - Refresh interval for charts, in milliseconds. (optional, defaults to 2000)
  • theme - Default theme for dashboard. Currently the only option is dark. (optional)
  • padnulls - Determines whether to pad null values or not. (optional, defaults to true)
  • title - Dictates whether the dashboard title is shown or not. (optional, defaults to true)
  • toolbar - Dictates whether the toolbar is shown or not. (optional, defaults to true)
  • normalColor - Set normal graph color. (optional, defaults to #afdab1)
  • criticalColor - Set critical graph color. (optional, defaults to #d59295)
  • warningColor - Set warning graph color. (optional, defaults to #f5cb56)
  • interpolation - Line smoothing method supported by D3. (optional, defaults to step-after)
  • renderer - Rendering method supported by D3. (optional, defaults to area)
  • stroke - Dictates whether stroke outline is shown or not. (optional, defaults to true)

tasseo 起動

設定が終わったら以下のようにして tasseo を起動します。

foreman start

又は以下のように起動することも出来るようです。

bundle exec rackup -I lib -p 5000 -s thin

起動してブラウザから http://${tasseo_host}:5000 にアクセスすると…以下のような画面が表示されます。

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

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

とりあえず 3 つのメトリクスを一つの画面で確認出来ることは出来てます…。



さいごに

  • RabbitMQHTTP API を利用して RabbitMQ の各種ステータスを取得出来ますね
  • しかもお手軽に
  • InfluxDB に放り込むのも簡単です
  • tasseokibanaGrafana のようなメトリクスデータを表示する dashboard ツールの一つ
  • 結構お手軽や
  • でも、まだちゃんと動いてまへん



2014 かっぱのほげふが