Mackerel で mkr と WebAPI を使用して poweroff にしたホストを退役します。
今回の判定条件は n日前のメトリクスが無いホストとします。(poweroff 直後のホストは非対象としています)
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等で定期的に実行すると退役漏れが無くせるかと思います。