提供对发送到SQS队列的消息总数进行实时监视的最佳方法是什么?
我目前已经设置了一个Grafana仪表板来监视SQS队列,但是似乎每两分钟刷新一次。我正在寻找一些可以实时更新的内容,例如每秒刷新一次。
我正在使用的队列每分钟消耗大约6,000条消息。
我的同事已经构建了一些东西,用于实时监视到S3存储桶的上传,使用lambda填充PostgreSQL数据库并使用Grafana进行查询。
这是实现这一目标的最佳方法吗?有没有更有效的方法?
答案 0 :(得分:1)
SQS不是事件驱动的-必须对其进行轮询。因此,每次将消息放入队列或从队列中删除消息时都不会发生事件。使用S3到Lambda,每次创建或删除对象时都会实时发送一个事件。
您可以更改SQS的轮询间隔,并根据需要快速轮询。但是请注意,轮询确实要付出代价。每月前100万个请求是免费的。
答案 1 :(得分:0)
我不确定您要完成什么(我会在我的想法后解决),但是肯定有几种方法可以实现。每个都有正负。
在每个产生或使用消息的地方,都增加或减少cloudwatch指标(或datadog,librato等)。它仍然基于轮询,但是您可以将粒度降低到15-60秒(即使使用Cloudwatch也是如此)。这里最大的问题是它容易出错(如果SQS消息超时并被重新处理会发生什么?)。
创建辅助队列。进入此队列的每个消息都是“添加”或“删除”消息。附加一个lambda,容器,自动伸缩组以处理队列并更新RDS或DynamoDB表中的指标。根据需要查询表。
使用其他队列处理系统代替SQS。我已经看到RabbitMQ和Sensu在非常大的环境中使用,它们每分钟可以轻松处理6,000条消息。
请记住,队列中不仅有消息数量,还有更多指标。我最近非常喜欢roximategegeofoldestmessage,因为它表明是否正在正确处理消息。这是有关最有用的SQS指标的博客文章。叫做How to Monitor Amazon SQS with CloudWatch