node.js - 如何在 node.js 中从 AWS Lambda 将原始 JSON 记录到 Cloudwatch?

标签 node.js amazon-web-services aws-lambda amazon-cloudwatch console.log

我有一些基于 node.js 的 Lambda 正在记录数据。
为了正确查询和过滤数据等,我想从我的 Lambda 记录为纯 JSON 数据。
然而,当我做一个常规 console.log它生成一个普通的数据字符串。

console.log({a:1,b:2,x:"xxx"})
结果如下:
2020-04-29T14:46:45.722Z    3f64c499-fbae-4a84-996c-5e5f0cb5302c    INFO    { a: 1, b: 2, x: 'xxx' }
上面记录的行似乎无法使用 CloudWatch 中的各种过滤器匹配选项作为 JSON 进行搜索。
我曾尝试调用 AWS.CloudWatchLogs API 直接,但由于我使用 lambda,我无法在函数调用之间维护 token ,所以我不确定这是要走的路。
有没有其他人成功地从 Javascript Lambda 记录原始 JSON?

最佳答案

问题是console.log()不直接进入 stdout/stderr。您可以看到使用此 Lambda:

const process = require('process');

exports.handler = async (event) => {
    console.log("message 1");
    process.stdout.write("message 2\n");
};

如果您调用它,您将看到如下输出:
START RequestId: 6942bebc-1997-42cd-90c2-d76b44c637283 Version: $LATEST
2020-04-29T17:06:07.303Z    6935bebc-1d97-42cd-90c2-d76b4a637683    INFO    message 1
message 2
END RequestId: 6942bebc-1997-42cd-90c2-d76b44c637283

因此,要获得您想要的输出,您可以重新定义 console.log转到 stderr,或直接写入 stdout/stderr。

或者,您可以使用写入 stdout/stderr 的日志框架,这可以让您更灵活地编写消息。我不做 Node 开发,但我听说 Winston是标准的日志框架。

关于node.js - 如何在 node.js 中从 AWS Lambda 将原始 JSON 记录到 Cloudwatch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61505035/

相关文章:

c# - AWS Systems Manager 参数存储 : Lambda function hangs

amazon-web-services - 如何在 AWS API Gateway 中不返回任何内容?

javascript - 如何包含适当的 JavaScript 文件版本(缩小版与原始版)?

amazon-web-services - 从SQS FIFO队列: The receipt handle has expired中删除消息

node.js - 使用 Nginx 时 socket.io 出现 CORS 错误

ruby-on-rails - 在 Rails 应用程序中向 PostgreSQL 提供 SSL 证书

amazon-web-services - 在 AWS Lambda 上配置 CORS 响应 header ?

amazon-web-services - 使用 Lambda - Node.js 获取调用 AWS HTTP API 的 URL

javascript - 当有大量回调时,如何在异步函数中正确返回值

node.js - 如何使用 TypeScript 制作 shell 可执行 Node 文件