You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Azure中通过Webhook配置SendGrid告警邮件:嵌入动态告警信息

我之前也碰到过完全一样的问题!直接用SendGrid API的硬编码内容确实太死板,要把Azure Alert自带的动态详情塞进邮件里,得靠Azure Alert的Webhook自定义模板语法来替换静态内容,下面是具体的实现步骤:

核心思路:用Azure Alert的动态模板变量替换SendGrid请求内容

Azure Alert的Webhook会在告警触发时自动发送包含所有详情的JSON payload,我们可以用{{变量路径}}的模板语法,把这些动态数据直接插入到SendGrid的邮件请求中,不用再硬编码任何固定值。

步骤1:调整Webhook的请求方式和头部

别再用GET方式把API密钥塞URL里了,换成POST请求更安全也更灵活:

  1. 打开Azure Portal里你的App Service告警规则,进入「Actions」标签编辑现有Webhook动作
  2. 将请求Method改为POST
  3. 在「Headers」里添加两个关键配置:
    • Content-Type: application/json(告诉SendGrid我们发的是JSON格式内容)
    • Authorization: Bearer 你的SendGrid API密钥(替换成你自己的API密钥,比URL参数更安全)

步骤2:编写带动态模板的SendGrid请求Body

把下面的JSON模板粘贴到Webhook的「Body」区域,替换掉示例中的邮箱地址,再根据你的告警规则调整变量(比如多条件告警可能要修改数组索引):

{
  "personalizations": [
    {
      "to": [{"email": "你的告警接收邮箱@xxx.com"}],
      "subject": "{{essentials.alertRule}} - {{essentials.severity}} 告警触发"
    }
  ],
  "from": {"email": "你的告警发件邮箱@xxx.com"},
  "content": [
    {
      "type": "text/plain",
      "value": "App Service宕机告警详情:\n\n告警规则名称: {{essentials.alertRule}}\n告警级别: {{essentials.severity}}\n触发时间: {{essentials.startTime}}\n受影响的App Service: {{alertContext.resourceName}}\n检测指标: {{alertContext.condition.allOf[0].metricName}}\n当前指标值: {{alertContext.condition.allOf[0].metricValue}}\n告警阈值: {{alertContext.condition.allOf[0].threshold}}\n告警状态: {{essentials.monitorCondition}}\n\n告警ID: {{essentials.alertId}}\n资源ID: {{alertContext.resourceId}}"
    },
    {
      "type": "text/html",
      "value": "<h3>⚠️ {{essentials.alertRule}} - {{essentials.severity}} 告警触发</h3><p><strong>告警规则:</strong> {{essentials.alertRule}}</p><p><strong>告警级别:</strong> {{essentials.severity}}</p><p><strong>触发时间:</strong> {{essentials.startTime}}</p><p><strong>受影响App Service:</strong> {{alertContext.resourceName}}</p><p><strong>检测指标:</strong> {{alertContext.condition.allOf[0].metricName}}</p><p><strong>当前值:</strong> <span style='color:red;'>{{alertContext.condition.allOf[0].metricValue}}</span></p><p><strong>阈值:</strong> {{alertContext.condition.allOf[0].threshold}}</p><p><strong>状态:</strong> {{essentials.monitorCondition}}</p><p><strong>告警ID:</strong> {{essentials.alertId}}</p>"
    }
  ]
}

步骤3:验证和测试

配置完成后,用Azure Alert的「Test action」功能触发一次测试,检查接收邮箱里的邮件:

  • 所有{{}}包裹的变量都会被替换成实际的告警详情
  • 邮件内容会包含告警规则、级别、触发时间、App Service名称等所有你需要的动态信息

额外小贴士

  • 如果需要自定义额外字段,可以在告警规则的「Custom properties」里添加,然后用{{customProperties.你的字段名}}引用
  • 不确定Azure Alert的payload结构?可以先触发一次告警,在Azure的Alert日志里查看完整的Webhook payload内容,再调整模板变量

这样配置后,每次告警触发时,邮件都会自动带上所有动态详情,再也不用手动修改硬编码内容啦!

内容的提问来源于stack exchange,提问作者user8884899

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:57:33