共计 4002 个字符,预计需要花费 11 分钟才能阅读完成。
简介:本文作者【紫极 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 的函数。
函数的外部的业务逻辑,咱们进行如下设计:
- 反对用户额定指定一个参数 arn,不便咱们对某一个特定的资源进行报警;如果不指定 arn,则示意对该类型的资源变更都进行告警;
- 调用日志服务(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)的告警帮忙客户疾速感知资源变动并报警。
原文链接
本文为阿里云原创内容,未经容许不得转载。