AWS CloudWatch日志订阅过滤器解码 [英] AWS CloudWatch log subscription filters decode
本文介绍了AWS CloudWatch日志订阅过滤器解码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用CloudWatch日志订阅过滤器流到Lambda,并将消息发布到SNS主题.但是它将输出乱码消息,并且无法成功解码.
I am using CloudWatch log subscription filters stream to Lambda and publish a message to an SNS topic. But it will output garbled message and can't success decode.
我的输出:
k
%"
jVbB
如果不解码,将输出以下内容:
If not decode will output like this:
{ "awslogs": {"data": "BASE64ENCODED_GZIP_COMPRESSED_DATA"} }
下面是我的代码,它使用的是nodejs:
My code is below and it is using nodejs:
console.log("Loading function");
var AWS = require("aws-sdk");
exports.handler = function(event, context) {
var eventText = JSON.stringify(event, null, 2);
var decodeText = new Buffer(eventText, 'base64').toString('ascii');
console.log("Received event:", eventText);
var sns = new AWS.SNS();
var params = {
Message: decodeText,
Subject: "Test SNS From Lambda",
TopicArn: "arn:aws:sns:region:account:snsTopic"
};
sns.publish(params, context.done);
};
推荐答案
CloudWatch日志以gzip压缩和base64编码的列表形式传递到已订阅的Lambda函数.
CloudWatch Logs are delivered to the subscribed Lambda function as a list that is gzip-compressed and base64-encoded.
以下是如何解码和解压缩日志列表的示例:
Here is an example of how to decode and unzip the list of logs:
const zlib = require('zlib');
exports.handler = async (event) => {
if (event.awslogs && event.awslogs.data) {
const payload = Buffer.from(event.awslogs.data, 'base64');
const logevents = JSON.parse(zlib.unzipSync(payload).toString()).logEvents;
for (const logevent of logevents) {
const log = JSON.parse(logevent.message);
console.log(log);
}
}
};
这篇关于AWS CloudWatch日志订阅过滤器解码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文