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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 随着阿里云云监控产品的日渐完善,基于云计算的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监控体系做深度结合,把中间件,日志,容器等对象的监控指标和图形展示结合,构建完整统一的监控平台。

相关实践学习
基于云监控实现的监控系统
通过阿里云云监控功能给非阿里云主机安装监控插件,从而实现对非阿里云主机的各项指标进行监控和管理,在配置报警规则和报警人的情况下,能对特定的场景做出报警反应通知到报警人的手机上。
目录
相关文章
|
7月前
|
弹性计算 监控 数据安全/隐私保护
阿里云ECS云监控界面
阿里云ECS云监控界面
1052 2
|
5月前
|
存储 传感器 监控
云监控:引领未来监控技术的新篇章
传统监控系统需要投入大量的人力物力进行建设和维护,而云监控则通过云计算平台的按需付费特性降低了建设和维护成本。用户只需根据实际需求购买相应的服务和资源即可实现监控功能,无需担心设备升级、维护等问题。
|
7月前
|
弹性计算 监控 安全
【阿里云弹性计算】ECS实例监控与告警系统构建:利用阿里云监控服务保障稳定性
【5月更文挑战第23天】在数字化时代,阿里云弹性计算服务(ECS)为业务连续性提供保障。通过阿里云监控服务,用户可实时监控ECS实例的CPU、内存、磁盘I/O和网络流量等指标。启用监控,创建自定义视图集中显示关键指标,并设置告警规则(如CPU使用率超80%),结合多种通知方式确保及时响应。定期维护和优化告警策略,利用健康诊断工具,能提升服务高可用性和稳定性,确保云服务的卓越性能。
268 1
|
弹性计算 运维 监控
基于云监控实现的监控系统
通过阿里云云监控功能给非阿里云主机安装监控插件,从而实现对非阿里云主机的各项指标进行监控和管理,在配置报警规则和报警人的情况下,能对特定的场景做出报警反应通知到报警人的手机上。
|
SQL 消息中间件 分布式计算
基于阿里云 CloudMonitor云监控自定义监控大盘对 EMR 自定义监控实践
本文旨在分享 EMR 平台大数据服务基于阿里云 CloudMonitor 的监控实践,给客户提供除了 EMR 平台默认监控以外,自建监控方式,适用于统一多个阿里云服务的监控监控场景。
837 2
基于阿里云 CloudMonitor云监控自定义监控大盘对 EMR 自定义监控实践
|
弹性计算 监控 应用服务中间件
云监控之自定义监控
云监控之自定义监控
|
数据采集 Prometheus 监控
使用云监控来监控线下IDC(及其它云)的Mongodb,Redis,Mysql等中间件
背景当前很多用户的服务部署在混合环境中,比如同时使用多个云厂商,或者云加线下IDC等。而对于线下IDC的监控主要是使用开源的系统来自建。带来的问题就是需要花费较大精力来维护自建监控系统并且和云上的监控数据也无法打通。针对这种混合云环境,云监控推出了企业版监控服务,可以实现在阿里云上对下线IDC或其它云服务上部署的中间件进行监控。线下IDC中间件监控实现在云监控上对下线IDC的中间件进行监控,主要实
636 10
使用云监控来监控线下IDC(及其它云)的Mongodb,Redis,Mysql等中间件
|
弹性计算 Prometheus 运维
【数据可观测】阿里云的Grafana云监控大盘服务
阿里云发布的grafana托管服务,更是为云上的资产提供了高效的监控数据可观测能力。阿里云grafana弹性、免运维,可以方便的对接云上云下的各种数据源。
2397 1
【数据可观测】阿里云的Grafana云监控大盘服务
|
监控 负载均衡 网络协议
云监控-主机监控功能介绍|学习笔记
快速学习云监控-主机监控功能介绍
262 0
云监控-主机监控功能介绍|学习笔记
|
弹性计算 监控 开发者
云监控-创建 Dashboard 监控大盘|学习笔记
快速学习云监控-创建 Dashboard 监控大盘
236 0
云监控-创建 Dashboard 监控大盘|学习笔记