RabbitMQ的日志文件默认存储在Ubuntu系统的/var/log/rabbitmq/目录下。主要包含两类文件:
rabbit@<hostname>.log(如rabbit@ubuntu-server.log),记录RabbitMQ节点的启动/停止、连接建立/关闭、队列操作、消息收发等业务日志;rabbit@<hostname>-sasl.log,记录Erlang虚拟机及RabbitMQ启动过程中的底层错误(如内存不足、端口冲突等)。sudo find / -name "rabbit*@*.log"命令全局搜索。tail -f命令实时跟踪日志文件的新增内容,适用于排查实时问题(如连接异常、消息积压)。sudo tail -f /var/log/rabbitmq/rabbit@ubuntu-server.logless或more命令分页浏览日志文件,适合查看历史日志。sudo less /var/log/rabbitmq/rabbit@ubuntu-server.log(按空格翻页,q退出)。grep命令过滤日志中的关键信息(如错误、警告、特定队列名)。sudo grep -i "error" /var/log/rabbitmq/rabbit@ubuntu-server.log(查找所有错误日志)。RabbitMQ支持6种日志级别(从低到高):none(不记录)、critical(严重错误)、error(一般错误)、warning(警告)、info(常规信息)、debug(调试信息)。级别越高,记录的日志越详细。
rabbitmqctl命令动态调整所有接收器的日志级别(如设置为debug)。sudo rabbitmqctl -n rabbit@ubuntu-server set_log_level debug/etc/rabbitmq/rabbitmq.conf,添加或修改以下内容:log.level = debug # 全局日志级别 log.file.level = debug # 文件输出的日志级别 log.console.level = debug # 控制台输出的日志级别(若启用) 保存后重启RabbitMQ服务:sudo systemctl restart rabbitmq-server。默认情况下,RabbitMQ日志会持续追加到同一文件,可能导致文件过大。需通过日志轮转限制文件大小和保留数量。
rabbitmq.conf中添加以下参数,实现基于文件大小的轮转(如10MB/个,保留5个归档文件):log.file.rotation.size = 10485760 # 10MB log.file.rotation.count = 5 # 保留5个归档文件 /etc/logrotate.d/rabbitmq-server文件,添加以下配置(每周轮转,保留7个归档文件,压缩旧日志):/var/log/rabbitmq/*.log { weekly rotate 7 compress delaycompress missingok notifempty postrotate if [ -f /var/run/rabbitmq.pid ]; then /usr/lib/rabbitmq/bin/rabbitmqctl rotate_logs fi endscript } 保存后,logrotate会自动按配置执行轮转。connection refused(端口未开放/防火墙拦截)、authentication failed(用户名/密码错误);memory limit reached(内存超过上限,需调整vm_memory_high_watermark)、out of memory(内存耗尽);disk free space limit reached(磁盘空间不足,需清理或扩容);running_partitioned_network(集群节点间网络中断,需检查网络连通性)。grep快速定位故障日志(如sudo grep -i "connection refused" /var/log/rabbitmq/rabbit@ubuntu-server.log);awk筛选特定时间段的日志(如sudo awk '/2025-10-10 10:00/,/2025-10-10 11:00/' /var/log/rabbitmq/rabbit@ubuntu-server.log);RabbitMQ默认提供amq.rabbitmq.log(topic类型)交换器,用于收集节点自身的日志。可通过以下步骤将日志发送到指定队列:
sudo rabbitmq-plugins enable rabbitmq_event_exchange,启用后会创建amq.rabbitmq.event交换器(替代旧版的amq.rabbitmq.log)。queue.logs),用路由键#(匹配所有级别)绑定到amq.rabbitmq.event交换器:sudo rabbitmqadmin declare queue name=queue.logs sudo rabbitmqadmin declare binding source=amq.rabbitmq.event destination=queue.logs routing_key='#' pika库)或工具(如rabbitmqctl consume)从queue.logs队列中获取日志,实现自定义处理(如写入数据库、发送告警)。通过以上步骤,可全面查看、分析RabbitMQ日志,快速定位并解决常见问题,保障消息队列的稳定运行。