如何为Azure应用网关不健康后端创建含错误详情的告警邮件
解决方案:Azure应用网关不健康后端带错误详情的告警邮件
方案一:Azure Monitor告警 + 逻辑应用/自动化Runbook(调用Azure CLI)
- 保留Azure Monitor的「Application Gateway Unhealthy Host Count」告警规则,将动作组配置为触发逻辑应用或Azure自动化账户的Runbook
- 在自动化Runbook/逻辑应用中执行Azure CLI命令获取完整健康探测日志,整理后发送邮件:
- 创建自动化账户(或逻辑应用),配置Azure CLI权限
- 编写执行逻辑:
- 接收告警传递的应用网关名称、资源组参数
- 执行命令:
az network application-gateway show-backend-health --resource-group <资源组名> --name <网关名> - 解析返回的JSON数据,提取不健康服务器的
address、health、healthProbeLog字段 - 构建邮件内容,示例:
应用网关后端服务器异常通知:
- 服务器地址:10.0.0.5
健康状态:Unhealthy
错误详情:Probe failed with status code 503 - 服务器地址:10.0.0.6
健康状态:Unhealthy
错误详情:Connection timed out
- 服务器地址:10.0.0.5
- 调用邮件发送服务(如Office 365连接器)发送给应用团队
方案二:改进PowerShell脚本获取完整健康数据
之前的PowerShell命令因过度过滤丢失了HealthProbeLog字段,调整脚本即可获取错误详情:
$gatewayName = "xxx" $resourceGroupName = "xxx" $backendHealth = Get-AzApplicationGatewayBackendHealth -Name $gatewayName -ResourceGroupName $resourceGroupName $unhealthyServers = foreach ($pool in $backendHealth.BackendAddressPools) { foreach ($setting in $pool.BackendHttpSettingsCollection) { $setting.Servers | Where-Object Health -eq "Unhealthy" | Select-Object Address, Health, HealthProbeLog } } # 后续可将$unhealthyServers整理为邮件内容,发送给相关团队
将此脚本集成到Azure自动化Runbook,关联Azure Monitor告警触发,即可自动发送带错误详情的邮件。
方案三:Log Analytics自定义告警
- 启用应用网关诊断日志,将
ApplicationGatewayProbeHealthStatus日志发送到Log Analytics工作区 - 创建Log Analytics查询筛选异常记录:
AzureDiagnostics | where ResourceType == "APPLICATIONGATEWAYS" and OperationName == "ApplicationGatewayProbeHealthStatus" | where status_s == "Unhealthy" | project 时间=TimeGenerated, 后端池=backendPoolName_s, 服务器地址=backendAddress_s, 探测结果=probeResult_s, 错误详情=errorMessage_s - 基于该查询创建Azure Monitor告警,在动作组中配置邮件通知,将查询结果作为邮件附件或正文发送。
内容的提问来源于stack exchange,提问作者CharismaticDevelop
相关产品推荐
相关产品推荐

