Проблема с количеством журналов AWS CloudWatch - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть .netcore, обрабатывающая AWS Lambda, которая записывает журналы в одном потоке журналов AWS CloudWatch в формате json.Приблизительно он записывает около 200/400 записей журнала, каждая из которых содержит около 800 строк (не более 25 КБ) данных json.

Как только обработка Lambda завершена с помощью журналов, другой экспорт Lambda записывает журнал в файл Excel и экспортируетфайл для S3.Проблема в том, что он записывает около 110 журналов только тогда, когда CloudWatch имеет 200 записей.Я вижу в консоли, что есть 200 записей журнала, но файл Excel содержит только от 110 до 116 строк.

Перед экспортом в Excel я сначала проверяю количество записей журнала, и я заметил, что число не подходит,Это должно быть 200, но ошибочно получается как 110. Код, который я пишу:

    using (AmazonCloudWatchLogsClient client = new AmazonCloudWatchLogsClient("xxx", "xxx", "xx-xxxx-2"))
    {
        var request = new FilterLogEventsRequest()
        {
            LogGroupName = GroupName,
            LogStreamNames = new List<string>() { StreamName }
        };
        Task<FilterLogEventsResponse> response = client.FilterLogEventsAsync(request);
        response.Wait();
        if (null != response.Result && null != response.Result.Events)
            result = response.Result.Events.Count;
    }

Я также проверил, что когда я пишу простой текст вместо длинных данных json, я получаю правильное количество в приведенном выше коде.Но, когда журнал содержит длинные данные JSON;Я получаю неправильный счет.Для тестирования, когда я сокращаю данные json до менее чем 200 строк, я получаю правильный счет.

Итак, есть ли предел?Функция FilterLogEventsAsync () не может получить все журналы, когда в них записано большое количество данных json (25 КБ или 800 строк)?

1 Ответ

1 голос
/ 25 апреля 2019

Если вы получаете все события для небольшого примера, но некоторые отсутствуют для большого примера, возможно, FilterLogEvents не сможет вернуть все это в одном ответе.

Проверьте поле nextToken вответ вы получите.Если он не нулевой, вам нужно сделать тот же запрос еще раз, но на этот раз также установите nextToken, который вы получили в предыдущем ответе.Повторяйте это до тех пор, пока ответ не будет содержать nextToken.

https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_FilterLogEvents.html#CWL-FilterLogEvents-request-nextToken

...