CloudWatch 记录多个自定义指标过滤器以触发 lambda 函数
CloudWatch log multiple custom metric filters to trigger lambda function
我刚开始学习 aws,我创建了几个 cloudwatch 日志自定义指标过滤器并订阅了相同的 lambda 函数来处理一些事情,但我想让我的 lambda 函数执行不同的操作取决于哪个指标过滤器触发它。在 lambda 函数中(在 python 中)我如何知道哪个指标过滤器触发它?
在 Lambda 函数处理程序中,您将拥有一个事件对象,该对象通常包含有关请求的信息。根据 documentation,这是 base64 编码和压缩的。我想这是因为日志预计会变得相当大。
解压缩后的结构为:
{ messageType: 'DATA_MESSAGE',
owner: '123456789123',
logGroup: 'testLogGroup',
logStream: 'testLogStream',
subscriptionFilters: [ 'testFilter' ],
logEvents:
[ { id: 'eventId1',
timestamp: 1440442987000,
message: '[ERROR] First test message' },
{ id: 'eventId2',
timestamp: 1440442987001,
message: '[ERROR] Second test message' } ] }
这可以在 CloudWatch Logs 下的 AWS docs 中找到。
您可以检查事件数据中的 subscriptionFilters
字段以检查哪个过滤器触发了 Lambda。
如果您的 Lambda 是在 NodeJS 中,您可以编写如下内容:
const zlib = require('zlib');
const YOUR_FILTER = 'filter1';
exports.handler = async (event) => {
const zippedInput = new Buffer(event.awslogs.data, 'base64');
await new Promise((resolve, reject) => {
zlib.gunzip(zippedInput, function (e, buffer) {
const awslogsData = JSON.parse(buffer.toString('utf-8'));
// Conditions on filters to do something
if (awslogsData.subscriptionFilters.includes(YOUR_FILTER)) {
// do something
} else if (awslogsData.subscriptionFilters.includes('your_other_filter')) {
// do something else
}
resolve();
});
})
return 'Hello from Lambda!'
};
我刚开始学习 aws,我创建了几个 cloudwatch 日志自定义指标过滤器并订阅了相同的 lambda 函数来处理一些事情,但我想让我的 lambda 函数执行不同的操作取决于哪个指标过滤器触发它。在 lambda 函数中(在 python 中)我如何知道哪个指标过滤器触发它?
在 Lambda 函数处理程序中,您将拥有一个事件对象,该对象通常包含有关请求的信息。根据 documentation,这是 base64 编码和压缩的。我想这是因为日志预计会变得相当大。
解压缩后的结构为:
{ messageType: 'DATA_MESSAGE',
owner: '123456789123',
logGroup: 'testLogGroup',
logStream: 'testLogStream',
subscriptionFilters: [ 'testFilter' ],
logEvents:
[ { id: 'eventId1',
timestamp: 1440442987000,
message: '[ERROR] First test message' },
{ id: 'eventId2',
timestamp: 1440442987001,
message: '[ERROR] Second test message' } ] }
这可以在 CloudWatch Logs 下的 AWS docs 中找到。
您可以检查事件数据中的 subscriptionFilters
字段以检查哪个过滤器触发了 Lambda。
如果您的 Lambda 是在 NodeJS 中,您可以编写如下内容:
const zlib = require('zlib');
const YOUR_FILTER = 'filter1';
exports.handler = async (event) => {
const zippedInput = new Buffer(event.awslogs.data, 'base64');
await new Promise((resolve, reject) => {
zlib.gunzip(zippedInput, function (e, buffer) {
const awslogsData = JSON.parse(buffer.toString('utf-8'));
// Conditions on filters to do something
if (awslogsData.subscriptionFilters.includes(YOUR_FILTER)) {
// do something
} else if (awslogsData.subscriptionFilters.includes('your_other_filter')) {
// do something else
}
resolve();
});
})
return 'Hello from Lambda!'
};