日志管理与查看:journald、logrotate、集中日志

用 journalctl 快速定位问题,用 logrotate 防止日志撑爆磁盘,并了解何时该上集中日志。

服务器出问题时,日志是第一手线索。现代 Ubuntu/Debian 系统里日志分两套:systemd 的 journald(结构化、按服务查)和传统的 /var/log 文本文件。学会查、学会控制体积,是运维你自己 VPS 的基本功。

用 journalctl 查 systemd 日志

journald 收集所有由 systemd 管理的服务输出。最常用的几种查法:

# 查某个服务的日志(-u 指定 unit)
journalctl -u nginx

# 实时跟随(类似 tail -f),排错时最常用
journalctl -u nginx -f

# 按时间过滤
journalctl -u nginx --since "2026-07-14 09:00" --until "2026-07-14 10:00"
journalctl --since "1 hour ago"
journalctl --since today

# 只看错误级别及以上
journalctl -p err -b

# 本次开机以来的全部日志(-b = boot)
journalctl -b

几个实用参数:-n 100 只看最后 100 行,-r 倒序(最新在前),-o short-iso 用标准时间戳,-k 只看内核消息。组合使用,例如 journalctl -u ssh -f -p warning。

传统 /var/log 与 logrotate

很多服务(Nginx、应用自身)仍直接写文本文件到 /var/log,比如 /var/log/nginx/access.log、/var/log/syslog。直接查看:

tail -f /var/log/nginx/error.log
grep "500" /var/log/nginx/access.log

这类文件会一直增长,不处理就可能把磁盘写满导致服务崩溃。logrotate 负责定期切割、压缩、删除旧日志。配置放在 /etc/logrotate.d/ 下,每个服务一个文件:

# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    copytruncate
}

含义:每天轮转、保留 14 份、旧文件 gzip 压缩、文件不存在不报错、空文件跳过。改完可以手动测试:

# 演练,不真正执行,检查配置
logrotate -d /etc/logrotate.d/myapp
# 强制立即执行一次
sudo logrotate -f /etc/logrotate.d/myapp

> 提示:copytruncate 适用于不会重新打开日志文件句柄的程序;若程序支持 reload,用 postrotate 脚本发信号更干净。

给 journald 设置大小上限

journald 自己也会占磁盘。查看当前占用和清理:

journalctl --disk-usage
sudo journalctl --vacuum-size=500M   # 只保留最近 500M
sudo journalctl --vacuum-time=14d    # 只保留最近 14 天

想永久限制,编辑 /etc/systemd/journald.conf:

[Journal]
SystemMaxUse=500M
MaxRetentionSec=2week

改后执行 sudo systemctl restart systemd-journald 生效。

什么时候需要集中日志

单台服务器上述方法足够。但当你有多台机器、或希望日志跨重启/跨容器长期留存、需要全文检索和告警时,就该考虑集中日志方案:

  • ELK / Elastic Stack:Elasticsearch 存储 + Logstash/Filebeat 采集 + Kibana 可视化,功能强但吃资源。
  • Grafana Loki:轻量、按标签索引、和 Prometheus/Grafana 生态契合,小团队更省心。

它们的共同思路:在每台机器跑一个采集 agent,把日志推到中心存储统一查询。单台 VPS 通常不必上,等规模上来再引入。

小结

日常排错先用 journalctl -u <服务> -f 和 --since;传统文本日志靠 logrotate 定期切割压缩防止撑爆磁盘;用 SystemMaxUse 给 journald 设上限。多机或需长期检索时,再考虑 ELK 或 Loki 这类集中日志。先把单机这套练熟,绝大多数问题都能就地定位。