amazon-web-services - 适用于 JavaScript CloudWatch Logs 的 AWS 开发工具包 - GetLogEventsCommand 未获取日志,可能是由于日志流大小问题?
问题描述
我在 Docker 平台上通过 AWS Elastic Beanstalk 部署了多个 Node.js 应用程序。我可以通过 AWS 控制台毫无问题地手动下载每个环境的完整日志。假设我有两个 AWS Elastic Beanstalk 环境:env-a
和env-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
?我尝试limit
在GetLogEventsCommand
上面设置 a ,但仍然导致 AWS 开发工具包返回 0 个事件env-a
。
另一个有趣的注意事项:如果我转到 Amazon CloudWatch > Log Group 并选择env-a
's Log Group,我可以毫无问题地查看每个日志流的日志事件。如果我尝试查看env-b
的三个非常大的日志流的日志事件,我会在控制台上遇到“超出速率”错误。这似乎证实了日志流的事件计数对于 AWS 控制台和 AWS 开发工具包来说都太大而无法处理,尽管我不确定。
我可以做些什么来让 AWS 开发工具包获取env-b
日志吗?我如何进一步确认日志流大小过大是这里的罪魁祸首?如果是这种情况,我能做些什么,例如清除日志?
或者这可能是我没有看到的其他问题吗?
解决方案
推荐阅读
- rust - 如何转换选项中的内部值?
- react-native - 如何在 React Native 中更改 TextInput 光标位置?
- javascript - 从 router.js 异步调用 vuex 操作有多好?
- css - 按钮上的 chrome 中的粘滞悬停状态
- r - 带有 by 的 unique.data.table 的行为是否类似于带有 .keep_all = TRUE 的 dplyr::distinct?
- android - Android Studio Preview 4.1 Canary 10 中的构建错误
- webpack - regeneratorRuntime 未定义 Gulp + Webpack + Babel
- javascript - 带有外部指纹扫描仪的 React-Native 生物识别(secugen,futronics)
- apache-kafka - 即使REST程序具有INT,Kafka也会将消息密钥生成为STRING?
- r - 如何使用摘要创建变量向量?