Resqueのキューがどんな感じになっているのか可視化したくなったから、Mackerelを使ってみた。
MackerelにResqueサービスとDBロールとRedisが動いているホストを追加して、下記のようなスクリプト書いた。REDIS_HOST
PORT
MACKEREL_API_KEY
HOST_ID
はよしなに設定する。
#!/bin/bash
redis='redis-cli -h REDIS_HOST -p PORT'
timestamp=`date +%s`
apikey=MACKERL_API_KEY
hostid=HOST_ID
json=''
sum=0
for name in `$redis SMEMBERS resque:queues` ; do
depth=`$redis LLEN resque:queue:${name}`
sum=`expr $sum + $depth`
json="$json,{\"hostId\":\"$hostid\",\"name\":\"${name}_queue_depth\",\"time\":$timestamp,\"value\":$depth}"
done
json="[{\"hostId\":\"$hostid\",\"name\":\"queue_depth\",\"time\":$timestamp,\"value\":$sum}$json]"
curl https://mackerel.io/api/v0/tsdb \
-H "X-Api-Key: $apikey" \
-H "Content-Type: application/json" \
-d "$json"
Resqueは resque:queues
というSetの中にキューの名前が入っていて、それぞれに対して resque:queue:NAME
というListがあり、それの一つ一つの要素がタスクの内容になっているので、Listの大きさがその瞬間のタスク数ということになる。
あとはこれをcronで毎分動かすようにしたらあとはMackerelがいい感じにグラフ化してくれた。
Mackerelについて
APIがシンプルで使いやすかった。