温馨提示×

为何linux日志记录不全

小樊
57
2026-09-20 18:40:24
栏目: 智能运维

Linux 日志记录不全是一个常见但原因多样的问题,通常不是“系统故意不记”,而是配置、资源、权限或机制本身限制导致的。下面按常见原因分类说明,并给出排查方向。


一、日志系统本身的问题

1. rsyslog / syslog-ng 未运行或异常

很多 Linux 仍使用 rsyslog:

systemctl status rsyslog

如果停止或卡死,日志会丢失。

表现:

  • /var/log/messages 不更新
  • 某些服务日志为空

解决:

systemctl restart rsyslog
journalctl -u rsyslog

2. systemd-journald 与 rsyslog 没对接

使用 systemd 的系统有两套日志:

  • journald(二进制)
  • rsyslog(文本)

如果没配置转发:

# /etc/rsyslog.conf
module(load="imjournal")

否则:

  • journalctl 有
  • /var/log/* 没有

二、日志被“合理”地丢弃或限制

3. journald 限制了大小 / 时间

/etc/systemd/journald.conf

常见限制:

SystemMaxUse=500M
MaxRetentionSec=2week

结果:

  • 老日志被自动清理
  • 重启后早期日志消失

查看:

journalctl --disk-usage

4. 日志级别(LogLevel)设置过高

服务或内核可能只记录 warning 以上:

  • 内核:
cat /proc/sys/kernel/printk
  • SSH:
/etc/ssh/sshd_config
LogLevel INFO

结果:

  • DEBUG / INFO 不记录

三、磁盘或权限问题

5. 磁盘满了

df -h

日志写不进去时:

  • 直接丢弃
  • 不报错(rsyslog 静默失败)

6. 日志文件权限错误

ls -l /var/log

如果权限不对:

  • 服务无写权限
  • 日志为空

四、服务自身“不记录”

7. 程序用 stdout / stderr,而不是 syslog

容器、Python、Java 常见:

docker logs xxx

而不是 /var/log

解决:

  • 配置服务写 syslog
  • 或采集 stdout

8. 程序崩得太快

进程在 logging 初始化前就退出:

  • 没有任何日志
  • 只有 core / exit code

五、被“优化”掉的日志

9. logrotate 太激进

/etc/logrotate.d/

可能:

  • 每天压缩
  • 只留 3 天

10. audit / SELinux 限制

  • auditd 未开
  • SELinux 拒绝写日志
ausearch -m AVC

六、快速排查清单(建议顺序)

# 1. 服务状态
systemctl status rsyslog
systemctl status systemd-journald

# 2. 磁盘
df -h

# 3. journal 是否有
journalctl -xe

# 4. 日志配置
cat /etc/rsyslog.conf
cat /etc/systemd/journald.conf

# 5. 服务自身日志配置

总结一句话

Linux 日志“不全”,大多不是 bug,而是被限制、被分流、被清理或没接好。

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

  • 哪个日志不全(系统 / 应用 / 安全)
  • 发行版(CentOS / Ubuntu / 容器)
  • 具体现象(空文件 / 只有部分)

我可以给你针对性配置示例。

0 踩