我目前正在使用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();
}
});
};