【问题标题】:AWS CloudWatch log count issueAWS CloudWatch 日志计数问题
【发布时间】:2019-04-24 12:00:37
【问题描述】:

我有一个 .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 行时,我得到了正确的计数。

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

【问题讨论】:

    标签: amazon-cloudwatch


    【解决方案1】:

    如果您在小示例中获取所有事件,但在大示例中缺少一些事件,则 FilterLogEvents 可能无法在单个响应中返回所有事件。

    检查您收到的回复中的nextToken 字段。如果它不为空,您需要再次发出相同的请求,但这次还要设置您在上一个响应中得到的nextToken。重复此操作,直到响应不包含 nextToken

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

    【讨论】:

    • 正是这里需要的。通过这种方式解决了这个问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多