多Azure SQL数据库(v12)的指标监控与告警最佳方案问询
针对Azure中批量数据库的监控与告警最佳实践
针对数百个Azure数据库批量配置监控告警,确实手动逐个设置太折腾了,结合你用ARM创建数据库的背景,这里有几个高效的方案,按实用性和可维护性排序:
1. 订阅/资源组级别告警规则(最推荐)
这是批量覆盖现有和未来数据库最简单的方式,不需要逐个配置:
- 打开Azure Monitor,新建告警规则
- 范围选择你的目标订阅或特定资源组(如果数据库都集中在几个资源组里)
- 条件部分:
- 选择“信号类型”为
指标 - 筛选资源类型为你的数据库类型(比如
Microsoft.Sql/servers/databases对应Azure SQL DB) - 选择对应的监控指标:比如Azure SQL DB选
Storage Used,单位是字节,设置阈值为10737418240(即10GB) - 配置评估频率和窗口(比如每5分钟评估一次,看过去5分钟的平均值)
- 选择“信号类型”为
- 动作组:复用一个预先配置好的动作组(包含邮件、短信、逻辑应用通知等),避免重复设置
- 保存规则后,所有符合筛选条件的数据库(包括后续新创建的)都会自动纳入监控,触发阈值时就会告警
2. ARM模板批量部署告警规则
既然你的数据库是用ARM创建的,完全可以扩展ARM模板来批量部署告警规则:
- 编写一个ARM模板,参数化资源组、服务器名称、数据库名称列表等
- 使用模板中的
copy循环,遍历数据库列表,为每个数据库创建对应的告警规则资源(类型为Microsoft.Insights/metricAlerts) - 示例模板片段:
{ "type": "Microsoft.Insights/metricAlerts", "apiVersion": "2018-03-01", "name": "[concat('DBSizeAlert-', parameters('databaseNames')[copyIndex()])]", "copy": { "name": "dbAlertCopy", "count": "[length(parameters('databaseNames'))]" }, "properties": { "description": "Alert when database size exceeds 10GB", "severity": 2, "enabled": true, "scopes": [ "[resourceId('Microsoft.Sql/servers/databases', parameters('serverName'), parameters('databaseNames')[copyIndex()])]" ], "criteria": { "allOf": [ { "metricName": "Storage Used", "dimensions": [], "operator": "GreaterThan", "threshold": 10737418240, "timeAggregation": "Average" } ] }, "actions": [ { "actionGroupId": "[resourceId('Microsoft.Insights/actionGroups', parameters('actionGroupName'))]" } ] } } - 用Azure CLI或PowerShell部署这个模板,一次性完成所有数据库的告警配置
3. Azure Policy强制自动配置(覆盖未来新数据库)
如果希望所有新创建的数据库自动带上这个告警规则,同时补全现有数据库的配置,可以用Azure Policy的deployIfNotExists效果:
- 创建一个自定义Policy,定义规则:当创建
Microsoft.Sql/servers/databases类型资源时,检查是否存在对应的大小告警规则,如果不存在则自动部署 - 把Policy分配到目标订阅或资源组,系统会自动为现有符合条件的数据库补配告警,同时对新创建的数据库自动生效
注意事项
- 不同数据库类型的指标名称可能不同:比如Cosmos DB用
Storage Usage,Azure Database for PostgreSQL用Storage used,需要确认对应数据库的正确指标 - 阈值设置要注意单位:大部分存储指标用字节,所以10GB要转换成
10*1024*1024*1024即10737418240 - 动作组建议统一管理:创建一个全局的动作组,所有告警规则都指向它,方便后续修改通知方式
内容的提问来源于stack exchange,提问作者Dresse
相关产品推荐
相关产品推荐

