Calendar for Mackerel Advent Calendar 2021 | Advent Calendar 2021 - Qiitaの 12/18 (土) です。昨日 12/17 (金) は masayoshi634 さんのMackerelでSLI/SLO運用をする際に役立つ機能やツールの紹介 - Mackerel お知らせ #mackerelioでした。
Mackerel に Google Cloud インテグレーションと云ふ機能があります。Compute Engine 等を agent を入れずに Mackerel 上の設定だけで監視できます。
Google Cloud インテグレーションの中の Compute Engine の監視に就いてです。設定時にある Compute Engine instance は勿論、auto scale 等で追加された instance も Mackerel は自動で監視對象に追加します。しかし消えた instance は、勿論メトリックは取得されなくなり料金もかかりませんが、Mackerel のホストとしては殘り續けます。個人で Kubernetes Engine を運用してゐて、node は數週間程で入れ替はりますので、殘ったホストが邪魔です。
自動退役させる事にしました。
Compute Engine instance 一覧に無く、Mackerel の指定したロールにあるホストは、無くなった instance だと見做して退役させます。
手元から動かす場合は make run-local
です。
私は Kubernetes の CronJob として動かしてゐます。CronJob の設定は deployments/
directory に置いてあり、GitHub と Cloud Build を聯繫させれば Kubernetes Engine 上に deploy されます。
一時間毎に動いて退役させる樣子がこちら。
中身は、中心的にはこれだけです。
(let [{:keys [gcloud-project-id mackerel-apikey mackerel-role mackerel-service]} config compute-instances (gcloud-compute/list-instances gcloud-project-id ["asia-northeast1-a" "asia-northeast1-b" "asia-northeast1-c"]) compute-instance-names (map :name compute-instances) hosts (mackerel/list-hosts-in-role mackerel-apikey mackerel-service mackerel-role) missing-hosts (filter (fn [{:keys [name]}] (->> compute-instance-names (some #{name}) not)) hosts)] (doseq [host missing-hosts] (println "Retiring an host" host) (mackerel/retire-host mackerel-apikey (:id host))))
Compute Engine の instance 一覧と、指定した Mackerel のロール内のホスト一覧を取得します。互ひの name を比較して、Mackerel にあり Google Cloud に無いものは、消えた instance だと判斷して Mackerel から退役します。
Known issues :
- Cloud Build の設定等に一部、個人用の設定が紛れ込んでゐます。
- 一つの Mackerel ロールのホストしか自動退役させられません。複數のロールから自動退役されたい場合は、複數 CronJob を起動してください。
- Compute Engine instance と Mackerel ホストそれぞれの name しか比較しません。よりよくは、ホストの meta 等を見るべきです。
- asia-northeast1 以外の Google Cloud region には對應してゐません。
明日 12/19 (日) は sogahisashi さんです。