created: 2023-12-20T02:51:06.908Z
[GCP] UI でつくったログベースのメトリクスとアラートポリシーを terraform import する
経緯
GCP をつかっているプロジェクトだと Grafana とかを使うのが多かったようだが、通知が欲しいだけなら GCP 内製のアラートポリシーが必要十分な機能になってきてるので、最近だとこちらを使った方が IaC 的には管理しやすそうである。Grafana の JSON はちとデカい。
スコープ
この記事ではアラートポリシー自体のことは書かない。import するところのメモ。
UI の作業
- Cloud Logging のログエクスプローラから通知がほしそうなクエリを書く
- ログ エクスプローラ – Google Cloud コンソール
- 日本語 UI だと「指標の作成」ボタンから「ログベースのメトリクス」をつくる
- ログベースの指標のページで目当てのものの
…
ボタンから「指標に基づいて通知を作成」 - 通知を作成する UI(親切)で色々な切り口を試しながら指標を作成
- こちらを読んでからだと自分が何をしているのかがある程度わかるし、わからないところがあってもドキュメントが読みやすい
- Cloud Monitoring のメトリクスの基本的なコンセプトをざっと理解する - Please Sleep
IaC 側の作業
terraform 1.5 からコードに import
と書けるようになっているのでそれを使う。
こんな定義をして({{}}
の中身や形式はリソースによって違うようだ)
import {
id = "{{project}} {{name}}"
to = google_logging_metric.default
}
-generate-config-out
というオプションをつけて plan
実行すると、ID にマッチするリソースを探して、定義を terraform のコードとして吐き出してくれる。取り込んだ結果は引数で渡したファイルに入る。
$ terraform plan -generate-config-out=/tmp/import-111111111111111.tf.out
# 出力をコピってコードに貼れば動く
$ cat /tmp/import-111111111111111.tf.out | pbcopy
アラートポリシー
アラートポリシー の import にはリソースの ID が必要だが、これは alertPolicies の場合は name
属性を使用するようだ。 UI には表示されていないので API を叩いて取得する。(追記:URL にも ID 文字列が入っていたのでそっちのほうが楽かも)
$ gcloud alpha monitoring policies list --format=json | jq '.[] | [.name, .displayName]'
projects/mypjt-123456/alertPolicies/111111111111111
こちらも同様に定義を書いて -generate-config-out
をつけて plan をすれば UI で色々やった定義が落ちてくる(うれしい)
import {
id = "${var.GCP_PROJECT_ID} projects/mypjt-123456/alertPolicies/111111111111111"
to = google_monitoring_alert_policy.default
}