通过告警触发ECS带宽临时升级

通过告警事件值守带宽的状态,并在特定条件下对带宽进行临时升级。

背景

当包年包月ECS实例网络带宽不够用时,我们可通过修改实例的带宽配置提高网络性能。但可能每次需要升级的时间点和条件都不同,如果专人根据需求节点去手动修改实例临时带宽,这种方式耗时耗力,且难免可能有错误发生;或者也可升级实例全时段的带宽,这种方式又会多出不必要开销。系统运维管理 OOS(CloudOps Orchestration Service)有一个创建告警运维任务,设置触发条件后,比如当带宽使用率过高时,会自动升级临时带宽,帮您省时省力省开销。

操作步骤

  1. 本示例,带宽升级前实例信息如下。

    image.png

  2. 登录OOS控制台

  3. 单击自定义任务模板,创建模板,将附录1模板脚本复制粘贴到编辑框,创建用于升级带宽的模板,单击创建模板。

  4. 单击告警与事件运维,单击创建

  5. 设置触发规则

  6. 产品类型选择云服务器ECS,在规则描述中选择触发条件;本文选择当专有网络公网流出带宽平均使用率大于80%时,触发告警操作,即进行临时带宽升级;触发沉默周期选择要大于临时升级带宽的时间,避免二次触发后重复升级。

  7. 在需要报警资源中,选择要监控带宽的实例。

    image.png

  8. 选择模板,模板类型选择我的模板,并选择已经创建的临时带宽升级模板。

    image.png

  9. 设置参数。其中InstanceId参数的默认值为$.instanceId,其表示自动捕获已告警的实例ID。另外需要注意,执行使用到的权限的来源需要选择一个授予了更改带宽权限的且可操作系统运维管理 OOS(CloudOps Orchestration Service)的RAM角色,权限JSON脚本附于下方,具体授权可参考为OOS服务设置RAM权限

    image.png

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "ecs:ModifyInstanceNetworkSpec"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

  1. 设置完后,单击立即执行

  2. 查看执行,若已触发了带宽升级,可以看到有子执行被创建并执行成功,且目标实例带宽也发生变化。

    image.pngimage.pngimage.png

附录1

当对如下脚本创建模板,并把它作为带宽升级模板时,默认的升级时长是个范围,会介于3-4小时之间。当开始升级的时间点加3分钟为整点时,升级时长达到最大将升级240分钟,当开始时间点加3分钟为59分钟时,达到最小升级时长181分钟。如有需要,也可通过修改模板中的数字14580(表示4h+3min)来更改升级最大时长,比如,升级时长范围若想改成7-8小时,则将14580改为28980即可。

FormatVersion: OOS-2019-06-01
Description:
  en: ' Upgrade internet bandwidth for ECS instance.'
  zh-cn: 临时升级带宽
  name-en: ECS-TemporaryUpgradeInternetBandwidth
  name-zh-cn: 临时升级带宽
Parameters:
  RegionId:
    Type: String
    Description:
      en: The id of region.
      zh-cn: 地域ID。
    AssociationProperty: RegionId
    Default: '{{ ACS::RegionId }}'
  InstanceId:
    Type: String
    Description:
      en: One ECS instance Id.
      zh-cn: 一个ECS实例ID
    Default: "$.instanceId"
  MaxBandwidthOut:
    Description:
      en: The maximum public network bandwidth for out-direction.
      zh-cn: 需要升级到多大的服务器带宽,例:填写8,表示要临时升级服务器带宽至8M,注意:需大于当前带宽
    Type: Number
    MinValue: 0
    MaxValue: 200
    Default: 2
  OOSAssumeRole:
    Description:
      en: The RAM role to be assumed by OOS.
      zh-cn: OOS扮演的RAM角色。
    Type: String
    Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
  - Name: TemporaryUpgradeInternetBandwidth
    Action: 'ACS::ExecuteAPI'
    Description:
      en: Modifies the temporary bandwidth of the instances.
      zh-cn: 临时升级服务器带宽。
    Properties:
      Service: ECS
      API: ModifyInstanceNetworkSpec
      Parameters:
        RegionId: '{{ RegionId }}'
        InstanceId: '{{ InstanceId }}'
        InternetMaxBandwidthOut: '{{ MaxBandwidthOut }}'
        StartTime:
          'Fn::FormatUTCTime':
            - 'Fn::AddSecond':
                - '{{ ACS::CurrentUTCTime }}'
                - 180  # 3min
            - '%Y-%m-%dT%H:%MZ'
        EndTime:
          'Fn::FormatUTCTime':
            - 'Fn::AddSecond':
                - '{{ ACS::CurrentUTCTime }}'
                - 14580 # 3min +4h 带宽默认升级的时长默认是个范围,会介于181min-240min之间。当开始升级的时间点+3min为整点时,升级时长达到最大将升级240min,当开始时间+3min为59分时,达到最小将升级181min。
            - '%Y-%m-%dT%HZ'