Как отфильтровать журналы AWS для Lambda, чтобы увидеть только console.logs - PullRequest
0 голосов
/ 28 октября 2018

В настоящее время я использую aws logs filter-log-events --log-group-name /aws/lambda/lambda-name --region us-east-1 для получения журналов от лямбды, но возвращаемые журналы довольно ... обширны.Например:

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

Могу ли я получать только сообщения с помощью только команды bash, которая соответствует сценарию npm?Может быть, с помощью grep или find.

1 Ответ

0 голосов
/ 28 октября 2018

Для получения определенных атрибутов в журналах, возвращаемых командой filter-log-events , вы можете использовать jq .Вот пример, который я сделал в Windows PowerShell.

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

Существует также параметр --filter-pattern, здесь есть несколько примеров для

Если команде нужно получить последнийНесколько дней он может использовать параметры --start-time и --end-time команды filter-log-events.

Чтобы получить подписку на журналы 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();
        }
    });
};
...