本文介绍日志服务告警系统对接函数计算,实现告警自动化处理的实践方案。
背景信息
函数计算支持以事件驱动方式连接其他服务。当事件源触发事件时,函数计算会自动调用函数处理事件。日志服务告警支持对接函数计算,在某些场景中,发送告警通知到函数计算,可由函数计算完成自动化处理。
例如某企业在使用OSS时,要求所有Bucket的ACL都必须为私有。如果有员工在创建或修改OSS Bucket时,将ACL设置为公共读、公共读写,告警系统需快速发现并自动修复。针对该场景,只需通过日志服务告警系统与函数计算,即可快速实现。基本操作流程如下:
创建函数计算服务和函数。
采集OSS操作审计日志到日志服务。
基于OSS操作审计日志,创建告警。
函数计算接收告警通知后,调用函数,判断Bucket ACL权限是否为私有并修改。
操作权限说明
如果您使用的是阿里云RAM用户,该RAM用户需具备如下权限。具体操作,请参见为RAM用户授权。
{
"Statement": [{
"Action": "ram:CreateServiceLinkedRole",
"Resource": "*",
"Effect": "Allow",
"Condition": {
"StringEquals": {
"ram:ServiceName": "alert.log.aliyuncs.com"
}
}
}],
"Version": "1"
}
步骤一:创建服务和函数
登录函数计算控制台。
创建服务。
具体操作,请参见创建服务。
创建函数。
重要参数说明如下所示,其他参数保持默认配置。具体操作,请参见创建函数。
函数名必须以
sls-ops-
开头,例如sls-ops-test
。设置请求处理程序类型为处理事件请求。
函数代码示例如下所示。其中,accessKeyId和accessKeySecret为阿里云账号的访问密钥,本示例从环境变量中获取AccessKey ID和AccessKey Secret。具体操作,请参见配置环境变量。
创建函数后,无需执行测试操作。
const OSS = require('ali-oss') const accessKeyId = process.env.ALIBABA_CLOUD_ACCESS_KEY_ID const accessKeySecret = process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET async function checkBucketAcl(region, bucket) { const client = new OSS({ region: `oss-${region}`, accessKeyId, accessKeySecret }) const result = await client.getBucketACL(bucket) if (result.acl !== 'private') { await client.putBucketACL(bucket, 'private') } } exports.handler = async (event, context, callback) => { const alert = JSON.parse(event.toString()) for (const result of alert.fire_results) { const { region, bucket } = result await checkBucketAcl(region, bucket) } callback(null, '') }
步骤二:采集OSS审计日志
ActionTrail操作日志包括OSS审计日志,因此您可以在日志审计服务中,开启ActionTrail操作日志的采集,从而采集OSS审计日志。
步骤三:创建告警
在左侧导航栏中,选择 。
输入如下查询和分析语句,单击查询/分析。
修改Bucket的ACL权限或新建Bucket,都会生成一条PutBucket的审计日志。因此您可以使用如下查询和分析语句,获取PutBucket日志,并提取Bucket地域和名称。后续函数计算会基于该信息,判断并修改OSS Bucket的ACL。
event.ServiceName: Oss AND event.eventName: PutBucket | SELECT "event.acsRegion" AS region, split("event.eventSource", '.') [1] AS bucket
单击另存为告警。
在告警监控规则面板中,完成如下配置。
重要参数说明如下所示,其他参数说明,请参见创建日志告警监控规则。
设置触发条件为有数据。
设置告警策略为极简模式,然后在行动组中设置渠道为函数计算(FC),并选择您所创建的服务和函数。
根据上述函数代码的内容,此处您需在目标内容模板中,修改函数计算渠道的发送方式为逐条发送。
创建告警后,修改Bucket的ACL权限或新建Bucket都会触发告警。您可以在告警概览页面的告警历史图表中,查看已触发的告警。
步骤四:查看函数计算处理结果
函数计算收到告警通知后,调用函数判断对应Bucket的ACL是否为私有并修改。即如果ACL为公共读或公共读写,函数计算将自动修改ACL为私有。
- 本页导读 (1)