如何过滤 Lambda 的 AWS 日志以仅查看 console.logs

How to filter AWS logs for Lambda to see just console.logs

我目前正在使用 aws logs filter-log-events --log-group-name /aws/lambda/lambda-name --region us-east-1 从 lambda 获取日志,但返回的日志相当......广泛。 例如:

{
  "ingestionTime": *, 
  "timestamp": *, 
  "message": "START RequestId: * Version: $LATEST\n", 
  "eventId": "*", 
  "logStreamName": "2018/10/26/[$LATEST]*"
}... 

我可以仅使用适合 npm 脚本的 bash 命令来获取消息吗?也许用 grep 或 find。

获取filter-log-events command you can use jq返回的日志中的特定属性。这是我在 windows powershell 中做的一个例子。

aws logs filter-log-events --log-group-name <yourLogGroup> --region <yourRegion> | jq '.events[].message'

还有一个--filter-pattern参数,其中有一些例子here

如果命令需要获取最近几天的信息,可以使用 filter-log-events 命令的 --start-time--end-time 参数。

要实时订阅 CloudWatch 日志,项目可以使用 put-subscription-filter 命令将日志写入另一个 Lambda 函数进行处理。这是 nodejs 中的示例函数:

https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html#LambdaFunctionExample

var zlib = require('zlib');
exports.handler = function(input, context) {
    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('ascii'));
            console.log("Event Data:", JSON.stringify(result, null, 2));
            context.succeed();
        }
    });
};