配置基于Prometheus指标的弹性伸缩策略

SAE应用能够根据采集到可观测监控 Prometheus 版的自定义监控指标触发自动弹性伸缩。

重要

基于Prometheus监控指标的弹性伸缩仅适用于SAE应用标准版、专业版。

前提条件

  1. SAE应用接入Prometheus监控,确保自定义监控指标能够在Prometheus监控实例的指标管理 > 指标探索中进行查询。例如,通过示例JAR部署应用后,接入Prometheus监控,即可查询main_page_request_duration_seconds_max等自定义监控指标。

  2. Prometheus监控实例的设置中,在访问地址区域,找到HTTP API地址,复制公网URL,后续步骤会用到。

根据Prometheus指标触发弹性伸缩

  1. SAE应用列表中,在顶部选择目标地域和命名空间,点击目标应用ID跳转到应用详情页。

  2. 点击基础信息,点击弹性伸缩。在弹性伸缩区域,点击添加弹性策略

    1. 策略类型选择监控指标策略

    2. 自定义策略名称

    3. 指标来源选择Prometheus指标

    4. Prometheus地址输入之前复制的Prometheus监控实例的HTTP API地址公网URL

    5. 鉴权模式选择Authorization,然后输入Token。Token参考以下步骤生成:

      1. 创建AccessKey,并记录AccessKey IDAccessKey Secret。

      2. Token格式为Basic <base64Encode(<accessKeyID:accessKeySecret>)>,可以通过在Linux命令行执行以下命令来生成Token:

        echo "Basic $(echo -n '<accessKeyID>:<accessKeySecret>' | base64)"
        # 将其中<accessKeyID>和<accessKeySecret>替换为账户实际的AccessKey IDAccessKey Secret。注意保留''和:。注意不要保留<>
    6. 点击连接测试,如果测试通过,则表明Prometheus地址鉴权模式配置正确,SAE能够读取Prometheus监控指标数据。

    7. 触发条件:以示例应用为例,如果期望main_page_request_duration_seconds_max指标在过去1分钟的平均值为0.1作为触发条件,则指标查询语句输入avg_over_time(main_page_request_duration_seconds_max[1m])*10目标值输入1

      1. 为确保目标值设置合理,可以通过点击指标查询语句输入框旁的查询,来查询指标查询语句的历史结果数据。如需精确查询近期数据,建议在Prometheus监控实例的指标管理 > 指标探索中输入指标查询语句,并设置近期的时间范围,进行查询。

      2. 监控指标触发自动扩缩的原理如下所示:应用目标实例数 = ceil[当前实例数 * (当前监控指标值 /目标指标值)],结果有小数时自动向上求整。同时为保证扩缩稳定性,防止震荡,如果计算出的(当前监控指标值 /目标指标值)在[0.9,1.1] 之间将不进行实际扩缩行为。

    8. 实例数设置:限定应用最小实例数(示例应用设置为1),应用最大实例数(示例应用设置为10)。设置最小存活实例数(每次滚动升级过程中最小存活的实例数,示例应用设置为2)。

    9. 高级设置

      配置项

      说明

      弹性扩容步长

      单位时间(秒)内最多扩容的实例数。

      弹性缩容步长

      单位时间(秒)内最多缩容的实例数。

      扩容稳定窗口

      稳定窗口期系统趋于维稳状态。通过自动扩缩算法来保证当需要执行扩容时,使用指定时间间隔内所计算的期望目标实例数中的最小值。

      缩容稳定窗口

      稳定窗口期系统趋于维稳状态。通过自动扩缩算法来保证当需要执行缩容时,使用指定时间间隔内所计算的期望目标实例数中的最大值。

      禁止缩容

      开启后将不会缩容该应用的实例。

  3. 启用监控指标策略:在弹性伸缩区域的监控指标策略列表中找到之前创建的弹性策略,在操作列点击启用

  4. 验证效果:以示例应用根据avg_over_time(main_page_request_duration_seconds_max[1m])*10 = 1触发弹性伸缩为例,执行以下步骤来验证效果。

    1. 登录应用实例的Webshell,执行以下命令来模拟大量用户对接口的请求。

      # 安装压测工具ab
      yum install -y httpd-tools
      
      # 在后台持续高并发地调用接口
      cat << EOF >> ./ab-test.sh
      #!/bin/bash
      while true; do
          ab -n 100000 -c 5000 http://localhost:8080/
          sleep 1
      done
      EOF
      cat ./ab-test.sh
      chmod +x ./ab-test.sh
      nohup ./ab-test.sh >> ./ab-test.log 2>&1 &
      tail -f ./ab-test.log
    2. 等待1分钟。在实例数随弹性指标变化趋势区域,选择自定义Prometheus指标,查询最近15分钟的图表,观察指标是否趋近于目标值。等待一段时间后,还能查看应用实例数的变化趋势。

    3. 弹性伸缩区域的监控指标策略列表中找到之前创建的弹性策略,在操作列点击最右侧图标,点击事件,可以查看已触发的弹性扩缩事件。

    4. 点击基础信息,点击实例列表点击实例列表右上方的刷新按钮,查看当前应用实例数量。

设置弹性伸缩在特定时间段的实例数量限制

  1. SAE应用列表中,在顶部选择目标地域和命名空间,点击目标应用ID跳转到应用详情页。

  2. 点击基础信息,点击弹性伸缩。在弹性伸缩区域,点击添加弹性策略

    1. 策略类型选择混合弹性策略

    2. 特殊时间段设置区域,为指定的特殊时间段设置应用最小实例数应用最大实例数

    3. 其余配置同根据Prometheus指标触发弹性伸缩