AWS CloudWatch日志限制

3

我正在寻找集中化的解决方案,将我的应用程序日志从数据库(RDS)中移动。

我想使用CloudWatchLog,但注意到PutLogEvents请求有限制:

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

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

另一种解决方案是累积日志并批量发送PutLogEvents,但这意味着我被迫使用数据库来累积记录。

所以问题是:

  1. 也许我错了,每秒5个请求的限制并不是那么严格?
  2. 是否有其他解决方案值得考虑,例如DynamoDB?
3个回答

3

PutLogEvents的设计目的是按照定义放置多个事件(正如其名称所示:PutLogEvent"S" :))。Cloudwatch日志代理程序会自动执行此操作,您无需担心。

但是请注意:我不建议您生成过多的日志(例如不要在生产环境中运行调试模式),因为随着日志量的增加,Cloudwatch日志可能变得非常昂贵。


谢谢你的回答Tom,能否请你澄清一下: “Cloudwatch日志代理是自动完成的,您不必担心这个问题。” 我正在直接从我的应用程序中调用PutLogEvents,是否还有其他方法将我的应用程序日志发送到CloudWatchLog? - Observer
是的,您可以安装CloudWatch日志代理,并指定要推送到AWS的文件。请参阅此处的文档:http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/DeveloperGuide/QuickStartEC2Instance.html - Tom
我明白了,这意味着我应该记录到文件系统中。目前我正在寻找基于API调用的(服务)解决方案。感谢您的建议。 - Observer
是的,这确实是基于文件的,但是似乎很容易使用代理与文件一起使用,而不是直接发送到CloudWatch。使用PutLogEvents会带来什么好处?您是否有特定的用例需要使用它?在这种情况下,您将不得不缓冲日志以遵守每秒5个请求的限制。 - Tom
另一个我刚想到的解决方案:将您的事件发送到 SQS 队列而不是 CloudWatch 日志,然后使用 Lambda 函数或工作程序轮询此队列,将事件放入 CloudWatch 日志中,以避免超过限制。 - Tom
谢谢Tom,使用SQS的想法很好,值得研究。 - Observer

0

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

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

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

它是为此范围而设计的,并且表现出色。

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

我希望这样能有所帮助。


谢谢Maurizio,确实有帮助,但我更喜欢不需要我管理的解决方案。再次感谢。 - Observer
我明白你的意思。 你有没有尝试看一下这篇官方亚马逊博客文章? https://aws.amazon.com/blogs/aws/cloudwatch-log-service/ - Maurizio Benedetti

0

如果您直接从应用程序调用此API:简短的答案是您需要批处理日志事件(对于PutLogEvents,它是5)。

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

元信息:我建议您原型制作并确保它适用于您拥有的日志量。此外,请记住,由于CloudWatch API的工作方式,每次只能有一个应用程序/用户推送到日志流中(请参见必须传递的令牌),因此您可能需要使用多个流,每个用户/日志类型一个,以确保您的应用程序不会竞争日志。

元元信息:考虑一下如果记录子系统失败时您的应用程序的行为方式,以及您是否可以接受可能丢失日志的可能性(即对于您始终/总是获得日志的保证是否很重要?)。这可能会驱动您所做的事情/您最终选择的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接