如何过滤Lambda的AWS日志,只查看console.log



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

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

我可以只使用一个适合npm脚本的bash命令来发出消息吗?也许是grep或者find。

要获取filter log events命令返回的日志中的特定属性,可以使用jq。下面是我在windows powershell中做的一个例子。

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

还有一个--filter-pattern参数,这里有一些的例子

如果该命令需要获取最后几天,则可以使用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();
}
});
};