基于阿里云云监控的企业级监控平台构建-阿里云开发者社区

开发者社区> 阿里云MVP> 正文

基于阿里云云监控的企业级监控平台构建

简介: 随着阿里云云监控产品的日渐完善,基于云计算的IT资产监控越来越方便,结合已经开放的API和外部回调接口等功能,企业级客户的监控系统可以变得更加强大。传统需要在主机上装agent的监控体系,例如zabbix以及类似其他的商业软件都不再适用云IT资产,主要体现在: 除了ECS可以继续安装agent以外,类似云RDS,云Redis,MaxCompute等云产品根本没有提供这种agent数据采集的入口。

随着阿里云云监控产品的日渐完善,基于云计算的IT资产监控越来越方便,结合已经开放的API和外部回调接口等功能,企业级客户的监控系统可以变得更加强大。传统需要在主机上装agent的监控体系,例如zabbix以及类似其他的商业软件都不再适用云IT资产,主要体现在:

  1. 除了ECS可以继续安装agent以外,类似云RDS,云Redis,MaxCompute等云产品根本没有提供这种agent数据采集的入口。
  2. 云平台的系统事件,例如RDS主机发生了主备切换这些事件,只有云平台本身才会感知,除非集成云平台本身的API,任何外部监控体系没法探测到这些事件。

所以当企业客户的IT资产逐步云化的过程中,至少Iaas层面的监控体系必须依赖于云平台本身的监控体系来做,这不仅仅限于阿里云的云监控,AWS用户中CloudWatch也一样成为了第一选择,大量的商业监控Saas工具围绕云平台本身的监控数据来做,这也是阿里云喊着“被集成”的最好案例。 本文结合阿里云云监控现有功能,以RDS for MySQL为例,列出了在控制台,API以及和自有监控体系对接的最佳实践。

1.基础实践

云监控中RDS 监控频率设置

云监控关于RDS的监控频率分为三档: 5 秒/次 60 秒/次 300 秒/次

· 基础版及内存小于8G的数据库实例不支持5 秒/次的采集频率。

· 默认为5分钟一次

· 修改为1分钟一次

RDS开通1分钟监控频率的实例检测

image001

配置告警规则

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 初始化告警规则明细

image002

这样报警规则生成后,监控和报警就会按照正常的设定进入到报警阶段,监控数据会在报警规则触发后发送到相应的告警联系人。

2.进阶实践

结合云监控中应用分组,告警模板,告警联系人等功能可以做更多高阶功能的使用,如下图所示

image003

步骤概览

  1. 新增告警联系人中的电话和邮件需要验证码,钉钉机器人可以不配置;
  2. 默认会有一个报警联系组:组名为阿里云主账号;联系人为主账号中填写的人和电话;
  3. 创建应用分组时可以将相同业务的云资源分配到一个组,例如生产环境、测试环境、开发环境;
  4. 当服务器和其他云产品实例非常多时,首先建议按照业务视角为资源创建不同的应用分组,然后通过应用分组来批量管理资源;
  5. 目前告警模板中支持“同比环比”的一些方法;
  6. 报警模板说明

ü 报警模板只能和应用分组配合使用,即报警模板只能使用在资源范围为应用分组的报警规则上。

ü 每个云账号最多能创建100个模板。

ü 每个模板最多包含30个监控项。

ü 报警模板只是创建报警规则的快捷方式,报警模板和报警规则不是一一绑定的关系,即修改报警模板后通过报警模板生成的规则不会被修改。

ü 如果需要批量修改分组的规则,需要将修改后的模板重新应用到分组上。

添加告警联系人

image004

配置告警组

image005

image006

创建应用分组

image007

image008

包含了“事件告警”,针对RDS,有如下RDS系统事件:

事件名称 事件含义 事件状态 事件等级
Instance_Failover 实例主备切换 Executed WARN
Instance_Failure_Start 实例故障开始 Executing CRITICAL
Instance_Failure_End 实例故障结束 Executed CRITICAL

image009

配置报警模板

可以在一个模板上添加多个云产品的告警规则;此处我选择分产品创建模板,方便各云产品负责人维护更新对应模板。

image010

image011
image012

告警表达式包括以下:
image013
image014

除了普通的数值对比外,增加了“同比环比”。

image015
image016
image017
image018
image019

3.API生成模板实践

上述实践中的实施都是基于控制台的手动配置,结合云监控已有的API借口,可以把这些配置规则全部脚本化,方便批量部署,结构如下

image020

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添加联系人时,同时添加联系人的邮件或手机,阿里会发送邮件或短信给联系人进行确认。此处与控制台配置的验证方式不同。

image021

报警联系人组

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监控体系做深度结合,把中间件,日志,容器等对象的监控指标和图形展示结合,构建完整统一的监控平台。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
+ 订阅

阿里云最有价值专家,是专注于帮助他人充分了解和使用阿里云技术的意见领袖。

官方博客
官网链接
精彩专题