如何从 Cloudwatch 获取 AWS Lambda 中的日志内容
How can I get log content in AWS Lambda from Cloudwatch
我有这个基本的 lambda,可以将图像发布到 Web 服务器。
从 CloudWatch 中的事件,我可以成功记录在该 lambda 函数中发生的任何事情:
从这个日志组(lambda 函数)我点击了 Stream to AWS Lambda
,选择了一个新的 lambda 函数,我希望在其中接收我的日志并且根本没有放置任何过滤器所以我可以得到所有日志。
Lambda 被正确触发,但问题是当我坚持我在 event
和 context
对象中收到的内容时,我有所有 CloudWatch 日志流信息,但我没有看到任何的日志。
我得到的:
我需要指定一个过滤器让我查看任何日志吗?因为在过滤器部分,如果我不放置任何过滤器并单击测试过滤器,我会在预览 window 中获得所有日志,这似乎意味着它应该将整个日志发送到我的 Lambda 函数。此外,它在我看来是 AWSLogs 中不可读流的日志,它在 Base64 中,但没有得到任何尝试转换它的结果。
是的,如 jarmod 所述,日志经过 gzip 压缩和 base64 编码。
NodeJs 中用于在 lambda 中提取相同内容的示例代码为:
var zlib = require('zlib');
exports.handler = (input, context, callback) => {
var payload = new Buffer(input.awslogs.data, 'base64');
zlib.gunzip(payload, function(e, result) {
if (e) {
context.fail(e);
} else {
result = JSON.parse(result.toString());
console.log(result);
}
});
我有这个基本的 lambda,可以将图像发布到 Web 服务器。 从 CloudWatch 中的事件,我可以成功记录在该 lambda 函数中发生的任何事情:
从这个日志组(lambda 函数)我点击了 Stream to AWS Lambda
,选择了一个新的 lambda 函数,我希望在其中接收我的日志并且根本没有放置任何过滤器所以我可以得到所有日志。
Lambda 被正确触发,但问题是当我坚持我在 event
和 context
对象中收到的内容时,我有所有 CloudWatch 日志流信息,但我没有看到任何的日志。
我得到的:
我需要指定一个过滤器让我查看任何日志吗?因为在过滤器部分,如果我不放置任何过滤器并单击测试过滤器,我会在预览 window 中获得所有日志,这似乎意味着它应该将整个日志发送到我的 Lambda 函数。此外,它在我看来是 AWSLogs 中不可读流的日志,它在 Base64 中,但没有得到任何尝试转换它的结果。
是的,如 jarmod 所述,日志经过 gzip 压缩和 base64 编码。
NodeJs 中用于在 lambda 中提取相同内容的示例代码为:
var zlib = require('zlib');
exports.handler = (input, context, callback) => {
var payload = new Buffer(input.awslogs.data, 'base64');
zlib.gunzip(payload, function(e, result) {
if (e) {
context.fail(e);
} else {
result = JSON.parse(result.toString());
console.log(result);
}
});