我当前正在使用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。
答案 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中的示例函数:
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();
}
});
};