- Mackerel のサービスメトリックは時系列で値を持つものならなんでも扱うことが出来る。であればサーバやネットワーク以外のメトリックも監視してみよう。
- Mackerel で監視することで、時系列数値をグラフ化することが出来る。つまり簡易 BI ツールとして使える。
- Mackerel で監視することで、閾値を超えた際にアラートを出せる。
というような話です。
私は20年超の distributed.net ジャンキーですので(参考1、参考2)、RC5-72 の順位を Mackerel で監視してみようと思います。
まず Mackerel のサービスメトリックを送信する API を確認します。といっても API-key を添えて URL をたたくだけのシンプルなものとなっています。
監視対象となる私のの RC5-72 のランキングページはこちらです。
Rank: の右の「1500」という数値を抜き出して監視したいですね。
ということで順位を抜き出して Mackerel に送信するスクリプトを作成しました。ほんとなら nokogiri とか使って綺麗に書くといいんですが、やっつけの適当です。すんません(誰に対する謝罪)
#!/usr/local/bin/bash
API_KEY="xxx"
RANK=`curl -s 'https://stats.distributed.net/participant/psummary.php?project_id=8&id=497669' | \
ruby -e 'result = ARGF.gets(rs = nil).gsub(/\R/, "").gsub(/<.*?>/m, "").match(/Rank:.*?([0-9]+)/); p result[1].to_i'`
curl https://api.mackerelio.com/api/v0/services/all/tsdb \
-H "X-Api-Key: ${API_KEY}" \
-H "Content-Type: application/json" \
-X POST \
-d '[{"name": "dnetstats.rc5-72.rank", "time": '$(date +%s)', "value": '${RANK}'}]'
このスクリプトを cron で1日1回実行するようにします。
30 10 * * * $BINDIR/dnetrank.sh > /dev/null 2>&1
翌日以降に Mackerel を確認すると、順位が受信されてグラフが生成されています。と言いたいところなんですが、無料プランだとグラフが1日分しか作れません。このグラフにも順位が描画されているのですが1点のみなのでグラフに見てないという。しくしく。
例えば目標順が1000位だったとして、1000位になったらアラートを飛ばしたいなら以下のように設定すれば大丈夫です。