こんにちは。SCSKの磯野です。
Google CloudではCloud Monitoringで監視を行うことができます。
監視をする際、Slack等に通知されるアラートのメッセージをカスタマイズしたいというケースがあると思います。
例)CloudRunのエラーログ監視において、Slackの通知にVM名やエラーメッセージを含めたい。
今回は、アラートの通知内容をカスタマイズする方法とTerraformでの記載例についてご紹介します。
アラートの通知内容をカスタマイズする方法
アラートのdocumentation・ラベルを活用することで、通知メッセージをカスタマイズすることが可能です。
詳細は以下公式ドキュメントに記載されています。
変数として、ラベルを定義することが可能です。
- リソースラベル一覧
Monitored resource types | Cloud Monitoring | Google Cloud - メトリクスラベル一覧
Google Cloud metrics | Cloud Monitoring- 上記ドキュメントは最新ではないことも。Google API Explorerで確認するとよい。
Method: projects.metricDescriptors.get | Cloud Monitoring | Google Cloud
- 上記ドキュメントは最新ではないことも。Google API Explorerで確認するとよい。
- カスタムラベル
カスタムラベルについて、ログ・メトリクスで扱い方が異なります。詳しく見ていきましょう。
ログ監視におけるカスタムラベル
リソースラベルに加えて、ログベースのアラートポリシーでは、log.extracted_label.KEYという形でカスタムラベルを付与することが可能です。
Terraformでの記載例は以下の通り。
# CloudRunのエラーログが発生したことを検知するアラートポリシー
resource "google_monitoring_alert_policy" "cloud_run_warn" {
display_name = "Cloud Run - Error Detected"
combiner = "OR"
conditions {
display_name = "Log match - Cloud Run Error"
condition_matched_log {
filter = <<EOT
(resource.type="cloud_function" OR resource.type="cloud_run_revision" OR (resource.type="cloud_run_job" AND protoPayload.serviceName="run.googleapis.com"))
AND severity="ERROR"
AND (
resource.labels.project_id="xxx"
)
EOT
label_extractors = {
error_message = "EXTRACT(protoPayload.status.message)"
}
}
}
enabled = true
alert_strategy {
notification_prompts = ["OPENED"]
notification_rate_limit {
period = "300s"
}
auto_close = "1800s"
}
notification_channels = "xxx(通知先のslackなど)"
documentation {
content = <<EOT
project: $${resource.labels.project_id}
job name: $${resource.labels.job_name}
error_message: $${log.extracted_label.error_message}
EOT
mime_type = "text/markdown"
}
}
メトリクス監視におけるカスタムラベル
リソースラベルやメトリクスラベルに加えて、Monitoring は、モニタリング対象リソースに関する追加情報を内部で収集し、システム メタデータ ラベルに保存します。これらのシステム メタデータ ラベルは、読み取り専用の値として使用できます。一部のリソースでは、Google Cloud コンソールで VM インスタンスなどのリソースを構成するときに、独自のリソース メタデータ ラベルを作成することもできます。
Terraformでの記載例は以下の通り。
本コードでは、リソースラベル・メトリクスラベルを使用して、通知内容のカスタマイズを行っています。
# CloudRunジョブのCPU使用率が90%を超えたことを検知するアラートポリシー
resource "google_monitoring_alert_policy" "cloud_run_memory_utilization_common" {
display_name = "Cloud Run Job - Container Memory Utilization > 0.9"
combiner = "OR"
conditions {
display_name = "Cloud Run Job - Container Memory Utilization"
condition_prometheus_query_language {
query = <<EOT
histogram_quantile(0.99,sum by (job_name,project_id,le)(
run_googleapis_com:container_memory_utilizations_bucket{
monitored_resource="cloud_run_job",
project_id="xxx"})) > 0.9
EOT
}
}
enabled = true
notification_channels = "xxx(通知先のslackなど)"
alert_strategy {
notification_prompts = ["OPENED"]
}
documentation {
content = <<EOT
Project: $${resource.label.project_id}
JobName : $${metric.label.job_name}
EOT
}
}
まとめ
いかがだったでしょうか。
今回は、Cloud Monitoringでアラートの通知内容をカスタマイズする方法とTerraformでの記載例についてご紹介しました。
本記事が皆様のお役に立てれば幸いです。