読者です 読者をやめる 読者になる 読者になる

vague memory

うろ覚えを無くしていこうともがき苦しむ人の備忘録

Mackerel事始め mkrでホストの退役

Mackerel で mkr と WebAPI を使用して poweroff にしたホストを退役します。
今回の判定条件は n日前のメトリクスが無いホストとします。(poweroff 直後のホストは非対象としています)

f:id:htnosm:20160429183205p:plain

ApiKey/URL/Metricsを設定

検索対象のメトリクスは loadavg5 等必ず存在する物を指定します。

export MACKEREL_APIKEY='XXXXXXXXXX'
_MACKEREL_URL="https://mackerel.io/api/v0"
_METRICS="loadavg5"
# 処理実行当日を含む日数
_KEEP_DAY=1

日数(epoch秒)生成

_KEEP_TO=$(date --date ''${_KEEP_DAY}' days ago' +'%Y-%m-%d 15:00:00')
_KEEP_TO=$(TZ=UTC date --date "${_KEEP_TO}" +'%s')
_KEEP_FROM=$(expr ${_KEEP_TO} - 86400)
_KEEP_TO=$(expr ${_KEEP_TO} - 1)
echo "From: $(date --date "@${_KEEP_FROM}" +'%Y-%m-%d %H:%M:%S')"
echo "  To: $(date --date "@${_KEEP_TO}" +'%Y-%m-%d %H:%M:%S')"

日数(epoch秒)生成 (BSD)

OSXの場合デフォルトのままだとこちらになります。(GNU date導入済みであれば上記)

_KEEP_TO=$(date -v-${_KEEP_DAY}d +'%Y-%m-%d 15:00:00')
_KEEP_TO=$(date -jf "%Y-%m-%d %H:%M:%S" "${_KEEP_TO}" +%s)
_KEEP_FROM=$(expr ${_KEEP_TO} - 86400)
_KEEP_TO=$(expr ${_KEEP_TO} - 1)
echo "From: $(date -r "${_KEEP_FROM}" +'%Y-%m-%d %H:%M:%S')"
echo "  To: $(date -r "${_KEEP_TO}" +'%Y-%m-%d %H:%M:%S')"

Metrics が存在しない host を退役

status が poweroff 且つ 実行日 - n日 のmetrics存在チェックをし、データが存在しないホストを退役します。
(実行すると有無を言わさず退役になるので、実行部分はコメントアウトしています)

for _ID in $(mkr hosts --status poweroff | jq -c -r '.[].id')
do
  _RES=$(curl -s -S -X GET -H "X-Api-Key: ${MACKEREL_APIKEY}" "${_MACKEREL_URL}/hosts/${_ID}/metrics?name=${_METRICS}&from=${_KEEP_FROM}&to=${_KEEP_TO}" | jq -r '.metrics | length')
  echo "HostId: ${_ID} / DataPoint: ${_RES}"
  #[ ${_RES} -eq 0 ] && mkr retire --force ${_ID}
done

cron等で定期的に実行すると退役漏れが無くせるかと思います。