Debian 服务器如何查看日志

Debian 服务器日志主要分两类:

  • 现代方式:systemd journal(用 journalctl 查看,二进制存储,功能强大,推荐首选)
  • 传统方式:文本文件(/var/log/ 目录下,由 rsyslog 写入)

新手建议优先掌握 journalctl,因为它能查看几乎所有系统和服务日志,且支持时间、服务、优先级等多种过滤。

1. journalctl 常用查看方式(最重要)

场景命令示例说明
查看所有日志(从旧到新)journalctl默认用 pager(如 less)显示,按 q 退出
实时监控日志(像 tail -f)journalctl -f按 Ctrl+C 停止
只看本次开机日志journalctl -b最常用排查启动后问题
上一次开机日志journalctl -b -1-2、-3... 可看更早的(需启用持久化存储)
最近 N 条日志journalctl -n 100或 journalctl -n 50
按时间范围journalctl --since "2026-02-25 10:00" --until "2026-02-26 15:00"支持 "1 hour ago"、"yesterday"、"2026-02-20" 等自然语言
只看错误及以上级别journalctl -p err 或 journalctl -p 3级别:emerg(0)、alert(1)、crit(2)、err(3)、warning(4)、notice(5)、info(6)、debug(7)
只看内核日志(dmesg 替代)journalctl -k 或 dmesg硬件、驱动相关问题首选
只看某个服务日志journalctl -u ssh 或 journalctl -u nginx服务名可省略 .service
实时看某个服务journalctl -u nginx -f调试 Nginx/Apache/Docker 等最实用
带颜色 + 详细解释journalctl -xe-x 加解释,-e 跳到末尾
只看认证/登录相关journalctl -u ssh 或 `journalctlgrep sshd`

小技巧

  • 加 -o verbose → 显示完整字段(包括 PID、进程名、用户等)
  • 加 --no-pager → 不使用分页,直接输出到终端(适合脚本或管道)
  • 加 --utc → 时间显示为 UTC(服务器常用)

2. 启用持久化日志(默认只存内存,重启丢失)

Debian 默认 journald 用 volatile 模式(/run/log/journal/),重启后旧日志丢了。

强烈建议启用持久化(存到磁盘):

Bash
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
# 或直接编辑配置
sudo systemctl edit systemd-journald

在打开的编辑器中加入:

text
[Journal]
Storage=persistent
SystemMaxUse=500M          # 限制最大占用 500MB,防止占满磁盘

保存后重启服务:

Bash
sudo systemctl restart systemd-journald

以后就能用 journalctl -b -1 查看上一次开机日志了。

3. 传统文本日志(/var/log/ 目录)

虽然 journald 是主力,但 rsyslog 仍会生成部分文本日志(兼容旧习惯)。

常见文件位置及用途:

文件路径内容用途查看命令示例
/var/log/syslog几乎所有系统消息(Debian 默认)tail -n 100 /var/log/syslog
/var/log/auth.log认证、登录、sudo、SSH 尝试tail -f /var/log/auth.log
/var/log/kern.log内核消息grep -i error /var/log/kern.log
/var/log/dmesg开机内核环缓冲(重启清空)`dmesg
/var/log/messages部分系统消息(Debian 较少用)
/var/log/daemon.log系统守护进程日志
服务专属(如 Nginx)/var/log/nginx/error.log 等tail -f /var/log/nginx/error.log

实时监控示例(最常用):

Bash
tail -f /var/log/auth.log     # 监控 SSH 登录尝试
tail -f /var/log/syslog       # 监控系统整体

4. 快速排查问题常用组合

  • 服务器突然卡/挂:journalctl -b -p err + journalctl -xe
  • SSH 登录失败:journalctl -u ssh -n 50 或 tail -n 50 /var/log/auth.log
  • 服务启动失败:journalctl -u 服务名 -xe(如 journalctl -u nginx -xe)
  • 磁盘/内存爆满:journalctl -b | grep -i "out of memory" 或检查 /var/log/journal 大小
  • 暴力破解:grep "Failed password" /var/log/auth.log | tail -20

5. 日志清理(防止占满磁盘)

Bash
# 按时间清理(保留最近 2 周)
sudo journalctl --vacuum-time=2weeks

# 按大小限制(保留 500MB)
sudo journalctl --vacuum-size=500M

# 全部清理(慎用)
sudo journalctl --vacuum-files=1   # 只保留当前文件

或在 /etc/systemd/journald.conf 里永久设置 SystemMaxUse=500M。

掌握以上 journalctl + 少数 tail 命令,你就能应对 95% 的 Debian 服务器日志排查需求。日常运维记住:有问题先 journalctl -b -p err -xe,基本能看到线索。

THE END