如何为Azure Web App配置秒级健康检查及异常通知?
为ASP.NET Core Azure Web App配置秒级健康检查及异常通知
一、先确认ASP.NET Core健康检查端点有效性
确保你的/healthcheck端点已正确配置数据库连通性检测,示例配置代码如下(Program.cs):
builder.Services.AddHealthChecks() .AddSqlServer(builder.Configuration.GetConnectionString("YourDbConnection")); app.MapHealthChecks("/healthcheck", new HealthCheckOptions { ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse });
部署后访问https://<your-app-name>.azurewebsites.net/healthcheck验证:数据库正常时返回200状态码,异常时返回5xx状态码。
二、实现秒级健康检查+异常通知
Azure原生健康检查最小间隔为1分钟,无法满足秒级需求,以下是两种可行的自定义实现方案:
方案1:Azure Functions定时触发+端点调用+邮件通知
通过定时触发的Azure Functions实现秒级频率的端点检测,异常时发送邮件:
- 创建定时触发的Azure Function
- 选择定时器触发类型,设置CRON表达式为
*/10 * * * * *(每10秒执行一次,可根据需求调整) - 编写Function代码调用健康检查端点并判断状态:
public static async Task Run([TimerTrigger("*/10 * * * * *")]TimerInfo myTimer, ILogger log) { using var httpClient = new HttpClient(); var response = await httpClient.GetAsync("https://<your-app-name>.azurewebsites.net/healthcheck"); if (!response.IsSuccessStatusCode) { await SendAlertEmail(); } } private static async Task SendAlertEmail() { // 使用Azure SendGrid发送邮件(需先配置SendGrid API密钥) var client = new SendGridClient("<your-sendgrid-api-key>"); var msg = new SendGridMessage() { From = new EmailAddress("alerts@yourdomain.com", "Web App健康警报"), Subject = "Web App数据库健康检查失败", PlainTextContent = "/healthcheck端点返回错误,数据库连通性可能中断,请及时排查。" }; msg.AddTo(new EmailAddress("your-email@domain.com")); await client.SendEmailAsync(msg); }
- 选择定时器触发类型,设置CRON表达式为
- 配置通知服务
- 启用Azure SendGrid服务,获取API密钥后替换代码中的占位符,也可改用自定义SMTP服务器实现邮件发送。
方案2:Azure Monitor自定义日志警报(准秒级)
利用Web App请求日志结合Azure Monitor实现接近秒级的异常检测:
- 开启Web App日志记录
- 在Azure Web App的「监控→日志」中,开启应用日志与HTTP日志,确保
/healthcheck的请求日志被同步到Azure Monitor日志。
- 在Azure Web App的「监控→日志」中,开启应用日志与HTTP日志,确保
- 创建自定义警报规则
- 进入Azure Monitor→「警报→创建警报规则」,选择目标Web App作为资源
- 条件选择「自定义日志搜索」,编写Kusto查询筛选失败请求:
AppRequests | where Uri contains "/healthcheck" | where ResultCode startswith "5" | count - 设置触发条件为「计数大于0」,检测间隔设为1分钟(Azure Monitor最小间隔)
- 在「操作组」中添加邮件通知,配置收件邮箱,触发时自动发送警报邮件。
三、Azure原生健康检查(分钟级场景适用)
若可接受分钟级检测频率(最小1分钟),可直接使用Azure自带功能:
- 在Web App的「监控→健康检查」中开启服务,输入
/healthcheck作为检查路径 - 配置失败阈值(如连续3次失败触发),再创建基于健康检查状态的警报规则,添加邮件通知操作组。
内容的提问来源于stack exchange,提问作者Ruby Rain
相关产品推荐
相关产品推荐

