运维编排场景系列-----每日统计多Region实例的运行状态

本文涉及的产品
云服务器 ECS,每月免费额度280元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 应用场景 一个账号内存在一个Region或者多个Region时,并且每个Region都存在多个实例。需要自定义指定时间来查看所有Region下或者查看指定的部分Region的全部实例的运行状态,并统计出各种实例状态的数量,将输出的报告以钉钉的形式通知指定用户。

应用场景

一个账号内存在一个Region或者多个Region时,并且每个Region都存在多个实例。需要自定义指定时间来查看所有Region下或者查看指定的部分Region的全部实例的运行状态,并统计出各种实例状态的数量,将输出的报告以钉钉的形式通知指定用户。

解决方案

任务步骤
1.设置定时器
2.循环多个Region
3.查询每个Region的实例数量
4.计算不同状态的实例数量
5.将结果发送给指定的钉钉用户

一、打开控制台,找到运维编排
1565838531882_d0df7bfe_0d75_4864_9358_f32f97ea4380

二、创建模版
根据以上的任务步骤来看可以把此任务创建为以下两个模版。点击
创建模版**
1565838175874_155750e5_fa1a_423d_9b81_c6177749f8c1

模版一:
此模版是子模版,根据父模版传进来的RegionId来分别计算此RegionId下不同运行状态的实例数量,并将结果传回父模版去做处理。自定义此模版名称或这将此模版命名为:InstanceDifferentStatusCountInfo

FormatVersion: OOS-2019-06-01
Outputs:
  runningCount:
    Type: String
    Value: '{{ regionId }}:{{ runningInstance.count }}'
  stoppedCount:
    Type: String
    Value: '{{ regionId }}:{{ stoppedInstance.count }}'
  totalCount:
    Type: String
    Value: '{{ regionId }}:{{ totalInstance.count }}'
Parameters:
  regionId:
    Description: The region id for instance.
    Type: String
  OOSAssumeRole:
    Description: The RAM role to be assumed by OOS.
    Type: String
    Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
  - Name: runningInstance
    Action: 'ACS::ExecuteAPI'
    Description: >-
      describe instances with specified parameters, refer them here:
      https://help.aliyun.com/document_detail/63440.html
    Properties:
      Service: Ecs
      API: DescribeInstances
      Parameters:
        Status: Running
        RegionId: '{{ regionId }}'
    Outputs:
      count:
        Type: String
        ValueSelector: .TotalCount
  - Name: stoppedInstance
    Action: 'ACS::ExecuteAPI'
    Description: >-
      describe instances with specified parameters, refer them here:
      https://help.aliyun.com/document_detail/63440.html
    Properties:
      Service: Ecs
      API: DescribeInstances
      Parameters:
        Status: Stopped
        RegionId: '{{ regionId }}'
    Outputs:
      count:
        Type: String
        ValueSelector: .TotalCount
  - Name: totalInstance
    Action: 'ACS::ExecuteAPI'
    Description: >-
      describe instances with specified parameters, refer them here:
      https://help.aliyun.com/document_detail/63440.html
    Properties:
      Service: Ecs
      API: DescribeInstances
      Parameters:
        RegionId: '{{ regionId }}'
    Outputs:
      count:
        Type: String
        ValueSelector: .TotalCount

模版二:
    此模版在嵌套模版中为父模版,主要作用是定时执行循环输入的RegionId,并给子模版传RegionId,将属于不同Region的模版一输出的结果做聚合处理,聚合处理后的结果通过钉钉发送给指定的用户。自定义此模版名称或将此模版命名为DifferentRegionInstanceStatusCount
注意:由于此功能使用了嵌套模版,需要先将模版一创建成功后再创建模版二,并将【模版一】的名称作为【模版二】instanceStatusInfoTemplateName参数

FormatVersion: OOS-2019-06-01
Outputs: {}
Parameters:
  regionId:
    Description: The region id for instance.
    Type: List
    Default:
      - cn-hangzhou
      - cn-beijing
  token:
    Description: DingTalk webhook token.
    Type: String
  expression:
    Description: 'Daily task execution time(UTC),for example:0 0 2 ? * *'
    Type: String
  endDate:
    Description: 'The task execution end date(UTC),for example:2019-08-02T08:06:49Z or 2019-08-02'
    Type: String
  OOSAssumeRole:
    Description: The RAM role to be assumed by OOS.
    Type: String
    Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
  - Name: DailyStatisticsStatus
    Action: 'ACS::TimerTrigger'
    Description: Timer for executing task.
    Properties:
      Type: cron
      Expression: '{{ expression }}'
      EndDate: '{{ endDate }}'
  - Name: instanceStatusInfo
    Action: 'ACS::Template'
    Description: Check if the user has an MFA Device.
    Properties:
      TemplateName: InstanceDifferentStatusCountInfo
      Parameters:
        regionId: '{{ACS::TaskLoopItem}}'
    Outputs:
      runningCount:
        Type: String
        ValueSelector: runningCount
      stoppedCount:
        Type: String
        ValueSelector: stoppedCount
      totalCount:
        Type: String
        ValueSelector: totalCount
    Loop:
      Items: '{{ regionId }}'
      MaxErrors: 100
      Concurrency: 10
      Outputs:
        RunningCount:
          AggregateField: runningCount
          AggregateType: 'Fn::ListJoin'
        StoppedCount:
          AggregateField: stoppedCount
          AggregateType: 'Fn::ListJoin'
        TotalCount:
          AggregateField: totalCount
          AggregateType: 'Fn::ListJoin'
  - Name: NotifyDingTalk
    Action: 'ACS::Notify'
    Description: >-
      Send notification to DingTalk via webhook. Please refer
      https://open-doc.dingtalk.com/microapp/serverapi2/qf2nxq for details.
    Properties:
      NotifyType: WebHook
      WebHook:
        URI: 'https://oapi.dingtalk.com/robot/send?access_token={{ token }}'
        Headers:
          Content-Type: application/json
        Content:
          msgtype: text
          text:
            content: >-
              Total Instance Count: {{ instanceStatusInfo.TotalCount }},  
              Running Instance Count: {{ instanceStatusInfo.RunningCount}},  
              Stopped Instance Count: {{ instanceStatusInfo.StoppedCount}}

三、创建执行
两个模版全部创建成功后就点击创建执行了,此时必须只执行模版二。
1565838783576_785ed5ca_c1d4_4619_a3d1_6f89b028bd63

四、设置参数
如下所示,根据实际情况设置参数。参数输入完毕后点击下一步:确认创建。
参数介绍:
regionId:实例的地区,可以根据实际情况输入一个或多个regionId。
token:报告接收者的token
expression:设置的定期执行时间,此处的设置参数方式如下所示(必须为UTC格式时间,参考云助手的设置定时执行命令,UTC时间在平常的基础上 -8h):
0 15 2 ?   每天上午10:15执行任务
0 0 2,6,8 ?  每天上午10:00点、下午14:00以及下午16:00执行任务
0 0/5 6 ? 每天下午14:00到下午14:55时间段内每隔5分钟执行任务
0 0/30 1-9 ?  每天上午09:00到下午17:00时间段内每隔半小时执行任务
0 10,44 4 ? 3 WED 每年3月的每个星期三下午14:10到14:44时间段内执行任务
0 15 2 ? * 6L 2002-2005  2002年至2005年每月最后一个星期五上午10:15执行任务
endDate:设置执行结束时间(必须为UTC格式的时间:2019-08-02T08:06:49Z  or 2019-08-02)
1565924519363_ae29ee11_529b_4307_8435_50cc808e8f9a

五、创建执行
参数设置完毕后,就可以点击创建执行了,此任务开始执行。
1565840688253_e3672be8_ea7a_4c29_b038_98c025823da1

由于时间定时器的关系,此任务在指定的时间执行任务结束后,此任务继续回到等待中。下图为第一层子执行。
1565925651936_9530bbc4_e2a4_41b1_b306_c1d9dcc710a8

账号内包含多个regionId时此执行会有多个子执行,时间定时器下的任务子执行显示如下图所示。
1565841043280_47ff6ba8_2594_472e_8f28_bc15d45b8dc4

六、输出结果
当循环完所有的regionId后,任务执行结束,并将输出的报告发送给指定的钉钉用户,其显示如下所示。
1565853551907_fea3a79d_8bce_4aa3_89bb_d8c071b50644

总结

此执行主要是为了定时查看某一账号内的所有实例的运行状态。在高压任务下或者是日常检查中方便随时了解账号内所有实例的实际运行情况。通过嵌套模版的方法解决了在一个模版下无法统计不同Region的实例不同运行状态,并根据需要来输出理想的数据格式。目前OOS运维编排处于公测中欢迎试用。


系列文章

主题文章

阿里云重磅发布云上自动化利器——运维编排OOS

最佳实践

玩转运维编排服务的权限:Assume Role+Pass Role

场景系列

运维编排场景系列----更新ECS镜像
运维编排场景系列-----给ECS实例自动打TAG
运维编排场景系列----从实例中拷贝文件到OSS
运维编排场景系列----给实例加到SLS机器组
运维编排场景系列----检测MFA功能状态
阿里云运维编排新功能:一键批量克隆ECS

相关文章
|
6月前
|
运维 安全 数据库
渗透攻击实例-系统/服务运维配置不当
渗透攻击实例-系统/服务运维配置不当
|
7月前
|
弹性计算 运维 jenkins
使用云助手自动化运维云服务器ECS实例
本文为您介绍如何通过阿里云控制台,使用云助手自动化运维云服务器ECS实例。
161 0
|
10月前
|
弹性计算 负载均衡 测试技术
运维编排系列场景--跨可用区批量克隆ECS实例
背景可用区(Availability Zone,简称 AZ)是指在同一地域内,电力和网络互相独立的物理区域。例如,华北1(青岛)地域支持2个可用区,包括青岛 可用区B和青岛 可用区C。同一可用区内实例之间的网络延时更小,其用户访问速度更快。将应用部署在多个可用区可以提高应用的可用性,降低故障风险。然而,在实际应用中,有时需要将实例从一个可用区迁移到另一个可用区,以实现故障切换、负载均衡、数据备份与
559 0
运维编排系列场景--跨可用区批量克隆ECS实例
|
10月前
|
弹性计算 运维 数据中心
运维编排系列场景--跨账号跨地域实例操作系统补丁修复
运维编排(OOS) 简介什么是OOSOperation Orchestration Service,简称OOS,是全面、免费的云上自动化运维平台,提供运维任务的管理和执行。典型使用场景包括:事件驱动运维,批量操作运维,定时运维任务,跨地域运维等,OOS为重要运维场景提供审批,通知等功能。OOS帮您实现标准化运维任务,从而实践运维即代码(Operations as Code)的先进理念。关于OOS更
393 0
|
10月前
|
弹性计算 运维 监控
运维编排系列场景--通过告警触发自动重启CPU使用率高的ECS实例
运维编排(OOS) 简介什么是OOSOperation Orchestration Service,简称OOS,是全面、免费的云上自动化运维平台,提供运维任务的管理和执行。典型使用场景包括:事件驱动运维,批量操作运维,定时运维任务,跨地域运维等,OOS为重要运维场景提供审批,通知等功能。OOS帮您实现标准化运维任务,从而实践运维即代码(Operations as Code)的先进理念。关于OOS更
184 0
|
11月前
|
Web App开发 弹性计算 运维
《企业运维之弹性计算原理与实践》——ECS 进阶概念-运维——第三章(中)实验 1:使用云助手自动化运维云服务器 ECS 实例(1)
《企业运维之弹性计算原理与实践》——ECS 进阶概念-运维——第三章(中)实验 1:使用云助手自动化运维云服务器 ECS 实例(1)
358 0
《企业运维之弹性计算原理与实践》——ECS 进阶概念-运维——第三章(中)实验 1:使用云助手自动化运维云服务器 ECS 实例(1)
|
11月前
|
弹性计算 运维 Shell
《企业运维之弹性计算原理与实践》——ECS 进阶概念-运维——第三章(中)实验 1:使用云助手自动化运维云服务器 ECS 实例(2)
《企业运维之弹性计算原理与实践》——ECS 进阶概念-运维——第三章(中)实验 1:使用云助手自动化运维云服务器 ECS 实例(2)
238 0
|
11月前
|
弹性计算 运维 jenkins
《企业运维之弹性计算原理与实践》——ECS 进阶概念-运维——第三章(中)实验 1:使用云助手自动化运维云服务器 ECS 实例(3)
《企业运维之弹性计算原理与实践》——ECS 进阶概念-运维——第三章(中)实验 1:使用云助手自动化运维云服务器 ECS 实例(3)
186 0
|
11月前
|
Web App开发 弹性计算 运维
《企业运维之弹性计算原理与实践》——ECS 进阶概念-运维——第三章(中)实验 1:使用云助手自动化运维云服务器 ECS 实例(4)
《企业运维之弹性计算原理与实践》——ECS 进阶概念-运维——第三章(中)实验 1:使用云助手自动化运维云服务器 ECS 实例(4)
195 0
|
运维 算法 NoSQL
从新手小白到运维大咖,SysOM 多场景宕机实例解析 | 龙蜥技术
更自动化和智能的运维,再也不怕无法及时感知宕机和重复投入已知问题的情况。
从新手小白到运维大咖,SysOM 多场景宕机实例解析 | 龙蜥技术