AutoScaling(弹性伸缩) 报警任务迎来全新升级, 本次升级从监控范围, 监控方式, 监控响应速度等三个方面做出了全方位的优化, 升级后的 AutoScaling 报警任务将您提供一种更全面, 更可靠的利用报警任务动态管理 AutoScaling 伸缩组的方式.
本次的升级内容主要包括:
增加了对系统磁盘, 网卡, TCP 连接数等监控指标的报警任务支持.
报警任务最小统计周期升级到 1 分钟, 提供更灵敏的监控报警.
增加自定义监控, 为用户自有监控系统接入 AutoScaling 报警任务提供标准化方式.
AutoScaling 报警任务
AutoScaling 报警任务是 AutoScaling 与 云监控服务(CMS) 深度合作, 提供的一种动态管理伸缩组的方式, 类似于 AutoScaling 定时任务, AutoScaling 报警任务通过触发您指定的伸缩规则来执行伸缩活动, 达到调整伸缩组内实例个数的目的.
定时任务可以在您指定的时间执行您指定的伸缩规则, 当业务场景在时间上可预料时, 能够提前做出响应, 但是, 在面对突发或者时间上不可预料的业务场景时, 定时任务就显得捉襟见肘, 此时, 就需要报警任务来提供更灵活的触发伸缩规则的方式, 在业务高峰期增加伸缩组内实例数量来缓解业务压力, 在业务低谷时释放伸缩组内实例, 减小生产成本.
报警任务通过监控特定的监控指标, 对数据指标进行实时的统计, 当统计值满足您指定的报警条件时, 触发报警, 执行您指定的伸缩规则. 使用报警任务, 您可以实时的根据业务的变化来不断调整伸缩组内的实例数量, 保证您监控的指标维持在您期望的范围内.
AutoScaling 系统监控报警任务
AutoScaling 系统监控报警任务的监控指标是云监控为用户采集的 ECS 实例的相关数据指标, 比如 CPU, 负载等. 用户在 AutoScaling 中设置的系统监控的报警任务是以伸缩组作为监控粒度的, 即以伸缩组内的所有实例的监控指标的统计平均值作为伸缩组的指标值, 当伸缩组内实例数量发生变化时, 监控指标也会同时进行更新.
支持的监控指标
AutoScaling 系统监控报警任务目前支持的监控项, 其中红色字体代表本次升级新增支持的监控项:
监控项 | 单位 |
---|---|
CPU | % |
内存 | % |
系统平均负载 | 无 |
内网出流量 | KB/min |
内网入流量 | KB/min |
外网出流量 | KB/min |
外网入流量 | KB/min |
系统盘写 bps | Byte/s |
系统盘读 bps | Byte/s |
系统盘写 iops | 个 / s |
系统盘读 iops | 个 / s |
外网网卡发包数(经典网络) | 个 / s |
外网网卡收包数(经典网络) | 个 / s |
内网网卡发包数 | 个 / s |
内网网卡收包数 | 个 / s |
TCP 总连接数 | 个 |
TCP 已建立连接数 | 个 |
注意事项
AutoScaling 伸缩组在同一时刻只能执行一个伸缩活动, 当伸缩组内存在正在执行的伸缩活动是, 由报警任务触发伸缩规则产生的伸缩活动将被拒绝.
AutoScaling 报警任务在触发伸缩规则时受伸缩规则冷却时间影响, 伸缩规则在冷却时间内时, 将拒绝执行伸缩规则. 伸缩组内新增加的 ECS 实例从加入伸缩组到完成系统启动配置, 部署用户业务, 获取到监控数据需要一定的时间(通常需要几分钟), 因此您应该根据具体的业务场景, 设置合适的冷却时间, 防止在新增实例的监控数据缺失的这段时间中, 重复触发伸缩规则.
AutoScaling 报警任务, 默认设置了一分钟的沉默时间, 即触发报警之后, 一分钟内不会再次触发伸缩规则.
部分系统监控项 (内存, 负载, 网卡发包数, TCP 连接数) 指标的采集需要为您安装云监控客户端. 默认情况下, 当您针对需要云监控客户端采集的监控项设置报警任务时, 将为报警任务关联的伸缩组内的所有实例安装云监控客户端, 同时, 将为您在云监控控制台开启
新购 ECS 自动安装云监控
, 为您所有新购的 ECS 实例安装云监控客户端.
AutoScaling 自定义监控项报警任务
AutoScaling 自定义监控项报警任务的监控对象为用户自主上报到云监控中的监控指标. 在一些场景下, 系统监控项可能不包含您所需要的监控指标, 您可能拥有自己的一套监控系统, 并且关心的是与您特定业务相关的某些指标, 自定义监控报警任务, 为您自有的监控系统, 或者与业务相关的自有监控指标提供了设置报警任务的接入点.
AutoScaling 自定义监控报警任务是针对阿里云云监控服务的自定义监控项设置报警的, 用户在使用 AutoScaling 自定义监控报警任务之前需要首先向云监控上报自定义监控数据, 即自定义监控项. 云监控自定义监控是提供给用户自由定义监控项及报警规则的一项服务, 通过此服务, 用户可以针对自己关心的业务指标进行监控, 将采集到监控数据上报至云监控, 由云监控来进行数据的处理, 并可以对其设置报警规则.
上报监控数据到云监控
云监控的自定义监控服务为您提供了上报监控数据的方式, 您可以将自己采集到的时序数据上报到云监控, 这样的数据称作时间序列. 云监控提供了 OpenAPI,Java SDK 和阿里云命令行工具(CLI) 三种方式上报数据, 这里我们将主要关注如何使用 Java SDK 的方式上报监控数据. 更多详细的信息您可以查看文档 上报监控数据 .
使用 Java sdk 之前您需要首先在项目中引入相应的 jar 包, 如果您使用 maven 管理项目, 您只需要在项目中加入以下依赖:
- <dependency>
- <groupId>com.aliyun</groupId>
- <artifactId>aliyun-java-sdk-core</artifactId>
- <version>3.2.6</version>
- </dependency>
- <dependency>
- <groupId>com.aliyun.openservices</groupId>
- <artifactId>aliyun-cms</artifactId>
- <version>0.2.4</version>
- </dependency>
您可以按照如下的方式向云监控上报自定义监控项:
- static String endPoint = "https://metrichub-cms-cn-hangzhou.aliyuncs.com";
- CMSClient cmsClient = new CMSClient(endPoint, accAutoScalingKey, accAutoScalingSecret);
- CustomMetricUploadRequest request = CustomMetricUploadRequest.builder()
- .append(CustomMetric.builder()
- .setMetricName("myCustomMetric")// 自定义指标名
- .setGroupId(54504L)// 设置分组 id
- .setTime(new Date())// 时间
- .setType(CustomMetric.TYPE_VALUE)// 类型为原始值,
- .appendValue(MetricAttribute.VALUE, number)// 原始值, key 只能为这个
- .appendDimension("key1", "value1")// 添加维度
- .appendDimension("key2","value2")
- .build())
- .build();
- CustomMetricUploadResponse response = cmsClient.putCustomMetric(request);// 上报
在上述的代码片段中, 我们上报了一个数据点到云监控. 上报时, 必须指定 groupId 参数, 即云监控应用分组 id, 该分组 id 可以是您在云监控中已创建的应用分组, 也可以是一个不存在的应用分组. 您可以在 云监控应用分组 创建和查看应用应用分组信息. 您上报的自定义监控项(时间序列), 可以在云监控控制的 自定义监控 中查看.
我们建议您向一个 云监控中已经存在的应用分组中推送自定义监控数据, 云监控的应用分组是针对多种云产品的逻辑分组, 向一个已存在的应用分组推送自定义监控数据将使您在需要使用云监控等相关功能时保留扩展的能力. 当然, 您也可以完全不必理会应用分组的概念, 选择向任意一个分组 id 推送数据.
您上报到云监控的监控数据, 云监控会自动帮您进行聚合, 当然, 当您需要推送的数据量太大时, 您也可以选择在本地聚合之后再推送到云监控. 详细信息可以参考 上报监控数据 .
需要注意, 云监控对用户上报监控数据设置了以下限制:
单云账号 QPS 限制为 100.
单次最多上报 100 条数据, body 最大为 256KB.
"metricName" 字段只支持字母, 数字, 下划线. 需要以字母开头, 非字母开头会替换为大写 "A", 非法字符替换为 "_".
"dimensions" 字段不支持 "=","&","," , 非法字符会被替换为 "_".
metricName 和 dimensions 的 Key-value 最大均为 64 字节, 超过 64 字节会被截断.
其他限制请关注计量计费说明.
最佳实践
在本文的最佳实践中将具体讲解 如何在 AutoScaling 控制台创建, 查看, 以及修改一条报警任务.
创建系统监控项报警任务
首先进入 AutoScaling 控制台, 选中报警任务侧边栏, 点击创建报警任务.
在弹出的创建报警任务对话框中, 我们选中监控类型为 系统监控, 设置任务名称, 描述等基本信息, 然后选择监控资源, 即报警任务监控的伸缩组, 选择监控项为 cpu(cpu 使用率), 统计周期选择 1 分钟, 表示将对每 1 分钟的监控数据进行统计检查, 判断是否满足报警条件. 统计办法我们选择了 平均值>=50%, 重复 3 次, 这表示, 当 cpu 的使用了在 1 分钟平均值超过阈值 50%, 并且连续 3 次满足统计办法时, 将发生报警. 报警触发规则为伸缩规则 add1, 表明在发生报警时, 将执行报警规则 add1, 为伸缩组增加 1 台机器.
创建自定义监控项报警任务
创建自定义监控项报警任务的过程和创建系统监控类似, 唯一的不同在于, 系统监控报警任务的监控项是由云监控为用户采集, 而自定义监控报警任务的监控项则需要用户自己上报至云监控.
在创建自定义监控类型的报警任务时, 首先需要存在已上报的自定义监控项, 即时间序列. 然后才能针对该时间序列设置报警规则.
在上图创建自定义报警任务之前, 已经向云监控推送了一条自定义监控数据流(时间序列). 该时间序列所属的应用分组为 54504, 监控项名称为 testMetric, 维度信息为 age=10.
查看监控项详情
在成功的创建完报警任务之后, 我们可以在报警任务列表看到我们刚刚创建的报警任务.
切换到自定义监控列表, 查看刚刚创建的自定义报警任务.
点击报警任务的名称, 将跳转到详情页, 在详情页您将看到报警任务对应监控项的历史数据.
修改报警任务
您可以在报警任务的列表页修改报警任务, 也可以进入报警任务的详情页修改报警规则.
修改报警任务分为两个部分, 一个是修改报警任务的基本信息, 另外一个是修改报警规则的触发规则.
修改基本信息包括修改任务名称, 监控项, 统计周期, 统计办法, 重复次数等, 我们不建议您修改报警任务的监控项, 因为, 修改监控项意味着监控不同的指标, 此时, 新建一条针对新指标的报警任务是更合适的方法.
写在最后
AutoScaling 报警任务为您提供了一种通过监控特定监控指标来动态调整伸缩组内实例数量的方法, 让您能够根据业务的变化实时的执行指定的伸缩规则, 调整伸缩组内的实例数量.
本次的 AutoScaling 报警任务的升级, 扩展了原有的监控指标, 并在原有监控项的基础上, 支持用户接入自定义的监控项, 提供定制化的报警任务, 大大增强了 AutoScaling 报警任务的可用性和实用性, 满足用户具体的, 多样化的需求.
来源: https://yq.aliyun.com/articles/599155