3

我正在尝试找到集中式解决方案来将我的应用程序日志从数据库 (RDS) 中移出。

我正在考虑使用 CloudWatchLog,但注意到 PutLogEvents 请求有限制:

PutLogEvents 请求的最大速率是每个日志流每秒 5 个请求。

即使我将我的日志分成许多流(基于 EC2,日志类型 - 错误、信息、警告、调试),5 req 的限制。每秒对于活动应用程序仍然非常有限。

另一种解决方案是以某种方式累积日志并发送带有日志记录批处理的 PutLogEvents,但这意味着我不得不使用数据库来累积这些记录。

所以问题是:

  1. 可能是我错了,限制为 5 req。每秒不是那么限制吗?
  2. 还有其他我应该考虑的解决方案吗,例如 DynamoDB?
4

3 回答 3

3

PutLogEvents is designed to put several events by definition (as per it name: PutLogEvent"S") :) Cloudwatch logs agent is doing this on its own and you don't have to worry about this.

However please note: I don't recommend you to generate to much logs (e.g don't run debug mode in prodution), as cloudwatch logs can become pretty expensive as your volume of log is growing.

于 2016-04-15T09:22:24.650 回答
0

我的建议是在 AWS 实例上使用 Logstash 解决方案。

或者,您可以在另一个现有实例或容器上运行 logstash。

https://www.elastic.co/products/logstash

它是为这个范围设计的,而且做得非常好。

Cloudwatch,主要不是为您的需求而设计的。

我希望这会有所帮助。

于 2016-04-15T09:04:59.563 回答
0

如果您直接从应用程序调用此 API:简短的回答是您需要批量记录事件(对于 PutLogEvent s是 5 )。

如果您正在将日志写入磁盘,然后您正在推送它们,那么已经有一个代理知道如何推送日志 ( http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/QuickStartEC2Instance.html )

Meta:我建议您对此进行原型设计,并确保它适用于您拥有的日志卷。另外,请记住,由于 cloudwatch api 的工作方式,一次只有一个应用程序/用户可以推送到日志流(请参阅您必须传入的令牌) - 因此您可能需要使用多个流,每个用户/可能每个日志类型一个,以确保您的应用程序不会竞争日志。

Meta Meta:考虑一下如果日志子系统出现故障,您的应用程序会如何表现,以及您是否可以忍受丢失日志的可能性(即始终/始终保证您将获得日志对您来说至关重要吗?)。这可能会推动你做什么/你最终选择什么解决方案。

于 2016-04-15T18:02:23.897 回答