如何配置Google Cloud Monitoring告警向Discord频道发送通知
Google Cloud Monitoring告警推送Discord频道配置方案
注意:Google Cloud Monitoring原生Webhook的请求体格式不符合Discord Webhook接口规范,直接配置对接会推送失败,需要一层轻量格式转换,以下方案用GCP自带的Cloud Function做无服务转发,无需维护常驻服务器,成本极低。
前置准备
- 拥有目标Discord频道的管理权限
- 拥有对应GCP项目的监控管理员、Cloud Function编辑权限
- 已在Cloud Monitoring中创建好需要触发通知的告警策略
步骤1:生成Discord频道Webhook地址
- 打开Discord进入目标频道,点击频道名称旁的设置按钮
- 在左侧菜单选择「集成」-「Webhook」,点击「新建Webhook」
- 自定义Webhook名称(比如命名为GCP告警通知),确认推送的目标频道
- 复制生成的Webhook地址,该地址请勿泄露,持有地址的人员可随意向频道推送消息,点击保存完成Discord侧配置
步骤2:部署格式转换Cloud Function
- 打开GCP控制台进入Cloud Function页面,点击「创建函数」
- 基础配置项填写:
- 函数名称可自定义,比如
gcp-to-discord-alert - 选择就近的部署区域
- 触发器类型选择「HTTP」,勾选「允许未认证调用」,保存后复制生成的触发器HTTP地址,后续配置监控渠道需要用到
- 函数名称可自定义,比如
- 运行时选择Python 3.10及以上版本,替换默认代码为以下内容:
import requests def forward_alert(request): alert_data = request.get_json(silent=True) if not alert_data or "incident" not in alert_data: return "Invalid payload", 400 incident = alert_data["incident"] # 组装Discord要求的消息格式 discord_msg = { "username": "GCP监控告警", "embeds": [{ "title": f"告警通知 - 状态:{incident.get('state', '未知')}", "color": 15158332 if incident.get('state') == "open" else 3066993, "fields": [ {"name": "告警策略", "value": incident.get("policy_name", "未命名策略"), "inline": False}, {"name": "关联资源", "value": incident.get("resource_name", "未知资源"), "inline": False}, {"name": "触发时间", "value": incident.get("started_at", "未知时间"), "inline": False}, {"name": "告警详情", "value": incident.get("summary", "无详情"), "inline": False} ] }] } # 将下方地址替换为步骤1复制的Discord Webhook地址 DISCORD_WEBHOOK = "替换为你的Discord Webhook地址" resp = requests.post(DISCORD_WEBHOOK, json=discord_msg) return f"Push result: {resp.status_code}", 200
- 打开
requirements.txt文件,添加依赖项:
requests==2.32.3
- 点击部署函数,等待2-3分钟部署完成后,可使用GCP告警模拟payload测试函数,确认Discord频道能收到测试消息
步骤3:配置Cloud Monitoring通知渠道
- 打开Cloud Monitoring控制台,左侧菜单选择「通知渠道」
- 找到Webhook类型,点击「添加新渠道」
- 端点URL填写步骤2中复制的Cloud Function触发器HTTP地址,其余配置保持默认
- 点击「测试发送」,确认Discord频道收到测试消息后保存渠道配置
- 编辑需要推送Discord的告警策略,在通知选项中添加刚创建的Webhook渠道,保存后配置生效
验证与排错
- 配置完成后可临时调整告警阈值触发测试告警,正常情况下1-3分钟内Discord频道会收到红色的告警触发消息,告警恢复后会收到绿色的恢复通知
- 如果未收到消息,直接查看Cloud Function的运行日志,常见问题为Discord Webhook地址填写错误、函数权限配置错误、告警策略未关联对应通知渠道
注意事项
- 该方案下Cloud Function调用量极低,中小团队使用基本在GCP免费额度覆盖范围内,不会产生额外费用
- 如果不想使用Cloud Function,也可以自行部署服务实现同样的格式转换逻辑,核心逻辑就是接收GCP的告警payload、转换格式后转发到Discord Webhook接口
内容的提问来源于stack exchange,提问作者Phạm Hoài Lâm
相关产品推荐
相关产品推荐

