随着阿里云云监控产品的日渐完善,基于云计算的IT资产监控越来越方便,结合已经开放的API和外部回调接口等功能,企业级客户的监控系统可以变得更加强大。传统需要在主机上装agent的监控体系,例如zabbix以及类似其他的商业软件都不再适用云IT资产,主要体现在:
- 除了ECS可以继续安装agent以外,类似云RDS,云Redis,MaxCompute等云产品根本没有提供这种agent数据采集的入口。
- 云平台的系统事件,例如RDS主机发生了主备切换这些事件,只有云平台本身才会感知,除非集成云平台本身的API,任何外部监控体系没法探测到这些事件。
所以当企业客户的IT资产逐步云化的过程中,至少Iaas层面的监控体系必须依赖于云平台本身的监控体系来做,这不仅仅限于阿里云的云监控,AWS用户中CloudWatch也一样成为了第一选择,大量的商业监控Saas工具围绕云平台本身的监控数据来做,这也是阿里云喊着“被集成”的最好案例。 本文结合阿里云云监控现有功能,以RDS for MySQL为例,列出了在控制台,API以及和自有监控体系对接的最佳实践。
1.基础实践
云监控中RDS 监控频率设置
云监控关于RDS的监控频率分为三档: 5 秒/次 60 秒/次 300 秒/次
· 基础版及内存小于8G的数据库实例不支持5 秒/次的采集频率。
· 默认为5分钟一次
· 修改为1分钟一次
RDS开通1分钟监控频率的实例检测
配置告警规则
NO. | 规则名称 | 报警规则 | 备注 |
---|---|---|---|
1 | 连接数使用率 | 连接数使用率 >=80% Warn 连续3次就报警 | |
2 | 只读实例延迟 | 只读实例延迟 >=5 秒 Warn 连续3次就报警 | 基础版除外,配置了也不生效 |
3 | IOPS使用率 | IOPS使用率 >=80% Warn 连续3次就报警 | |
4 | CPU使用率 | CPU使用率 >=80% Warn 连续3次就报警 | |
5 | 磁盘使用率 | 磁盘使用率 >=80% Warn 连续3次就报警 |
RDS 初始化告警规则明细
这样报警规则生成后,监控和报警就会按照正常的设定进入到报警阶段,监控数据会在报警规则触发后发送到相应的告警联系人。
2.进阶实践
结合云监控中应用分组,告警模板,告警联系人等功能可以做更多高阶功能的使用,如下图所示
步骤概览
- 新增告警联系人中的电话和邮件需要验证码,钉钉机器人可以不配置;
- 默认会有一个报警联系组:组名为阿里云主账号;联系人为主账号中填写的人和电话;
- 创建应用分组时可以将相同业务的云资源分配到一个组,例如生产环境、测试环境、开发环境;
- 当服务器和其他云产品实例非常多时,首先建议按照业务视角为资源创建不同的应用分组,然后通过应用分组来批量管理资源;
- 目前告警模板中支持“同比环比”的一些方法;
- 报警模板说明
ü 报警模板只能和应用分组配合使用,即报警模板只能使用在资源范围为应用分组的报警规则上。
ü 每个云账号最多能创建100个模板。
ü 每个模板最多包含30个监控项。
ü 报警模板只是创建报警规则的快捷方式,报警模板和报警规则不是一一绑定的关系,即修改报警模板后通过报警模板生成的规则不会被修改。
ü 如果需要批量修改分组的规则,需要将修改后的模板重新应用到分组上。
添加告警联系人
配置告警组
创建应用分组
包含了“事件告警”,针对RDS,有如下RDS系统事件:
事件名称 | 事件含义 | 事件状态 | 事件等级 |
---|---|---|---|
Instance_Failover | 实例主备切换 | Executed | WARN |
Instance_Failure_Start | 实例故障开始 | Executing | CRITICAL |
Instance_Failure_End | 实例故障结束 | Executed | CRITICAL |
配置报警模板
可以在一个模板上添加多个云产品的告警规则;此处我选择分产品创建模板,方便各云产品负责人维护更新对应模板。
告警表达式包括以下:
除了普通的数值对比外,增加了“同比环比”。
3.API生成模板实践
上述实践中的实施都是基于控制台的手动配置,结合云监控已有的API借口,可以把这些配置规则全部脚本化,方便批量部署,结构如下
No. | Action | CMS API | URL |
---|---|---|---|
1 | 添加告警联系人 | PutContact | 创建或者修改报警联系人信息 |
2 | 配置告警组 | PutContactGroup | 创建或者修改报警联系人组 |
3 | 创建应用分组 | CreateMonitorGroup | 创建一个应用分组 |
CreateMonitorGroupInstances | 添加资源到应用分组 | ||
4 | 配置报警模板 | CreateMetricRuleTemplate | 创建报警规则模板 |
5 | 应用模板生效 | ApplyMetricRuleTemplate | 将报警模板应用到分组,生成报警规则 |
需要提前准备的数据清单:
报警联系人
ContactName | String | 报警联系人姓名 |
---|---|---|
Describe | String | 描述 |
Channels.SMS | String | 电话 |
Channels.Mail | String | Email地址 |
Channels.DingWebHook | String | 钉钉机器人Webhook |
Channels.AliIM | String | 旺旺联系方式 |
示范数据 展开源码
{
"Contacts": {
"Contact": [
{
"Channels": {
"DingWebHook": "https://oapi.dingtalk.com/robot/send?access_token=***",
"Mail": "test1@cloudcare.cn",
"SMS": "186****3996"
},
"Name": "test1",
"Desc": "test1"
},
{
"Channels": {
"DingWebHook": "https://oapi.dingtalk.com/robot/send?access_token=98d8ca511f903cdce23c6ba77559e5ef4316a621b19e7698f572f551ae102ffd",
"Mail": "test2@cloudcare.cn",
"SMS": "186****3090"
},
"Name": "test2",
"Desc": "test2"
}
]
}
}
如果API添加联系人时,同时添加联系人的邮件或手机,阿里会发送邮件或短信给联系人进行确认。此处与控制台配置的验证方式不同。
报警联系人组
ContactGroupName | String | 报警联系组的名称。 |
---|---|---|
ContactNames.N | RepeatList | 报警联系人名称。N的取值范围为 1~100。 |
Describe | String | 报警联系组描述信息。 |
示范数据 展开源码
{
"ContactGroupName": "Test",
"Describe": "测试",
"ContactNames": ["test1", "test2"]
}
应用分组名
GroupName | String | 应用分组名称。 |
---|---|---|
ContactGroups | String | 报警联系人组。应用分组的报警通知会发送给此处指定的报警联系人组 |
示范数据 展开源码
{
"GroupName": "生产A",
"ContactGroups": "TestGroup,云账号报警联系人"
}
应用分组资源明细
GroupId | Long | 应用分组ID。 |
---|---|---|
Instances.N.Category | String | 资源实例所属的云产品名或者产品的规格 目前支持的产品有: 展开源码 ECS(包括阿里云和非阿里云主机), `RDS(云数据库RDS版),ADS(分析型数据库), SLB(负载均衡),VPC(弹性IP), APIGATEWAY(API网关),CDN, CS(容器服务Swarm版),DCDN(全站加速), DDOS,EIP(弹性公网IP), ELASTICSEARCH,EMR(E-MapReduce), ESS(弹性伸缩),HBASE, IOT_EDGE(iot边缘计算),K8S_POD(k8s pod), KVSTORE_SHARDING(Redis集群版),KVSTORE_SPLITRW(Redis读写分离版), KVSTORE_STANDARD(Redis标准版),MEMCACHE, MNS(消息服务),MONGODB(MongoDB 副本实例), MONGODB_CLUSTER(MongoDB集群版本),MONGODB_SHARDING(MongoDB分片集群), MQ_TOPIC(消息服务TOPIC),OCS(旧版云数据库Memcache), OPENSEARCH(开放搜索),OSS(对象存储OSS), POLARDB,PETADATA(HybridDB for MySQL), SCDN(安全加速),SHAREBANDWIDTHPACKAGES(共享带宽包), SLS(日志服务),`VPN(VPN网关)。 |
Instances.N.InstanceId | String | 资源实例ID。 |
Instances.N.InstanceName | String | 实例名称。 |
Instances.N.RegionId | String | 实例所在的RegionId,例如cn-hangzhou。 |
示范数据 展开源码
{
"Resource": [
{
"Category": "ECS",
"InstanceId": "i-uf669udf3ficd8huv1q3",
"RegionId": "cn-shanghai",
"InstanceName": "财务人工管理系统FMS"
},
{
"Category": "RDS",
"InstanceId": "rm-uf66dbs496flz4118",
"RegionId": "cn-shanghai",
}
]
}
报警规则
报警规则 example 展开源码
{
"Resource": {
"Name": "生产数据库模版v.19.05.28.01",
"Description": "针对生产环境的数据库自定义的监控模板",
"AlertTemplates": {
"AlertTemplate": [
{
"Category": "rds",
"MetricName": "ConnectionUsage",
"Namespace": "acs_rds_dashboard",
"Selector": {},
"RuleName": "连接数使用率",
"Escalations": {
"Critical": {
"Statistics": "Average",
"Threshold": "90",
"Times": 3,
"ComparisonOperator": "GreaterThanOrEqualToThreshold"
},
"Info": {
"Statistics": "Average",
"Threshold": "70",
"Times": 3,
"ComparisonOperator": "GreaterThanOrEqualToThreshold"
},
"Warn": {
"Statistics": "Average",
"Threshold": "80",
"Times": 3,
"ComparisonOperator": "GreaterThanOrEqualToThreshold"
}
}
},
{
"Category": "rds",
"MetricName": "DiskUsage",
"Namespace": "acs_rds_dashboard",
"Selector": {},
"RuleName": "磁盘使用率",
"Escalations": {
"Critical": {
"Statistics": "Average",
"Threshold": "90",
"Times": 3,
"ComparisonOperator": "GreaterThanOrEqualToThreshold"
},
"Info": {
"Statistics": "Average",
"Threshold": "70",
"Times": 3,
"ComparisonOperator": "GreaterThanOrEqualToThreshold"
},
"Warn": {
"Statistics": "Average",
"Threshold": "80",
"Times": 3,
"ComparisonOperator": "GreaterThanOrEqualToThreshold"
}
}
}
]
}
}
}
应用模板生效
GroupId | Long | 应用分组ID。 |
---|---|---|
TemplateIds | String | 报警模板的ID。 |
ApplyMode | String | o GROUP_INSTANCE_FIRST:实例分组优先, 即应用报警模板的时候,以分组实例优先,如果分组中不存在这种实例则忽略模板中的规则。 o ALARM_TEMPLATE_FIRST:模板实例优先,即应用报警模板的时候,不管分组中是否存在这种实例,都创建出这种规则。 |
EnableEndTime | Long | 报警生效的结束时间周期, 选值为00-23,表示00:59 到23:59。 |
EnableStartTime | Long | 报警生效的起始时间周期, 选值为00-23,表示00:00 到23:00。 |
SilenceTime | Long | 通道沉默周期,单位为秒。默认86400秒(1天)。监控数据持续超过报警规则阈值时,每个沉默周期内只发送1次报警通知。 |
Webhook | String | 报警发生时会回调指定的URL地址。向URL发送POST请求。 |
示范数据 展开源码
{
"SilenceTime": 86400,
"EnableStartTime": 00,
"EnableEndTime": 23,
"ApplyMode": "GROUP_INSTANCE_FIRST",
"Webhook": "https://oapi.dingtalk.com/robot/send?access_token=98d8ca511f903cdce23c6ba77559e5ef4316a621b19e7698f572f551ae102ffd",
"TemplateIds": "139182,139185",
"GroupId": 5217650
}
报警结果验证
返回数据格式 展开源码
{
"Resource": {
"AlertResults": [
{
"RuleId": "applyTemplate0fb2127a-98df-4cf6-b563-22f19d16ced6",
"Success": true,
"RuleName": "连接数使用率",
"Code": 200,
"GroupId": 5217650
},
{
"RuleId": "applyTemplate06d81824-e95d-4d94-839a-a9d32f35e8a8",
"Success": true,
"RuleName": "CPU使用率",
"Code": 200,
"GroupId": 5217650
}
],
"GroupId": 5217650
},
"RequestId": "1E754CA9-932C-4859-B814-69E7460508BA",
"Success": true,
"Code": 200
}
以上是基于RDS的阿里云云监控最佳实践,其他阿里云产品监控体系都可以围绕云监控展开。此外,云监控的数据展现和告警可以和企业自有的IT监控体系做深度结合,把中间件,日志,容器等对象的监控指标和图形展示结合,构建完整统一的监控平台。