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

时间:2018-10-28 17:22:26

标签: amazon-web-services grep amazon-cloudwatch

我当前正在使用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。

1 个答案:

答案 0 :(得分:2)

要在filter-log-events命令返回的日志中获取特定属性,可以使用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();
        }
    });
};