通过open API迅速搭建基于应用分组+报警模板的基本监控体系

背景

云监控的功能庞杂,涉及云产品众多, 对于企业用户来说,面对茫茫多的云上资源,建立监控体系时可能第一时间感到无从下手,本文将通过云监控的openAPI,利用 "应用分组" + "报警模板" 的功能,迅速为海量的资源搭建起基本的监控体系。

前置条件

  1. 首先你需要有一个阿里云账号
  2. 准备好ak (access_key_id, access_key_secret)

    • image
    • 建议使用子账号,安全性更好。(参见RAM访问控制)
    • 使用子账号时确保已经授权了AliyunCloudMonitorFullAccess

开始搭建监控体系啦

1. 设置联系人和联系人组

手动通过云监控控制台创建联系人和联系人组,设置正确的邮件,手机信息以便接受报警通知。

image

假设联系人组为"ops_group"

String contactGroups = "ops_group";
logger.info("manually create contact groups on CMS console...");

2. 创建应用分组

应用分组是云监控下资源管理的一个逻辑分组概念,可以将感兴趣的资源放在同一个分组下集中管理。具体划分逻辑可以根据业务需求灵活指定,比如将某一个服务的所有依赖资源放到一个分组。

更多信息参见:

云监控推出应用分组,帮你在阿云上跨地域、跨产品从业务角度管理资源,提高运维效率!
动态应用分组发布,实现从云资源生产到监控报警配置的全自动化
快速入门->应用分组

2.1 创建一个空的应用分组
CreateMyGroupsRequest request0 = new CreateMyGroupsRequest();
request0.setAcceptFormat(FormatType.JSON);

request0.setGroupName("demo-app-group");
request0.setContactGroups(contactGroups);
CreateMyGroupsResponse response0 = client.getAcsResponse(request0);
long groupId = response0.getGroupId();
logger.info("application group created, groupId = {}", groupId);
2.2 设置自动匹配ECS实例,批量管理ECS资源。

云监控暂时只支持动态添加ECS实例到应用分组,可根据ECS实例的自定义名称,通过startWith, endWithcontains规则匹配,并结合andor的逻辑控制符来设定。后续会支持更多资源类型。

PutGroupDynamicRuleRequest request1 = new PutGroupDynamicRuleRequest();
request1.setGroupId(groupId);
request1.setGroupRuleArrayJson("["
    + "  {"
    + "    \"category\": \"ecs\","          // 暂时只支持ECS
    + "    \"filterRelation\": \"and\","    // 同时满足以下规则(或者使用or 来匹配以下任意规则)
    + "    \"filters\": ["
    + "      {"
    + "        \"function\": \"contains\","  // 额外还支持startWith, endWith
    + "        \"name\": \"hostName\","      // hostName代表ecs实例的自定义主机名称
    + "        \"value\": \"test\""          // 实际匹配的值,本例表示ecs主机名称中包含test的实例
    + "      }"
    + "    ]"
    + "  }"
    + "]");
client.getAcsResponse(request1);
logger.info("set dynamic rules for ECS instances");
2.3 添加ECS外的其他类型资源到应用分组

对于不支持动态添加到分组的资源类型,或者动态分组并不能满足需求,还可以显式的指定加入分组的资源。此方法适用于所有资源,前提是需要先通过调用各个云产品对应的接口,获取实例的instanceId, categoryreginId

AddMyGroupInstancesRequest request2 = new AddMyGroupInstancesRequest();
request2.setGroupId(groupId);
request2.setInstances("["
    + "  {"
    + "    \"instanceId\": \"<your_instance_id>\","    
    + "    \"category\": \"RDS\","                          // 资源类型,比如ECS, RDS, SLS, SLB, ...
    + "    \"regionId\": \"cn-qingdao\""                    // 资源所在的regionId
    + "  }"
    + "]");
client.getAcsResponse(request2);

至此,所有感兴趣的资源都可以被加入到分组中集中管理。

2.4 为应用分组设置子账号权限 (可选)

应用分组可以和子账号的授权体系结合,支持将某个子账号授权为指定应用分组的只读/读写权限,从而满足企业级客户的多样权限管理需求。

UpdateMyGroupMembersRequest request2 = new UpdateMyGroupMembersRequest();
request2.setGroupId(groupId);
// 授予子账号分组的管理员权限。
request2.setMasters("<sub_account_id_1>,<sub_account_id_2>");
// 授予子账号分组的只读权限。
request2.setReaders("<sub_account_id_3>,<sub_account_id_4>");

3. 创建报警模板

报警模板是预先定义好的一批报警规则,可以被批量应用到应用分组中,避免重复的创建大量相同报警规则。

更多信息参见:

用户指南 -> 报警服务
预设监控项参考

当前暂不支持通过openAPI创建报警模板,为了更好的理解报警规则,建议通过云监控控制台手动创建报警模板,毕竟对于同一类需求的报警规则,通过报警模板只需要创建一次就好了。入口如下:

image
image
image

记录下报警模板的id,假设id = "12345"

String templateIds = "12345";
logger.info("manually create alarm templates, and get template ids");

4. 应用报警模板到应用分组

应用分组 + 报警模板 可以解决大部分的监控需求,一次创建,反复使用。
良好的分组和报警模板配置管理可以极大的简化监控的配置和维护,建议在创建和使用时综合考虑自己的业务场景合理配置。

ApplyTemplateRequest request3 = new ApplyTemplateRequest();
request3.setGroupId(groupId);
request3.setTemplateIds(templateIds);            // 可以同时应用多个模板,用逗号分隔,e.g., "123,456"
request3.setApplyMode("ALARM_TEMPLATE_FIRST");   // 两种应用模式:  1) ALARM_TEMPLATE_FIRST代表模板优先,不管分组中是否有对应资源都会创建报警规则; 2) GROUP_INSTANCE_FIRST 代表分组实例优先,只会创建分组中存在对应资源的报警,如果不存在则不创建。
client.getAcsResponse(request3);
logger.info("apply templates to application groups");

5. 完成!

至此一个基本的监控体系就搭建完成了,资源被管理在一个应用分组中,报警规则通过模板应用到分组下的每个实例上,一旦有实例触发报警规则,报警就会通知给分组中设置的报警联系人组中的每一个联系人。

完整示例代码请参考:github

了解更多

上面示例只是一个最简单的场景,云监控的openAPI提供大量的参数满足各种不同的业务需求,具体api的使用请参见如下在线文档:

云监控openAPI 概览
Aliyun OpenAPI Explorer
云监控openAPI示例代码on Github

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值