使用公式运算自定义目标追踪规则

更新时间:2025-03-18 03:57:10

在使用目标追踪的伸缩方式时,您可以通过公式运算组合多个企业云监控指标,创建自定义的目标追踪规则,以满足您实际的业务需求。

方案概述

方案优势

  • 支持公式运算。您可以通过公式运算,组合至多三个指标作为追踪的目标,更加灵活。

  • 支持更多的监控指标。该方案基于企业云监控实现,相比使用系统监控的目标追踪规则,该方案支持使用更多的监控指标实现目标追踪,关于企业云监控的更多信息,请参见企业云监控概览

使用流程

本方案基于伸缩组的目标追踪规则企业云监控实现,您可以参考以下流程完成自定义目标追踪规则。

  1. 设计目标追踪伸缩方案

    首先,您需要根据需求,调研需要用到的企业云监控的监控指标,设计目标追踪伸缩方案。

  2. 实现设计的伸缩方案。

    准备需要用到的企业云监控指标,并基于这些指标创建目标追踪规则,实现设计好的伸缩方案。

  3. 持续监控,优化方案。

    持续监控伸缩组的伸缩活动及追踪的指标变化,优化伸缩方案。

1. 设计目标追踪伸缩方案

首先,您需要根据需求,调研需要用到的企业云监控的监控指标,设计目标追踪伸缩方案。您可以参考以下示例设计方案。

企业云监控支持的监控指标,请参见附录1 云产品监控指标。为保证目标追踪的响应速度,请选择最小指标周期为60s的指标进行目标追踪。
指标计算结果应根据伸缩组中实例数量的变化按比例调整,确保在指标高于目标值时增加实例(扩容),而在指标低于目标值时减少实例(缩容)。

示例方案设计

本文以“基于MNS队列的活跃消息数量,动态调整伸缩组实例”的伸缩方案为例,具体方案说明如下。

  • 预计效果

    期望伸缩组平均每个实例均有3个消息需要排队处理,如果消息增多,则触发扩容,小于3则触发缩容。

  • 实现

    为实现该功能,需要准备两个指标:消息服务MNS队列的活跃消息数量(ActiveMessages)、伸缩组中运行的实例数(RunningInstanceCount),基于这两个指标的比值,设置目标追踪规则,目标值设置为3,即使两个指标的比值维持在3左右。即满足公式:

2. 实现设计的伸缩方案

2.1 准备目标追踪规则需要关注的企业云监控指标

如果您已经准备好企业云监控指标,可跳过该步骤。
使用该功能需要开通企业云监控。具体操作,请参见开通企业云监控

在创建目标追踪规则之前,需要先在企业云监控创建目标追踪规则需要关注的企业云监控指标,用于后续追踪该指标,操作步骤如下。

  1. 创建指标仓库。

    具体操作,请参见创建指标仓库

  2. 添加需要关注的指标。

    您可以根据实际需求,在步骤1中创建的指标仓库中,添加您需要关注的指标,具体操作,请参见管理数据接入任务

    说明

    为保证目标追踪的响应速度,请选择最小指标周期为60s的指标进行目标追踪。

示例方案所需指标

创建指标仓库ess-metrics-repo-test,并添加以下两个监控指标:

  • 消息服务 MNS活跃消息ActiveMessages)指标。

    image

  • 弹性伸缩运行实例数RunningInstanceCount)指标。

    image

2.2 基于企业云监控指标,创建目标追踪规则

在伸缩组中,创建追踪企业云监控指标的目标追踪规则,具体操作如下。

如果您未创建伸缩组,请先创建伸缩组,具体操作,请参见创建ECS伸缩组创建ECI伸缩组
重要

目标追踪伸缩规则支持缩容到0,请在创建目标追踪规则之前,根据实际需求设置伸缩组的组内最小实例数组内最大实例数,控制扩缩容的边界,防止方案设计问题导致服务不可用或费用超预算等问题。

  1. 进入待操作的伸缩组创建伸缩规则页。

    image

    进入伸缩规则页具体步骤

    1. 登录弹性伸缩控制台

    2. 在左侧导航栏中,单击伸缩组管理

    3. 在顶部菜单栏处,选择地域。

    4. 找到待操作的伸缩组,在对应操作列下,单击查看详情

    5. 在页面上方,单击伸缩规则与报警任务页签。

    6. 伸缩规则页签下,单击创建伸缩规则进入创建伸缩规则页。

  2. 在创建伸缩规则页面,具体配置项说明如下。

    配置项

    说明

    配置项

    说明

    伸缩规则类型

    选择目标追踪规则

    监控指标类型

    选择企业云监控

    监控指标仓库

    选择在步骤2.1中准备的指标仓库。

    监控指标描述

    选择在步骤2.1中准备的指标,以及需要监控的资源。

    指标计算表达式

    根据实际需求,输入表达式。支持+-*/以及()

    重要
    • 指标运算表达式最多支持三种不同指标参与运算。

    • 指标计算结果应根据伸缩组中实例数量的变化按比例调整,确保在指标高于目标值时增加实例(扩容),而在指标低于目标值时减少实例(缩容)。

    目标值

    指标计算表达式的目标值,目标追踪规则会将云监控指标运算后的结果值维持在目标值附近。

    实例预热时间

    单位为秒。处于预热状态的实例正常加入伸缩组,但是不会向云监控上报监控数据。动态计算需要扩缩容的实例数量时,处于预热状态的实例不计入现有实例数量,以免造成指标值波动。

    扩容报警触发的阈值次数

    创建目标追踪规则后,会自动创建报警任务。该参数指定自动创建的扩容报警任务触发报警时,所需连续满足阈值条件的次数。

    缩容报警触发的阈值次数

    创建目标追踪规则后,会自动创建报警任务。该参数指定自动创建的缩容报警任务触发报警时,所需连续满足阈值条件的次数。

    禁用缩容

    是否禁用缩容影响自动创建的报警任务的数量:

    • 如果禁用缩容,目标伸缩规则仅创建一个用于扩容的报警任务,因此不会从伸缩组移出ECS实例或ECI实例。

    • 如果允许缩容,目标伸缩规则会创建两个报警任务,一个用于扩容,一个用于缩容。

    示例方案所需关键配置说明

    配置项

    示例

    监控指标类型

    选择企业云监控

    监控指标仓库

    选择在步骤2.1中准备的指标仓库,即ess-metrics-repo-test。

    监控指标描述

    指标a:

    • 监控指标选择AliyunEss_RunningInstanceCount

    • 监控的资源选择当前伸缩组。

    指标b:

    • 监控指标选择AliyunMnsnew_ActiveMessages

    • 监控的资源选择需要监控的MNS队列。

    指标计算表达式

    输入b/a。表示平均每个实例需要处理的消息数。

    目标值

    输入3。表示期望平均每个实例有3个消息排队。

  3. 完成配置后单击确认按钮,完成目标追踪规则的创建。

3. 持续监控,优化方案

在您创建目标追踪规则之后,需要持续监控您的伸缩组是否按照您的预期运行。您可以结合指标运算值的监控信息及伸缩活动、伸缩组监控等信息,判断伸缩组是否按照您的预期执行。

相关操作

  • 查看目标追踪规则信息

    您可以在伸缩规则与报警任务 > 伸缩规则页签下,找到创建的目标追踪规则,单击伸缩规则ID可查看目标伸缩规则的信息。您可以点击已关联的报警任务,查看报警任务的监控信息。

    image

  • 监控指标运算值

    创建目标追踪规则后,会自动创建两个报警任务(企业云监控),您可以在伸缩规则与报警任务 > 报警任务 > 报警任务(企业云监控)页签下,找到对应的报警任务,单击报警任务ID进入报警任务详情页,查看监控指标计算值。

    image

    image

  • 查看伸缩活动

    伸缩活动页签下,查看伸缩组进行的伸缩活动日志。

    image

调用API创建基于企业云监控的目标追踪规则

您可以通过调用CreateScalingRule接口,创建基于企业云监控的目标追踪规则。核心参数说明及示例如下:

核心参数说明

参数名称

类型

说明

如何设置

RegionId

String

伸缩组地域ID。

设置为目标伸缩组所在地域。

ScalingGroupId

string

伸缩组ID。

设置为待修改伸缩组的ID。

ScalingRuleName

string

伸缩规则名称。

2~64 个英文或中文字符,以数字、大小写字母或中文开头,可包含数字、下划线(_)、连字符(-)或点号(.)。

同一用户账号同一地域同一伸缩组内伸缩规则名称唯一。

如果没有指定该参数,默认值为 ScalingRuleId 的值。

ScalingRuleType

string

伸缩规则类型。

实现目标追踪规则需设置为TargetTrackingScalingRule

DisableScaleIn

boolean

是否禁用缩容,仅适用于目标追踪规则。

  • true:禁用。

  • false:不禁用。

根据实际方案设置。

TargetValue

integer

目标值。

TargetValue 最多保留小数点后三位,且必须大于 0。

EstimatedInstanceWarmup

integer

实例预热时间。处于预热状态的 ECS 实例将正常的加入伸缩组,但是期间将不会向云监控上报监控数据。

动态计算需要扩缩容的 ECS 实例数量时,处于预热状态的实例不计入现有实例数量。

取值范围:0~86400,单位:秒。

默认值:300。

ScaleOutEvaluationCount

integer

创建目标追踪规则后,会自动创建报警任务。本参数用于指定对应的扩容报警任务触发报警时,所需连续满足阈值条件的次数。

默认值:3。

根据实际方案设置。

ScaleInEvaluationCount

integer

创建目标追踪规则后,会自动创建报警任务。本参数用于指定对应的缩容报警任务触发报警时,所需连续满足阈值条件的次数。

默认值:15。

根据实际方案设置。

MetricType

string

监控项类型。

实现基于企业云监控指标的目标追踪规则时需设置为hybrid,代表使用企业云监控作为监控指标。

HybridMonitorNamespace

string

企业云监控指标仓库 ID。

管理指标仓库,请参见管理指标仓库

根据实际方案设置。

HybridMetrics

array<object>

企业云监控指标设置。

企业云监控指标数组。

HybridMetrics子属性

Id

string

公制运算表达式中指标的引用 ID。

类似于声明一个变量,后续在设置公式时会引用该变量。

可以设置为a、b、c等。

MetricName

string

企业云监控指标仓库中的指标名称。

根据实际方案设置。

Statistic

string

指标的统计方式。

根据实际方案设置,取值范围:

  • Average:指定区间内所有点的平均值。

  • Minimum:指定区间内所有点的最小值。

  • Maximum:指定区间内所有点的最大值。

Expression

string

多个企业云监控指标的公制运算表达式,表达式的计算结果将用于触发扩缩容。

运算表达式需满足逆波兰表达式(RPN)规范,并且操作符只支持+ - * /

根据实际方案设置。

Dimensions

object

指标维度。用于指定指标监控的资源。

Dimensions子属性

DimensionKey

string

指标维度key。

根据实际方案设置。

DimensionValue

string

指标维度value。

根据实际方案设置。

调用示例

以调用API实现步骤1中设置的示例方案为例。

实现该方案,可以设置以下参数。

{
    "RegionId": "cn-hangzhou",
    "ScalingGroupId": "asg-bp1******",
    "ScalingRuleType": "TargetTrackingScalingRule",
    "ScalingRuleName": "TrackingQueueLength",
    "DisableScaleIn": false,
    "TargetValue": 3,
    "EstimatedInstanceWarmup": 300,
    "ScaleOutEvaluationCount": 3,
    "ScaleInEvaluationCount": 15,
    "MetricType": "hybrid",
    "HybridMonitorNamespace": "ess-metrics-repo-test",
    "HybridMetrics.1.Id": "a",
    "HybridMetrics.1.MetricName": "AliyunEss_RunningInstanceCount",
    "HybridMetrics.1.Statistic": "Average",
    "HybridMetrics.1.Dimensions.1.DimensionKey": "instanceId",
    "HybridMetrics.1.Dimensions.1.DimensionValue": "asg-bp1******",
    "HybridMetrics.2.Id": "b",
    "HybridMetrics.2.MetricName": "AliyunMnsnew_ActiveMessages",
    "HybridMetrics.2.Statistic": "Average",
    "HybridMetrics.2.Dimensions.1.DimensionKey": "region",
    "HybridMetrics.2.Dimensions.1.DimensionValue": "cn-hangzhou",
    "HybridMetrics.2.Dimensions.2.DimensionKey": "userId",
    "HybridMetrics.2.Dimensions.2.DimensionValue": "******",
    "HybridMetrics.2.Dimensions.3.DimensionKey": "queue",
    "HybridMetrics.2.Dimensions.3.DimensionValue": "test",
    "HybridMetrics.3.Id": "Expression",
    "HybridMetrics.3.Expression": "b/a"
}

核心JSON片段解读:

  • 声明一个变量a,值为ess-metrics-repo-test指标仓库中的AliyunEss_RunningInstanceCount指标值,且指定伸缩组IDasg-bp1******

    含义:IDasg-bp1******伸缩组中运行的实例数量。
    "HybridMetrics.1.Id": "a",
    "HybridMetrics.1.MetricName": "AliyunEss_RunningInstanceCount",
    "HybridMetrics.1.Statistic": "Average",
    "HybridMetrics.1.Dimensions.1.DimensionKey": "instanceId",
    "HybridMetrics.1.Dimensions.1.DimensionValue": "asg-bp1******",
  • 声明另一个变量b,值为ess-metrics-repo-test指标仓库中的AliyunMnsnew_ActiveMessages,且指定指标维度region=cn-hangzhouuserId=******queue=test

    含义:userId为******的账号下杭州地域的队列名称为test的队列的活跃消息数量。
    "HybridMetrics.2.Id": "b",
    "HybridMetrics.2.MetricName": "AliyunMnsnew_ActiveMessages",
    "HybridMetrics.2.Statistic": "Average",
    "HybridMetrics.2.Dimensions.1.DimensionKey": "region",
    "HybridMetrics.2.Dimensions.1.DimensionValue": "cn-hangzhou",
    "HybridMetrics.2.Dimensions.2.DimensionKey": "userId",
    "HybridMetrics.2.Dimensions.2.DimensionValue": "******",
    "HybridMetrics.2.Dimensions.3.DimensionKey": "queue",
    "HybridMetrics.2.Dimensions.3.DimensionValue": "test",
  • 设置指标计算公式b/a

    含义:即实现公式
    "HybridMetrics.3.Id": "Expression",
    "HybridMetrics.3.Expression": "b/a"
  • 设置公式计算后的目标值。

    含义:公式计算结果的目标值为3。
    "TargetValue": 3
  • 本页导读 (1)
  • 方案概述
  • 1. 设计目标追踪伸缩方案
  • 2. 实现设计的伸缩方案
  • 2.1 准备目标追踪规则需要关注的企业云监控指标
  • 2.2 基于企业云监控指标,创建目标追踪规则
  • 3. 持续监控,优化方案
  • 调用API创建基于企业云监控的目标追踪规则