每当Amazon SQS中的队列“溢出”时,我真的看不到任何方法来调试问题,因为AWS似乎没有为SQS提供任何类型的监视,让您根据有效负载对传输中的消息进行分段-所以我不知道是哪种类型的消息导致了溢出。
- 如何在Amazon SQS中按名称/有效负载/图形上的其他属性对消息进行分段,以便找出导致队列溢出的消息类型?*
注意:我不能使用按消息类型划分队列的方法,因为我使用的是Elastic Beanstalk,它似乎不允许每个工作进程有多个队列(而且每个队列有一个工作进程的成本非常高,因为我通常有很多消息类型)。
我还记录了我在cloudwatch中收到的每一种消息类型,但无法想出一种方法来设置过滤器/度量,使我可以监视消息类型,而不必手动为每一种类型设置自定义过滤器。
统一产品数据:
我最终使用了Cloudwatch Log Insights。它并不理想,因为无法同时按任务名称分组和绘制时间序列数据,但我至少可以绘制按名称分组的任务条形图,然后我可以使用过滤器指定时间范围。以下是一些关于允许您选择虚拟字段的查询格式的文档:https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html
下面是一个查询示例,我使用它来查看运行在django-eb-sqs-worker库上的工作线程接收到的任务:
fields @message
| parse @message "[*] Received Task(*,*" as hash, taskName, restOfMessage
| display @timestamp, taskName, restOfMessage
| filter ispresent(taskName)
| stats count(*) by taskName
以下是用于筛选已完成任务的查询:
fields @message
| parse @message "* Finished Task(*,*. Result: *. Execution time: *s.*" as hash, taskName, restOfMessage1, result, executionTime, additional
| display @timestamp, taskName, result, executionTime, additional
| filter ispresent(taskName)
| stats count(*) by taskName
1条答案
按热度按时间qvsjd97n1#
我监控或调试此类问题的方法是通过cloudwatch日志洞察搜索日志,您可以编写一个查询来统计按类型分组的消息,并获得一段时间内的直方图。
另一种持续监控不同消息类型的方法是使用cloudwatch嵌入式指标格式(EMF)进行日志记录。您可以为每条消息推送一个日志条目,并根据消息类型对其进行维度划分,以便能够在cloudwatch指标中查看它们,并对它们发出警报。但是,由于您提到它主要用于调试,我建议使用cloudwatch日志洞察力。