记一次rabbitmq 消息不能接收故障的处理

问题

当时比较怪异,现象是通过rabbitmq 的management可以发送消息(消息内容比较小,很简单的),但是通过代码没有任何报错
但是消息就是不能看到(management 界面)

排错处理

开始以为是代码处理问题,但是没有异常日志,也怀疑因为代码发布造成队列错误造成消息写入错误,我一般的此类问题的方式
就是基于arthas 观察调用链(同时也可以看到输入以及输出)
对应spring boot amqttemplate 的处理(以下命令没啥多大问题,因为业务比较小,可以执行运行)

 
watch  org.springframework.amqp.rabbit.core.RabbitTemplate  convertAndSend '{params,returnObj}' -x 5 

但是通过测试观测,数据是正确的(输入以及输出,而且就是没有一样)说明mq 的监听服务的协议处理是正常的
当时就有点费事了,然后登录mq 服务器,查看mq 日志,观测系统的cpu 以及内存情况,发现都是正常的,然后习惯性的看了下磁盘
空间,很不好的是磁盘100%了,可用20多M了,问题应该就是这个了(mq 数据需要落盘,磁盘100%肯定是会有问题的)

解决

核心就是清理磁盘空间,比如日志的一些其他不需要的

造成问题的原因

以为新版本mq 支持基于prometheus 的报警,因为服务器的特殊性,我们了vmagent 进行数据的推送,但是prometheus 存储服务异常了
vmagent 会将没有发送的数据落盘然后会进行重试,然后就占满了磁盘空间了。。。

复盘

系统的监控很重要,同时对于监控的监控也很重要,多管齐下才能保证系统的可靠以及稳定

参考资料

https://www.rabbitmq.com/disk-alarms.html
https://www.rabbitmq.com/logging.html

posted on 2022-06-07 00:42  荣锋亮  阅读(1218)  评论(0编辑  收藏  举报

导航