AWS CloudWatch日志计数问题

问题描述 投票:0回答:1

我有一个.netcore处理AWS Lambda,它以json格式将日志写入一个AWS CloudWatch日志流。大约写入大约200/400个日志条目,每个条目包含大约800行(最大25kb)的json数据。

一旦处理Lambda完成日志,另一个导出Lambda将日志写入excel文件并将文件导出到S3。问题是,当CloudWatch有200个条目时,它只会写入大约110个日志。我可以在控制台中看到有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行时,我得到正确的计数。

那么,有没有限制?当有大量的json数据(25kb或800行)写入时,FilterLogEventsAsync()函数是否无法获取所有日志?

amazon-cloudwatch
1个回答
1
投票

如果您正在获取所有事件的小例子,但有些例子因大例子而丢失,那么FilterLogEvents可能无法在单个响应中返回所有事件。

检查你得到的答案中的nextToken字段。如果它不是null,你需要再次发出相同的请求,但这次也设置了你在之前的响应中得到的nextToken。重复此操作直到响应不包含nextToken

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

© www.soinside.com 2019 - 2024. All rights reserved.