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 或 `journalctl | grep 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,基本能看到线索。
版权声明:
作者:后浪云
链接:https://idc.net/help/442478/
文章版权归作者所有,未经允许请勿转载。
THE END
