You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

rsyslog队列溢出丢日志:如何通过配置避免或排查原因?

rsyslog队列溢出日志丢失问题解决思路

配置调整方案(优先尝试)

当前你的rsyslog配置未设置任何队列优化参数,默认使用内存队列,容量有限,新增日志发送节点后,日志量超出内存队列的处理/存储上限,就会触发队列溢出丢日志。可以通过以下配置调整解决:

  1. 启用磁盘辅助队列(最有效)
    给日志写入动作配置磁盘队列,当内存队列满时自动写入磁盘,避免日志丢失。修改你的日志写入规则,添加队列参数:

    $template PerHostLog,"/app/home/syslogs/%FROMHOST%_%$YEAR%%$MONTH%%$DAY%.log"
    # 替换原有规则,添加队列配置
    action(type="omfile" dynaFile="PerHostLog"
           queue.type="LinkedList"
           queue.filename="perhost_queue"
           queue.maxDiskSpace="10G"  # 磁盘队列最大占用空间,根据实际磁盘容量调整
           queue.saveOnShutdown="on"  # 关机时保存队列内容到磁盘,重启后继续处理
           queue.maxRetryCount="-1"  # 无限重试写入,避免临时IO问题导致丢日志
           condition.expression="$fromhost-ip != '127.0.0.1'"
    )
    

    也可以全局配置主队列,对所有日志处理生效:

    $MainQueueType LinkedList
    $MainQueueFilename main_queue
    $MainQueueMaxDiskSpace 20G
    $MainQueueSaveOnShutdown on
    
  2. 调整内存队列大小
    如果暂时不想用磁盘队列,可以先增大内存队列容量(注意:重启服务器会丢失队列中未处理的日志):

    $MainQueueSize 200000  # 默认通常为10000,根据服务器内存情况调整
    
  3. 优化日志写入IO性能
    调整文件写入的缓冲和刷新参数,降低磁盘IO压力:

    $FileFlushInterval 10  # 每10秒刷新一次日志文件,而非实时刷新
    $FileIOBufferSize 64k  # 增大IO缓冲,提升写入效率
    

硬件与网络排查方向

如果配置调整后仍出现问题,需要排查硬件和网络因素:

  • 磁盘IO瓶颈:用iostat -x 1查看磁盘%util指标,如果持续接近100%,说明磁盘写入速度跟不上日志生成速度,需更换更快的存储(如SSD)或扩容存储带宽。
  • 内存/CPU资源不足:用top或htop查看rsyslog进程的CPU、内存占用,如果CPU持续高负载,可能是日志解析/过滤规则过于复杂;内存不足会限制内存队列的可用空间。
  • 网络问题:检查日志接收端口(默认514)的网络流量,用tcpdump port 514查看是否有丢包,或带宽是否饱和。不过队列溢出更多是本地处理能力不足,网络问题通常表现为日志接收不全而非队列溢出。

内容的提问来源于stack exchange,提问作者letakeda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 10:17:34