c4se記:さっちゃんですよ☆

.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)

.。oO(此のblogは、主に音樂考察Programming に分類されますよ。ヾ(〃l _ l)ノ゙♬♪♡)

音樂は SoundCloud 等に公開中です。

考察は現在は主に Scrapbox で公表中です。

Programming は GitHub で開発中です。

Mackerel の Google Cloud インテグレーションから、Compute Engine instance を自動退役する

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 上の設定だけで監視できます。

mackerel.io

Google Cloud インテグレーションの中の Compute Engine の監視に就いてです。設定時にある Compute Engine instance は勿論、auto scale 等で追加された instance も Mackerel は自動で監視對象に追加します。しかし消えた instance は、勿論メトリックは取得されなくなり料金もかかりませんが、Mackerel のホストとしては殘り續けます。個人で Kubernetes Engine を運用してゐて、node は數週間程で入れ替はりますので、殘ったホストが邪魔です。

自動退役させる事にしました。

github.com

Compute Engine instance 一覧に無く、Mackerel の指定したロールにあるホストは、無くなった instance だと見做して退役させます。

手元から動かす場合は make run-local です。

私は Kubernetes の CronJob として動かしてゐます。CronJob の設定は deployments/ directory に置いてあり、GitHub と Cloud Build を聯繫させれば Kubernetes Engine 上に deploy されます。

一時間毎に動いて退役させる樣子がこちら。

f:id:Kureduki_Maari:20211217190244p:plain

中身は、中心的にはこれだけです。

(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 には對應してゐません。

qiita.com

明日 12/19 (日) は sogahisashi さんです。