如果备份失败,如何设置告警通知到 Slack?
解读
在国内企业的真实面试中,这道题考察的不仅是“能不能收到告警”,而是能否用 Google Cloud 原生能力把告警闭环到国内开发团队最常用的协作工具 Slack。
面试官希望听到:
- 你熟悉 Cloud SQL 的自动备份失败事件在 Cloud Logging 中的具体日志特征;
- 你能用Cloud Alerting Policy精确过滤该事件,而不是全量告警;
- 你理解国内网络环境下 Slack Webhook 的可达性风险,并给出合规、可落地的通道方案(如国内反向代理、企业微信中转、或直接使用 Google Chat 再同步到 Slack);
- 你能在 Terraform 或 gcloud 脚本里一键可复制地把策略、通知渠道、权限一次性交付,体现“基础设施即代码”思维。
知识点
- Cloud SQL 备份失败日志标识:
protoPayload.methodName="cloudsql.backupRuns.create"且severity=ERROR或backupRuns.status="FAILED" - Cloud Logging 高级过滤语法:利用
resource.type="cloudsql_database"与jsonPayload.status.detail做精细化过滤,避免误报 - Alerting Policy 的阈值型 vs 日志型:备份失败属于离散事件,必须选日志型策略(Log-based Alerting)
- Notification Channel 国内可用性:Slack Webhook 域名
hooks.slack.com需备案域名加速或 HTTPS 代理,否则建议先发到 Google Chat,再通过 Chat 内置 Slack 应用同步 - IAM 最小权限:Alerting 通知渠道使用Notification Channel Sender角色;日志查看须roles/logging.viewer;Terraform 服务账号需roles/monitoring.editor
- Terraform 资源:
google_monitoring_alert_policy+google_monitoring_notification_channel(type = “slack”) - 告警风暴抑制:在 Policy 中设置60 秒通知间隔与5 分钟自动关闭,避免同一备份窗口多次轰炸 Slack
- 可观测性延伸:把告警写入BigQuery 审计表,用 DataStudio 生成月度 SLA 报表,体现你具备SRE 可观测闭环能力
答案
分五步落地,全部可脚本化:
-
提取日志过滤语句
在 Cloud Logging 控制台先试运行:resource.type="cloudsql_database" protoPayload.methodName="cloudsql.backupRuns.create" jsonPayload.status.detail:"FAILED" OR jsonPayload.status.detail:"error"确认能命中真实失败记录后,保存为日志查询快捷方式。
-
创建 Slack 通知渠道(国内合规版)
方案 A:若公司 Slack 已备案并可通过 HTTPS 出站,直接在 Monitoring → Notification Channel 新建 Slack Webhook,填入https://hooks.slack.com/services/...;
方案 B:若网络受限,先创建 Google Chat 空间,在 Chat 里安装官方 “Slack” 应用,完成 Chat→Slack 桥接,再把 Chat 空间 Hook 地址填到 Notification Channel,实现零翻墙同步。 -
定义日志型告警策略
在 Monitoring → Alerting 选 “Log-based Alert”,粘贴第 1 步过滤语句;
设置通知间隔 60 秒、自动关闭 5 分钟;
选择第 2 步建好的 Slack Channel;
消息模板加入变量:${resource.labels.database_id} 备份失败,错误信息:${jsonPayload.status.detail},请 @on-call 处理 -
权限与审计
给 Terraform 运行账号授予 roles/monitoring.editor 与 roles/logging.viewer;
在组织策略里加一条 boolean constraint 禁止公开 Slack Webhook,防止员工把告警流到外部匿名频道。 -
一键 Terraform 模板(核心片段)
resource "google_monitoring_notification_channel" "slack" { display_name = "cloudsql-backup-fail-slack" type = "slack" labels = { "channel_name" = "#dba-oncall" } sensitive_labels { auth_token = var.slack_webhook_path // 仅存储路径,域名在代理层统一 } } resource "google_monitoring_alert_policy" "backup_fail" { display_name = "CloudSQL Backup Failed" combiner = "OR" conditions { display_name = "Backup Run Failed" condition_matched_log { filter = <<EOT resource.type="cloudsql_database" protoPayload.methodName="cloudsql.backupRuns.create" jsonPayload.status.detail:"FAILED" EOT } } notification_channels = [google_monitoring_notification_channel.slack.id] alert_strategy { auto_close = "300s" notification_rate_limit { period = "60s" } } }执行
terraform apply后,备份失败 30 秒内即可在 Slack 看到卡片,实现零运维告警闭环。
拓展思考
- 双通道高可用:同时配置 Slack + 短信(通过 Google Cloud 的PagerDuty 集成或直接调用国内短信服务商),防止 Slack 被封时漏警。
- 备份失败自愈:用 Cloud Composer 或 Workflows 监听同一日志,自动执行 backupRuns.create 重试;若连续 3 次失败再发告警,减少误报。
- 成本优化:对开发环境实例,把告警策略加metadata.label.env=prod 过滤,非生产失败只发邮件,降低 Slack 噪音。
- 合规审计:把告警事件转发到 Log Analytics Bucket,开启 Log Analytics Lake,用 SQL 计算月度备份成功率,向金融客户出具 SLA 报告,体现你对国内监管要求的理解。