faq_2026-09-28_st_5
title: “CentOS重启rsyslog后一直刷错误日志退不出来怎么办” description: “改完转发配置重启 rsyslog,终端开始狂刷错误日志,Ctrl+C 无效,断开 SSH 重连还是刷屏界面。典型根因是转发目标不可达时错误被反复记录、自我放大,甚至与 journald 构成互喂环路。本文给出另开会话止损、清队列、定位报错、修复目标与拆环路的全套步骤。” slug: centos-rsyslog-error-log-flood date: 2026-09-28 categories: [“常见问答”] draft: false
改了两行转发配置,systemctl restart rsyslog 敲下去,屏幕瞬间开始滚错误日志,一行接一行停不下来。Ctrl+C 按了没反应,把 SSH 断开重连,进去还是那个刷屏的界面,人像被锁在了一台失控的显示屏前面。
原因分析
刷屏多半不是新错误多,而是错误在被循环制造。头一类根因:转发目标不可达。rsyslog 收到日志要发往远端服务器,远端不通时,「发送失败」这件事本身也会作为错误被记录,而错误日志同样要走一遍转发——再度失败、再度记录,雪球就这么滚起来,队列里还堆着发不出去的存量。
第二类是环路放大:本机系统日志经由 journald 流进 rsyslog,rsyslog 报的错又被 journald 记下、再喂回 rsyslog,两两互喂,一条变两条、两条变四条。至于退不出来,是因为刷屏的源头是系统日志服务本身,Ctrl+C 送到的前台进程并不是病根,按键自然无效——治它要从服务下手,不是从终端下手。
分步解决
- 另开会话紧急止损。刷屏的那个窗口不用管它,新开一个 SSH 会话连上去,systemctl stop rsyslog 先把服务停掉,刷屏应声而止。原窗口留着事后核对,不急着关。
- 看清队列残留。停服后检查转发队列目录有没有异常增大的文件,配置了磁盘队列的环境里,堆积的队列按需清理,避免重启后继续消化旧账。
- 定位报错本体。新会话里用 journalctl -u rsyslog 调出服务日志,找刷屏开始前的头几条错误——是连接超时、域名解析失败还是规则问题,头一条往往就是病根。
- 修转发目标。核对远端地址与端口、远端 514 监听是否开启、途经防火墙是否放行。目标短期修不好的,给这条转发动作配置失败策略(丢弃或有限重试),别让发不出去的日志反噬本机。
- 排查环路。检查有没有把 rsyslog 输出又转回本机的规则,入站模块与转发目标逐条过一遍,两两互喂的结构必须拆掉一处。
- 恢复后盯一分钟再收工。start 之后观察日志一分钟无新增错误,回头再关那个刷屏的旧窗口,改动的配置另存一份备份在机外。
预防
集中日志上线前,先在测试机把转发目标打通再动生产;改配置安排在低峰时段,改前备一份原配置。转发规则天生自带「失败也会说话」的脾气,提前给它配好失败策略,等于堵住了刷屏的口子。