温馨提示×

ubuntu syslog为何启动慢

小樊
40
2026-09-20 09:53:15
栏目: 智能运维

在 Ubuntu 上 syslog(通常是 rsyslog 或 syslog-ng)启动慢,通常不是 syslog 本身的问题,而是它依赖的服务、资源或配置导致。下面按常见原因和排查方法说明。


一、最常见原因

1️⃣ 等待网络就绪(非常常见)

syslog 若配置为:

  • 远程日志(*.* @logserver)
  • 监听 TCP/UDP 端口
  • 使用 DNS 主机名

systemd 会等 network-online.target

现象

systemd[1]: rsyslog.service: Unit is starting
# 卡在 network-online 很久

检查

systemctl status rsyslog
systemctl cat rsyslog | grep network

解决

  • 不需要远程日志时:
    • 注释 /etc/rsyslog.conf 中的远程配置
  • 或关闭严格网络等待:
sudo systemctl disable systemd-networkd-wait-online

2️⃣ DNS 解析慢 / DNS 超时

syslog 启动时会解析主机名或日志服务器

现象

  • 启动明显卡在 10–30 秒
  • /etc/resolv.conf 配置异常

检查

getent hosts $(hostname)
nslookup logserver

解决

  • 在 /etc/hosts 加:
127.0.0.1  your-hostname
  • 或临时把 DNS 指向 127.0.0.1

3️⃣ 磁盘 I/O 或文件系统检查

syslog 启动时要:

  • 创建日志文件
  • 写 /var/log

若磁盘慢、损坏或刚做过 fsck,会拖慢

检查

dmesg | grep -i error
systemctl status systemd-fsck*

4️⃣ 大量历史日志或文件描述符问题

/var/log 日志过多,rsyslog 启动扫描慢

检查

du -sh /var/log
ls /var/log | wc -l

解决

journalctl --vacuum-size=200M
logrotate -f /etc/logrotate.conf

5️⃣ systemd 服务依赖过强

rsyslog 默认依赖:

After=network.target
After=syslog.socket

但某些第三方配置会加:

After=mysql.service
After=remote-fs.target

检查

systemctl cat rsyslog

二、如何精确定位(推荐)

看启动耗时

systemd-analyze blame | grep rsyslog
systemd-analyze critical-chain rsyslog.service

看日志

journalctl -b -u rsyslog

三、快速优化建议(总结)

✅ 不需要远程日志 → 去掉 @host
✅ 加 /etc/hosts 解析本机
✅ 禁用 networkd-wait-online(如非服务器)
✅ 清理 /var/log
✅ 不依赖远程挂载文件系统


如果你愿意,可以贴:

  • systemctl status rsyslog
  • systemd-analyze blame
  • /etc/rsyslog.conf 关键部分

我可以帮你精确判断是哪一步慢。

0 踩