はじめに
- 引き続き Amazon Linux で sensu-server を...シリーズ
- Cassandra が稼働しているノードのプロセス監視やヒープ使用量を sensu-client でやってみたい
- ヒープ使用量は
JMX
から jolokia を介して値を取る簡単なシェルスクリプトを作って監視してみる
プロセス監視
プロセスの監視はドキュメントにも登場している check-procs.rb を利用する。
check-procs.rb -h
check-procs.rb のヘルプ。
Usage: ./check-procs.rb (options) -p, --pattern PATTERN Match a command against this pattern -c, --critical-over N Trigger a critical if over a number -C, --critical-under N Trigger a critial if under a number -e, --esec-over SECONDS Match processes that older that this, in SECONDS -E, --esec-under SECONDS Match process that are younger than this, in SECONDS -f, --file-pid PID Check against a specific PID -M, --match-parent Match parent process it uses ruby {process.ppid} -m, --match-self Match itself -t, --metric METRIC Trigger a critical if there are METRIC procs -P, --proportional-set-size PCPU Trigger on a Proportional Set Size is bigger than this -r, --resident-set-size RSS Trigger on a Resident Set size is bigger than this -s, --state STATE Trigger on a specific state, example: Z for zombie -u, --user USER Trigger on a specific user -z, --virtual-memory-size VSZ Trigger on a Virtual Memory size is bigger than this -w, --warn-over N Trigger a warning if over a number -W, --warn-under N Trigger a warning if under a number
基本的な使い方としては...
/etc/sensu/plugins/check-procs.rb -p cassandra -C 1
以下のように出力される。
CheckProcs OK: Found 1 matching processes; cmd /cassandra/
Cassandra のプロセスが落ちた場合には以下のように critical
となる。
Heap 使用量監視
プロセスの死活の次は Heap 使用量の監視は JMX
を jolokia を介して値を取得する。
jolokia の設定
こちらの手順で Cassandra と jolokia を連携させる。とっても簡単。
Heap 使用量を取得する
以下のようなリクエストを curl
で投げる。
curl -s http://127.0.0.1:8778/jolokia/read/java.lang:type=Memory/HeapMemoryUsage/ | jq .
以下のような結果が得られる。
{ "value": { "used": 51262496, "init": 311427072, "committed": 303693824, "max": 304742400 }, "request": { "type": "read", "attribute": "HeapMemoryUsage", "mbean": "java.lang:type=Memory" }, "status": 200, "timestamp": 1394376385 }
jq
でもう少し絞り込むことで used
の値のみを取得することが出来る。また、Cassandra の nodetool
を利用することでヒープの使用量も取得することが出来る。
/usr/local/cassandra/bin/nodetool -h 127.0.0.1 info
以下のように出力される。
Token : 7066488264533032227 ID : 329c345b-8aa5-4f57-b1f4-e23a423e202c Gossip active : true Thrift active : true Native Transport active: true Load : 82.77 KB Generation No : 1394376362 Uptime (seconds) : 1449 Heap Memory (MB) : 39.04 / 290.63 Data Center : datacenter1 Rack : rack1 Exceptions : 0 Key Cache : size 504 (bytes), capacity 14680064 (bytes), 25 hits, 28 requests, 0.893 recent hit rate, 14400 save period in seconds Row Cache : size 0 (bytes), capacity 0 (bytes), 0 hits, 0 requests, NaN recent hit rate, 0 save period in seconds
簡単なシェルスクリプト
ということで以下のようなシェルスクリプトを仕込む。
#!/bin/bash CS_HOST=127.0.0.1 HEAP_THRESHHOLD=58766040 HEAP_WARN_THRESHHOLD=60000000 HEAP_CRIT_THRESHHOLD=100000000 HEAP_USED=`curl -s http://127.0.0.1:8778/jolokia/read/java.lang:type=Memory/HeapMemoryUsage/ | jq '.value.used'` if [ ${HEAP_USED} -gt ${HEAP_CRIT_THRESHHOLD} ];then echo "Critical Heap used ${HEAP_USED} (${HEAP_USED} >= ${HEAP_CRIT_THRESHHOLD})" exit 2 elif [ ${HEAP_USED} -gt ${HEAP_WARN_THRESHHOLD} ];then echo "Warning Heap used ${HEAP_USED} (${HEAP_USED} >= ${HEAP_WARN_THRESHHOLD})" exit 1 else echo "Normally Heap used ${HEAP_USED}" exit 0 fi
HEAP_WARN_THRESHHOLD
と HEAP_CRIT_THRESHHOLD
はとりあえずテスト用の値。シェルスクリプトを /etc/sensu/plugins/check-cassandra-heap-used.sh
という名前で保存して /etc/sensu/conf.d/check_cassandra_heap_used.json
を以下のように作成する。(ファイル名自体は任意で...)
{ "checks": { "cassandrai_heap_used_check": { "handlers": ["default"], "command": "/etc/sensu/plugins/check-cassandra-heap-used.sh", "interval": 60, "standalone": true } } }
上記の設定を行った後で sensu-client
を再起動する。
監視なう
暫くすると以下のように Warning
が上がる。
おお、後はしきい値をちゃんと設定すれば最低限の監視は出来そう。また、値の推移をグラフに出来ればちゃんとした監視らしくなるかな。
引き続き
handler
を設定してアラートメールを飛ばせるようにする- 同じく
handler
で Heap 使用量をグラフ化したい