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

前言

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

本文为您介绍如何通过配置审计(Config)的自定义规则和日志服务(SLS)报警配合,对指定的负载均衡(SLB)变配进行报警,帮助企业快速感知变配内容并及时做出相应对策。

背景

云上账号主要有阿里云主账号、RAM子账号、RAM角色,阿里云主账号对所有资源都有完整的控制能力,一些被赋予高级权限的RAM子账号、RAM角色等也同样可以控制资源。如何在变更操作之前阻断该行为,是服务控制策略(SCP)的范畴(该服务限制只能是企业认证账户,并且开通了资源目录(Resource Directory)才可实施),本文暂不讨论。如何在变配后快速感知到变化也非常重要。公司A的运维同学向我们提了一个问题:公司的核心业务部署在阿里云上,采用的架构是弹性计算ECS+负载均衡(SLB)+关系型数据库RDS,每天都担心核心服务异常变配导致业务中断,希望变配后及时收到消息通知,想问问有没有什么方案。

我们为他们推荐了配置审计(Config)结合日志服务(SLS)的报警。那这个产品组合是如何实现以上目标的呢?

流程图

整个方案的流程图如上所示。员工A修改了企业某核心业务负载均衡(SLB)的配置。资源变配数据会被配置审计(Config)感知并存储,同时会触发监听该类资源变动的规则进行评估。规则引擎接收的入参包含了资源变动的 Diff 数据,如果该规则为自定义规则,规则引擎会执行配置好的函数计算(FC)的函数。函数过滤出目标资源的变更,并将变更数据写入日志服务(SLS)中。日志服务通过配置告警策略,触发告警并通知管理员。

另外两条实线表示管理员可以前往配置审计(Config)查看资源时间线以及通过日志服务(SLS)查看资源具体的配置变更信息。

新建一个日志库(logstore)

新建日志库(logstore),用于存储目标资源的变配数据,同时我们可以基于这个日志库(logstore)配置告警策略;具体如何创建日志项目(project)及日志库(logstore),这里我就不再赘述,您可参考日志服务的文档进行操作。

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

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

配置审计(Config)的自定义规则是基于函数计算(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.configurationItem && parsed.invokingEvent.configurationItem.arn;
if (!specificArn || specificArn === resourceArn) { // 如果规则中未指定具体资源arn,则默认所有过滤到的资源类型都写到日志服务(SLS)
sls.putLogs({
projectName: projectName,
logStoreName: logStoreName,
logGroup: logGroup
}, function (err, data) {
if (err) {
callback(err);
return;
}
callback(null, data);
});
} else {
callback(null);
}
}

函数是以指定的RAM角色来执行的,所以需要给指定的RAM角色进行授权,本案例需要给RAM角色授权能够写指定日志库的权限。

{
"Version": "1",
"Statement": [
{
"Action": [
"log:PostLogStoreLogs",
"log:PutLogs"
],
"Resource": "acs:log:*:*:project/aliyun-fc-cn-hangzhou-26064c43-65dc-5734-8175-3c0fdfc784df/logstore/*", // 具体可根据自己函数的实际业务逻辑进行授权
"Effect": "Allow"
}
]
}

新建配置审计(Config)规则

进入配置审计控制台->规则->新建规则->新建自定义规则,自定义规则是将规则评估的逻辑交给函数计算(FC)

设置基本属性

我们选择前面创建的函数,并配置规则名称,触发机制选择“配置变更”,表示我们希望在有新的配置发生变化时,就执行该自定义规则规则。

设置评估资源范围

资源类型选择SLB负载均衡,表示我们只希望对类型为SLB负载均衡的配置变更才触发函数执行。

参数设置

在前面进行函数设计时,我们增加了一个选项,允许用户在配置自定义规则时,希望对某一个资源进行报警需求的支持。

由于在期望值那一栏,我没有输入任何值,则表示当资源类型为负载均衡(SLB)的所有资源发生变更时,都将触发函数执行;您也可以输入期望值,期望值位目标资源的 arn。

配置日志服务报警

进入之前新建的日志服务(SLS)的日志项目(logstore),设置一个查询条件 SELECT COUNT(1) AS C ,查询后,点击另存为告警,则开始进行日志服务告警配置。

以下为我设定的告警配置:每隔5分钟,查询最近5分钟的日志数据,如果查询的结果 >0 , 则触发短信告警。

验证效果

我们添加一个SLB负载均衡的监听。稍等一会,我们就会发现一条配置变更已经写入到了 日志库(logstore)中。

报警通知直接通过短信通知到了我的手机上。

总结

配置审计(Config)对资源变配触发自定义规则可以实现很多的客户场景, 如自定义合规校验逻辑(参考文档)、自动化执行、甚至自动修复等。

本文主要结合日志服务(SLS)的告警帮助客户快速感知资源变化并报警。

原文链接

本文为阿里云原创内容,未经允许不得转载。

配置审计(Config)变配报警设置的更多相关文章

  1. CentOS7下搭建zabbix监控(四)——Zabbix报警设置

    CentOS7下搭建zabbix监控(一)——Zabbix监控端配置 CentOS7下搭建zabbix监控(二)——Zabbix被监控端配置 CentOS7下搭建zabbix监控(三)——Zabbix ...

  2. springcloud(四):应用配置中心config的安全设置

    springcloud应用配置中心config的安全设置 在springcloud应用开发中,为了方便在线管理我们的配置文件,通常会配一个配置中心config-server,这里托管着应用的一些配置文 ...

  3. linux中Zabbix邮件报警设置配置步骤

    使用外部邮箱账号发送报警邮件设置 配置Zabbix服务端外部邮箱 vi /etc/mail.rc #编辑,添加以下信息 set from=xxx@163.com smtp=smtp.163.com s ...

  4. 【flask】flask项目配置 app.config

    [理论] 在很多情况下,你需要设置程序的某些行为,这时你就需要使用配置变量.在Flask中,配置变量就是一些大写形式的Python变量, 你也可以称之为配置参数或配置键.使用统一的配置变量可以避免在程 ...

  5. asp.net配置web.config支持jQuery.Uploadify插件上传大文件

    配置web.config有两处地方需要配置,分别是集成模式和经典模式. 集成模式: <!--文件上传大小设置--> <httpRuntime requestValidationMod ...

  6. echarts 用marlkline画线 同时配置中含有datazoom,怎么设置markline

    由于项目需要设置边界值即用markline 画标线,通过echarts文档可以查看到(如下) 1.通过坐标点(xAxis和yAxis的设置) 通过网上搜索许多markline的配置都是通过下面来设置的 ...

  7. asp.net权限控制配置web.config

    项目下 有三个文件夹 A,B,C 验正方式是 Forms 验正 我要设置他们的访问权限为, A,匿名可访问 B,普通用户授权后才能访问 C,只允许管理员访问 <configuration> ...

  8. CactiEZ 中文版V10.1安装使用以及139邮箱短信报警设置

    说明:CactiEZ中文版V10.1是基于CentOS 6.0系统,整合Cacti等相关软件,重新编译而成的一个操作系统!   说明:CactiEZ中文版V10.1是基于CentOS 6.0系统,整合 ...

  9. 分布式监控系统Zabbix-3.0.3--短信报警设置

    前面已分别介绍了zabbix的邮件.微信报警设置,这些都是手机在有网络时才能收到报警信息,那如果手机没有网的情况下怎么办,这就需要考虑使用短信接口报警了.当服务出现故障达到预警级别是通过发送短信的形式 ...

  10. 微信小程序:工具配置 project.config.json

    微信小程序:工具配置 project.config.json 一.项目配置文件project.config.json 小程序开发者工具在每个项目的根目录都会生成一个 project.config.js ...

随机推荐

  1. [置顶] java.io.IOException: No such file or directory解决方案之权限问题

    先贴出异常信息: java.io.IOException: No such file or directory at java.io.UnixFileSystem.createFileExclusiv ...

  2. 访问Webapp目录下面的html文件变为代码

    一.问题由来 一位朋友在学习使用Servlet做练习的时候,突然出现一个问题,他去访问自己创建的html文件时,发现返回的数据是html代码,而不是解析后的页面. 很是疑惑,自己尝试着解决这个问题,很 ...

  3. python面向对象(基础)

    一 面向对象介绍 面向过程: 核心是:"过程"二字 过程的终极奥义就是将程序流程化 过程是"流水化",用来分步骤解决问题的 面向对象: 核心是"对象& ...

  4. Activity系列博客5篇

    目录介绍 01.前沿介绍 02.handleLaunchActivity 03.performLaunchActivity 04.activity.attach 05.Activity的onCreat ...

  5. Moe RE - 【bugku】

    发现好像没人写wp,虽然很简单但是写一个.... 题目 分析 下载文件打开,习惯首先丢到Exeinfo PE里看看有没有壳 没有壳的样子 那放心丢到IDA(64-bit)里面 一进去就看到很有嫌疑的字 ...

  6. elasticsearch聚合桶排序、分页实战

    很多时候业务上需要分组排序分页的场景,类似于mysql的group by xxx limit 0 10.so,当数据同步到es后,相同的需求场景也出现了.背景:商品根据商品销量排序,销量数据是以sku ...

  7. Mysql中的锁(case篇)

    case1(表锁的读-写-读阻塞) 上篇文档中提到过 WRITE locks normally have higher priority than READ locks to ensure that ...

  8. SQL FOREIGN KEY 约束- 保障表之间关系完整性的关键规则

    SQL FOREIGN KEY 约束 SQL FOREIGN KEY 约束用于防止破坏表之间关系的操作.FOREIGN KEY 是一张表中的字段(或字段集合),它引用另一张表中的主键.具有外键的表称为 ...

  9. 震撼!这个Python模块竟然能自动修复代码!

    说到Python的强大的地方,那真的是太多了,优雅.简洁.丰富且强大的第三方库.开发速度快,社区活跃度高等,所以才使得Python才会如此的受欢迎. 今天给大家介绍一个特别暴力的Python库: Fu ...

  10. Ascend C 自定义算子 Kernel Launch调用入门

    本文分享自华为云社区<Ascend C 自定义算子 Kernel Launch调用入门>,作者: jackwangcumt. 1 Kernel Launch概述 根据官方说明文档的介绍,A ...