概要
RabbitMQをSensuで監視するもろもろについて調べました。
rabbitmqプラグイン
RabbitMQを監視するためにsensu-plugins-rabbitmqというプラグインが用意されています。
このプラグインでは次の監視スクリプトが用意されています。
- bin/check-rabbitmq-alive.rb
- bin/check-rabbitmq-amqp-alive.rb
- bin/check-rabbitmq-cluster-health.rb
- bin/check-rabbitmq-consumers.rb
- bin/check-rabbitmq-messages.rb
- bin/check-rabbitmq-network-partitions.rb
- bin/check-rabbitmq-node-health.rb
- bin/check-rabbitmq-queue-drain-time.rb
- bin/check-rabbitmq-queue.rb
- bin/check-rabbitmq-stomp-alive.rb
- bin/metrics-rabbitmq-overview.rb
- bin/metrics-rabbitmq-queue.rb
Sensuからの監視
個別のスクリプトを見る前にSensuから監視対象サーバをどうやって監視するかを説明します。
Sensuの監視の仕組みはざっくりこんな感じです。
- Sensuサーバが監視対象のSensuクライアントに実行するコマンドを送信する
- クライアントはコマンドを実行して結果をサーバに返す
- サーバは結果に応じてアクションを起こす
クライアントとなるサーバでは、Sensuサーバから指示されるコマンドとなるバイナリやスクリプトがインストールされている必要があります。
サーバに置く監視ひとつの設定はこんな感じです。
詳しくはドキュメントをみてください。
{
"checks": {
"check_rabbitmq_alive": {
"handlers": ["notify_slack"],
"command": "ruby /path/to/bin/check-rabbitmq-alive.rb",
"subscribers": ["rabbitmq"],
"interval": 60
}
}
}
handlers
はSensuサーバが監視に対して行うアクションです。
subscribers
はこの監視項目の対象ノード(のグループ)です。
rabbitmqプラグインの使い方
インストール方法
このプラグインはrubygemsでインストールできます。監視対象のノードでインストールしましょう。
gem install sensu-plugins-rabbitmq
実行方法
gemでインストールするとコマンドとして実行できるようになるので、次のように実行できます。
$ check-rabbitmq-alive.rb -w localhost
スクリプト
bin/check-rabbitmq-alive.rb
REST APIで死活監視をします。
-w, --host HOST RabbitMQ host
-p, --password PASSWORD RabbitMQ password
-P, --port PORT RabbitMQ API port
--ssl Enable SSL for connection to RabbitMQ
-u, --username USERNAME RabbitMQ username
-v, --vhost VHOST RabbitMQ vhost
bin/check-rabbitmq-amqp-alive.rb
AMQP経由で死活監視をします。
-w, --host HOST RabbitMQ host
-p, --password PASSWORD RabbitMQ password
-P, --port PORT RabbitMQ AMQP port
--ssl Enable SSL for connection to RabbitMQ
-u, --username USERNAME RabbitMQ username
-v, --vhost VHOST RabbitMQ vhost
bin/check-rabbitmq-cluster-health.rb
REST APIでクラスタのノードがRunningかチェックします。
-w, --host HOST RabbitMQ host
-n, --nodes NODE1,NODE2 Optional comma separated list of expected nodes in the cluster
-p, --password PASSWORD RabbitMQ password
-P, --port PORT RabbitMQ API port
-u, --username USERNAME RabbitMQ username
http://rabbitmq/api/nodes
をみてます。
bin/check-rabbitmq-consumers.rb
REST API経由でConsumerの数をチェックします。
-c, --critical NUM_CONSUMERS CRITICAL consumer count threshold
--exclude queue_name Comma separated list of RabbitMQ queues to NOT monitor. All others will be monitored.
--host HOST RabbitMQ management API host
--password PASSWORD RabbitMQ management API password
--port PORT RabbitMQ management API port
--queue queue_name Comma separated list of RabbitMQ queues to monitor.
--ssl Enable SSL for connection to the API
--user USER RabbitMQ management API user
-w, --warn NUM_CONSUMERS WARNING consumer count threshold
bin/check-rabbitmq-messages.rb
REST API経由でキューに入っているメッセージの総数をチェックします。
-c, --critical NUM_MESSAGES CRITICAL message count threshold
-e, --excludedqueues queue_name Comma separated list of queues to exclude when using queue level monitoring
--host HOST RabbitMQ management API host
--password PASSWORD RabbitMQ management API password
--port PORT RabbitMQ management API port
-q, --queuelevel Monitors that no individual queue is above the thresholds specified
--ssl Enable SSL for connection to the API
--user USER RabbitMQ management API user
-w, --warn NUM_MESSAGES WARNING message count threshold
bin/check-rabbitmq-network-partitions.rb
AMQP経由でRabbitMQクラスタにネットワーク分離が発生しているかチェックします。
-w, --host HOST RabbitMQ management API host
-p, --password PASSWORD RabbitMQ management API password
--port PORT RabbitMQ management API port
--ssl Enable SSL for connection to the API
-u, --username USERNAME RabbitMQ management API user
bin/check-rabbitmq-node-health.rb
REST API経由でノード状態がヘルシーかチェックします。
-w, --host HOST RabbitMQ host
-p, --password PASSWORD RabbitMQ password
-P, --port PORT RabbitMQ API port
-c, --mcrit PERCENT Critical % of socket usage vs high watermark
-m, --mwarn PERCENT Warning % of socket usage vs high watermark
-u, --username USERNAME RabbitMQ username
-a, --alarms BOOLEAN Sound critical if one or more alarms are triggered
ぱっと見でソース見ただけですがバグありそうなので、使うならPR送るかした方がよさそうです。
bin/check-rabbitmq-queue-drain-time.rb
REST API経由。
今のメッセージ消費速度を元に、今Queueにあるメッセージが何秒後に消費されるかをチェックします。
例えば、次のような状況の時、
- キューには1000メッセージたまってる
- 消費速度は 1 msg/sec
1000秒後にメッセージが消費されると予測されます。
なので、もし閾値が1000以下であれば発火します。
-c, --critical PROCESS_TIME_SECS CRITICAL time that messages will process at current rate
--filter REGEX Regular expression for filtering queues
--host HOST RabbitMQ management API host
--password PASSWORD RabbitMQ management API password
--port PORT RabbitMQ management API port
--ssl Enable SSL for connection to the API
--user USER RabbitMQ management API user
-w, --warning PROCESS_TIME_SECS WARNING that messages will process at current rate
bin/check-rabbitmq-queue.rb
REST API経由。
各Queueごとのメッセージ数をチェックします。
-c, --critical NUM_MESSAGES CRITICAL message count threshold
--host HOST RabbitMQ management API host
--password PASSWORD RabbitMQ management API password
--port PORT RabbitMQ management API port
--queue queue_names RabbitMQ queue to monitor (required)
--ssl Enable SSL for connection to the API
--user USER RabbitMQ management API user
-w, --warn NUM_MESSAGES WARNING message count threshold
bin/check-rabbitmq-stomp-alive.rb
STOMP経由で死活監視します。
-w, --host HOST RabbitMQ host
-p, --password PASSWORD RabbitMQ password
-P, --port PORT RabbitMQ STOMP port
-q, --queue QUEUE Queue to post a message to and receive from
--ssl Enable SSL for connection to RabbitMQ
-u, --username USERNAME RabbitMQ username
bin/metrics-rabbitmq-overview.rb
RabbitMQのManagement UIのメインページと同じメトリクスを取得します。
# $ rabbitmq-queue-metrics.rb
# host.rabbitmq.queue_totals.messages.count 0 1344186404
# host.rabbitmq.queue_totals.messages.rate 0.0 1344186404
# host.rabbitmq.queue_totals.messages_unacknowledged.count 0 1344186404
# host.rabbitmq.queue_totals.messages_unacknowledged.rate 0.0 1344186404
# host.rabbitmq.queue_totals.messages_ready.count 0 1344186404
# host.rabbitmq.queue_totals.messages_ready.rate 0.0 1344186404
# host.rabbitmq.message_stats.publish.count 4605755 1344186404
# host.rabbitmq.message_stats.publish.rate 17.4130186829638 1344186404
# host.rabbitmq.message_stats.deliver_no_ack.count 6661111 1344186404
# host.rabbitmq.message_stats.deliver_no_ack.rate 24.6867565643405 1344186404
# host.rabbitmq.message_stats.deliver_get.count 6661111 1344186404
# host.rabbitmq.message_stats.deliver_get.rate 24.6867565643405 1344186404#
bin/metrics-rabbitmq-queue.rb
Queueごとに次のメトリクスを取得します。
- メッセージ数
- 平均排出速度
- メッセージ消費予測時間
- Consumer数