我大概可以使用以下命令从 CloudWatch logStream 获取所有日志事件:
const cwl = new AWS.CloudWatchLogs();
cwl.getLogEvents({logGroupName, logStreamName}, (err, results) => {
for (let r of results.events) {
console.log(r.message);
}
});
但是,我的问题是 - 有没有办法流式传输日志而不是一次读取所有日志?似乎对于某些日志流,可能有一百万个事件/记录,因此一次读取的数据可能太多?
我查看了cloudwatchlogs.d.ts的声明文件:https://github.com/aws/aws-sdk-js/blob/master/clients/cloudwatchlogs.d.ts
看不到任何可以将日志流式传输到客户端的内容。
您无法直接流式传输它。
来自 API getLogEvents
响应包含 nextForwardToken
和 nextBackwardToken
。您可以在后续请求中使用这些事件来获取下一批事件,如果无法在单个响应中返回所有事件。看这里: https://docs.aws.amazon.com/cli/latest/reference/logs/get-log-events.html
或者,您可以使用 createExportTask
API 将数据导入 S3 并从那里流式传输。不确定导出的数据是否为可流式传输格式。https://docs.aws.amazon.com/cli/latest/reference/logs/create-export-task.html