跳转到内容

看懂任务日志与系统日志 ​

备份失败了、虚拟机启动报错了,第一件事是找对日志。PVE 有好几个入口,这篇讲清楚每个入口看的是什么、什么时候该去哪儿找。

为什么需要它 ​

Web UI 里点开一个失败的任务,能看到一段报错;但很多问题(服务崩溃、内核消息、网络异常)不会出现在任务日志里,得去系统日志或 journalctl 找。搞混这几个入口,经常是「明明出了问题却什么都查不到」的原因。

开始之前 ​

  • 任务日志和系统日志都能在 Web UI 里看,不需要 SSH。
  • journalctl 需要宿主机 shell(Web UI 的 Shell 按钮或 SSH 均可,以 root 执行)。
  • 集群环境要注意:一个任务的日志记录在发起这个任务的节点上,不一定是任务实际操作的目标节点。

三个入口 ​

入口在哪看适合查
任务日志(Task History)数据中心 → 任务 或 节点 → 任务备份、迁移、创建/删除客户机、快照等由 PVE 发起的具体操作
系统日志(System Log)节点 → 系统日志该节点上系统级别的事件,底层就是 journalctl 的 Web 呈现
journalctl宿主机 shell比系统日志页面更灵活,能按服务、按级别、按时间窗口过滤,也是唯一能看历史启动记录的方式

三者不是互相独立的三份数据

系统日志页面本质是 journalctl 的图形化视图,两者内容一致,命令行只是筛选更方便。任务日志则是单独的一套记录,专门对应「点了一个按钮、跑了一个任务」这类操作。

任务日志怎么用 ​

数据中心 → 任务列出所有任务,可以按节点、按类型(如 vzdump、qmigrate)筛选。点开一条能看到完整输出,失败的任务会标红并停在报错那一行。

每个任务有一个唯一标识 UPID,形如:

text
UPID:pve1:00001486:0000055C:63BD11C8:vzdump:100:root@pam:

依次是:节点名、进程号、进程启动时间、任务发起时间、任务类型(这里是 vzdump 备份)、操作对象(这里是虚拟机 100)、发起用户。只看类型和对象两段,通常就能猜到这是哪次操作。

命令行也能查任务,适合写脚本或者 Web UI 打不开的时候用:

sh
# 宿主机 shell
pvenode task list --errors        # 只看失败的任务
pvenode task list --vmid 100      # 只看某台客户机相关的任务
pvenode task log <完整UPID>       # 看某个任务的完整输出

也可以用 pvesh 直接查 API:

sh
pvesh get /cluster/tasks --output-format=json-pretty

系统日志 / journalctl 怎么用 ​

节点 → 系统日志能直接浏览,适合大概翻一眼最近发生了什么。需要精确过滤时用命令行:

sh
# 只看某个服务
journalctl -u pveproxy -n 100 --no-pager
journalctl -u pvedaemon -n 100 --no-pager
journalctl -u pvestatd -n 100 --no-pager

# 只看错误级别以上,本次启动以来
journalctl -p err -b --no-pager

# 看某个时间段
journalctl --since "2026-09-20 08:00" --until "2026-09-20 09:00"

# 实时跟随
journalctl -f

PVE 的核心服务:pve-cluster(提供 /etc/pve)、pvedaemon(处理需要 root 权限的 API 调用,只监听本机)、pveproxy(对外的 8006 端口,转发到 pvedaemon)、pvestatd(采集状态和指标)。某个功能整体不工作时,先查对应服务是不是在跑:

sh
systemctl status pve-cluster pvedaemon pveproxy pvestatd

常见排查场景 ​

备份失败了,任务日志里只有几行看不懂的报错。 先看任务日志里的最后几行,通常会指出是存储空间不足、目标存储不可达,还是客户机内部快照失败。如果任务日志信息不够,再去查对应时间段的系统日志,搜索存储或网络相关的报错。

虚拟机启动不了,任务日志显示 QEMU 报错。 这类报错通常已经比较具体(设备冲突、镜像找不到等),任务日志里的报错原文本身就是最有效的排查起点,可以直接拿去对照 虚拟机开不了机 或搜索报错关键字。

任务在别的节点上,本节点任务日志里找不到。 去发起任务的那个节点查——迁移、跨节点备份等操作的任务记录留在触发它的节点上。

想知道某次重启前后发生了什么。 journalctl --list-boots 列出历史的每一次启动,再用 journalctl -b -1(上一次启动)之类的参数看对应那次的完整日志。

检查结果 ​

拿一次最近的失败任务练手:能在任务日志里找到它、读懂报错原文的大意,并且能用 journalctl 定位到同一时间点系统日志里的相关记录。能做到这一步,说明这两个入口已经会用了。

常见问题 ​

任务日志列表很长,找不到想要的那条。 用节点、日期范围筛选,或者知道大概的操作类型(备份用 vzdump、迁移用 qmigrate)时直接用 pvenode task list 加过滤条件。

journalctl 输出信息太多。 优先加 -u <服务名> 限定服务、-p err 限定级别、--since/--until 限定时间段,三者组合通常能把输出缩小到可读的范围。

系统日志占用磁盘越来越大。 属于容量管理范畴而不是排查本身,参考健康检查清单里关于日志清理的部分。

参考资料 ​

Proxmox VE 非官方中文使用指南,与 Proxmox Server Solutions GmbH 无隶属关系。