首页 > 解决方案 > 适用于 JavaScript CloudWatch Logs 的 AWS 开发工具包 - GetLogEventsCommand 未获取日志,可能是由于日志流大小问题?

问题描述

我在 Docker 平台上通过 AWS Elastic Beanstalk 部署了多个 Node.js 应用程序。我可以通过 AWS 控制台毫无问题地手动下载每个环境的完整日志。假设我有两个 AWS Elastic Beanstalk 环境:env-aenv-b.

我已经开始使用适用于 JavaScript 的 AWS 开发工具包,特别@aws-sdk/client-cloudwatch-logs是在 Node 应用程序中,这样我就可以以编程方式获取日志,在自定义 UI 中呈现它们,并根据需要进行自己的分析。

我正在运行以下代码以获取给定应用程序的日志事件(伪代码):

// IMPORTS

const { 
  CloudWatchLogsClient, 
  DescribeLogStreamsCommand,
  GetLogEventsCommand
} = require("@aws-sdk/client-cloudwatch-logs");

// SETUP

const awsCloudWatchClient = new CloudWatchLogsClient({
  region: process.env.AWS_REGION,
});

// APPLICATION CODE

const logGroupName = getLogGroupName(); 

// Get the log streams for the given log group. 
const logStreamRes = await awsCloudWatchClient.send(new DescribeLogStreamsCommand({
  descending: true,
  logGroupName,
  orderBy: 'LastEventTime',
  limit: 50,
}))

// For testing purposes, I'll just use the first log stream name I find. 
const logStreamName = logStreamRes.logStreams[0].logStreamName;

// Get the log events for the first log stream. 
const logEventRes = await awsCloudWatchClient.send(new GetLogEventsCommand({
  logGroupName,
  logStreamName,
}));

const logEvents = logEventRes.events; 

env-a现在,我可以使用此代码轻松获取日志事件。但是,当GetLogEventsCommand 尝试获取env-b. 如果我通过 AWS 控制台手动下载日志,我肯定可以看到日志存在 - 但由于我尚不清楚的原因,AWS SDK 似乎无法识别这一点。

这里有一些有趣的细节可能有助于诊断问题。

env-a在 Elastic Beanstalk 中进行配置,以便每次新部署(可能每天发生多次)替换 EC2 实例。另一方面,env-b配置为将新的应用程序代码部署到现有的 EC2 实例,而无需实际替换它们。由于日志流映射到 EC2 实例,env-a has a high number of pretty small log streams whereas 因此 env-b` 为其每个长期存在的 EC2 实例提供了三个非常大的日志流。日志的大小很容易超过 1 MB。

考虑到GetLogEventsCommand返回大小最大为 1 MB 的响应,我是否达到了某个大小限制并且 AWS 开发工具包通过返回 0 个日志事件来处理它env-b?我尝试limitGetLogEventsCommand上面设置 a ,但仍然导致 AWS 开发工具包返回 0 个事件env-a

另一个有趣的注意事项:如果我转到 Amazon CloudWatch > Log Group 并选择env-a's Log Group,我可以毫无问题地查看每个日志流的日志事件。如果我尝试查看env-b的三个非常大的日志流的日志事件,我会在控制台上遇到“超出速率”错误。这似乎证实了日志流的事件计数对于 AWS 控制台和 AWS 开发工具包来说都太大而无法处理,尽管我不确定。

我可以做些什么来让 AWS 开发工具包获取env-b日志吗?我如何进一步确认日志流大小过大是这里的罪魁祸首?如果是这种情况,我能做些什么,例如清除日志?

或者这可能是我没有看到的其他问题吗?

标签: amazon-web-servicesaws-sdkamazon-cloudwatchlogs

解决方案


推荐阅读