温馨提示×

如何优化linux syslog

小樊
39
2026-10-22 06:14:42
栏目: 智能运维

优化 Linux 的 syslog(通常指 rsyslog / syslog-ng / 传统 syslogd)可以从性能、磁盘占用、安全性、可维护性几个维度来做。下面以最常见的 rsyslog 为例,兼顾通用思路。


一、先确认你用的是什么 syslog

ps -ef | grep -E "rsyslog|syslog-ng|syslogd"

常见实现:

  • rsyslog(最主流,CentOS/RHEL/Ubuntu 默认)
  • syslog-ng
  • syslogd(老系统)

下面以 rsyslog 为主。


二、性能优化(高并发 / 高日志量)

1. 使用异步队列(非常重要)

默认同步写磁盘,高负载会卡。

# /etc/rsyslog.conf
$WorkDirectory /var/spool/rsyslog
$ActionQueueType LinkedList
$ActionQueueFileName fwdRule1
$ActionResumeRetryCount -1
$ActionQueueSaveOnShutdown on

作用:

  • 内存队列缓冲
  • 崩溃时落盘
  • 重启不丢日志

2. 限制单条日志大小

防止异常程序刷爆日志。

$MaxMessageSize 64k

3. 减少不必要的日志

例如抑制 debug、auth 噪声。

*.debug;mail.none;authpriv.none;cron.none /var/log/messages

或:

*.info;mail.none;authpriv.none;cron.none -/var/log/messages

(- 表示异步写)


三、磁盘与存储优化

1. 使用 logrotate(必须)

避免磁盘写满。

示例 /etc/logrotate.d/syslog:

/var/log/messages {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 0640 root root
    postrotate
        /usr/bin/systemctl kill -s HUP rsyslog.service
    endscript
}

建议:

  • 重要日志:保留 30–90 天
  • 普通日志:7–14 天

2. 分离高频率日志

避免所有日志写同一文件。

auth.* /var/log/auth.log
mail.* /var/log/maillog
cron.* /var/log/cron.log

四、安全性与稳定性优化

1. 限制权限

chmod 640 /var/log/*
chown root:root /var/log/messages

2. 防止日志伪造(远程)

使用 TLS(rsyslog 支持):

# 发送端
*.* @@(o)logserver:6514

# 接收端
module(load="imtcp")
input(type="imtcp" port="6514")

3. 远程集中日志(推荐)

  • 多台服务器 → 一台 log server
  • 减少本地磁盘压力
  • 方便审计
*.* @@logserver.example.com:514

五、调试与监控

1. 查看 rsyslog 状态

systemctl status rsyslog

2. 测试日志是否生效

logger "test message"
tail /var/log/messages

3. 开启内部队列监控(高级)

$ActionQueueTimeoutEnqueue 1000

六、极端场景优化(日志量极大)

  • 使用 imjournal + journald
  • 关闭不需要的 facility
  • 使用 SSD
  • 远程写入 Kafka / ELK
  • 使用 syslog-ng(性能更好)

七、常见误区

❌ 把所有日志都开 debug
❌ 不配 logrotate
❌ 远程日志不加密
❌ 单文件存所有日志


如果你愿意,可以告诉我:

  • 系统版本(CentOS / Ubuntu / 其他)
  • 是否远程日志
  • 日志量级别(几十 MB / 几 GB 每天)

我可以直接给你一套可复制的配置文件。

0 踩