配置审计(Config)变配报警设置

简介: 本文作者【紫极zj】,本篇将主要介绍通过配置审计的自定义规则等服务,对负载均衡进行预警行为的相关介绍。

前言

配置审计(Config)将您分散在各地域的资源整合为全局资源列表,可便捷地搜索全局资源,并通过规则对资源配置进行评估,过滤出不符合业务要求的资源变配操作。

 

负载均衡(SLB)变配进行报警,帮助企业快速感知变配内容并及时做出相应对策。

 

背景

负载均衡(SLB)+关系型数据库RDS,每天都担心核心服务异常变配导致业务中断,希望变配后及时收到消息通知,想问问有没有什么方案。

 

日志服务(SLS)的报警。那这个产品组合是如何实现以上目标的呢?

 

流程图

日志服务(SLS)中。日志服务通过配置告警策略,触发告警并通知管理员。

 

日志服务(SLS)查看资源具体的配置变更信息。

 

新建一个日志库(logstore)

日志服务的文档进行操作。

 

本案例对应的日志项目为: aliyun-fc-cn-hangzhou-26064c43-65dc-5734-8175-3c0fdfc784df  ,日志库为: specific-config-alert  。

 

新建函数计算(FC)的函数

函数计算(FC)实现的。函数所属的地域是不受限制的。本案例选择地域为华东1(杭州)

我是基于 alimebot-nodejs 模板创建的函数。

我们在 ConfigService 这个服务下面新建一个名为 specific-config-change-alert 的函数。

 

函数的内部的业务逻辑,我们进行如下设计:

  1. 支持用户额外指定一个参数 arn ,方便我们对某一个特定的资源进行报警;如果不指定 arn,则表示对该类型的资源变更都进行告警;
  2. 调用日志服务(SLS)的SDK,将日志存入日志库(logstore);

 

代码逻辑如下

const ALY = require('aliyun-sdk'); // 日志服务Nodejs SDK

exports.handler = function (event, context, callback) {
    const sls = new ALY.SLS({
        "accessKeyId": context.credentials.accessKeyId,            //阿里云访问密钥AccessKey ID。更多信息,请参见访问密钥。阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维。 
        "secretAccessKey": context.credentials.accessKeySecret,    //阿里云访问密钥AccessKey Secret。 
        "securityToken": context.credentials.securityToken,        //RAM角色额外输入的securityToken
        endpoint: 'http://cn-hangzhou.log.aliyuncs.com',           //日志服务的域名。更多信息,请参见服务入口。此处以杭州为例,其它地域请根据实际情况填写。
        apiVersion: '2015-06-01'                                   //SDK版本号,固定值。
    });

    // -------------------------------
    // put logs
    // -------------------------------
    const projectName = "aliyun-fc-cn-hangzhou-26064c43-65dc-5734-8175-3c0fdfc784df";       //刚刚创建的日志项目
    const logStoreName = "specific-config-alert";                                           //刚刚创建的日志库
    const parsed = JSON.parse(event);                                                       //将入参转化为js对象      
    if (!parsed || !parsed.invokingEvent) {                                                 //配置审计调用时传入的参包含: invokingEvent(变更数据), ruleParameters(函数规则额外传入的用户自定义参数), resultToken
        callback(null, event); 
        return;
    }

    const specificArn = parsed.ruleParameters && parsed.ruleParameters.arn;                 //函数规则允许用户传入的自定义的资源arn

    const transformData = Object.keys(parsed.invokingEvent).map(function(k) { return { key: k, value: JSON.stringify(parsed.invokingEvent[k])}});

    // 日志服务需要的格式
    const logGroup = {
        logs : [{
            time:  Math.floor(new Date().getTime()/1000),
            contents: transformData
        }],
        topic: 'special-config-change'
    };

    const resourceArn = parsed.invokingEvent && parsed.invokingEvent.