首页/云/云平台与虚拟化速查/为虚机配置串口日志留存
虚拟化操作94 条

为虚机配置串口日志留存

把 guest 串口输出同时接入交互控制台与日志文件:XML 里用 serial/console 设备建模,type 取 pty 供 virsh console 进入,type 取 file 则把输出留存为日志。

云平台与虚拟化速查云更新于 2026-10-13

为什么给虚机配串口日志

图形控制台只能看当前画面,画面一闪而过的内核报错与引导失败信息很难抓住;串口输出可以同时接入交互控制台与日志文件,既能用 virsh console 登录,也能把输出留存下来事后翻查。做法是在域定义里建 serial 与 console 设备:type 取 pty 用于交互,type 取 file 则把输出写进文件,同时 guest 内核命令行要加上串口参数,否则内核信息不会送到串口。

基本信息

适用平台使用 libvirt 与 QEMU 的 Linux 宿主,guest 通常为 Linux
交互设备serial type='pty' 配合 console 设备,用 virsh console 进入
日志设备serial type='file' 并指定 source path,输出留存到文件
guest 内核参数在启动参数中加入串口与控制台参数(如 ttyS0 与波特率)
guest 服务启用对应串口的 getty 服务才能通过串口登录
用途引导失败排查、内核 panic 留痕、无人值守环境的证据留存

典型使用场景

  • 虚机引导失败或反复重启,需要看到内核阶段的输出
  • 远程虚拟化环境没有图形控制台,用串口做交互登录
  • 关键虚机留存启动日志,用于事后分析异常重启原因
  • 自动化部署场景:通过串口脚本化下发与采集信息
  • 内核参数调优验证:观察引导过程中的报错与提示
  • 取证与审计:把启动过程日志纳入统一的日志收集

域定义片段与验证

域定义片段与验证
<serial type='pty'>                <!-- 交互用串口设备 -->
  <target port='0'/>
</serial>
<console type='pty'>               <!-- 与上面配对的控制台设备 -->
  <target type='serial' port='0'/>
</console>
<!-- 需要留存日志时把 serial 改为 type='file' 并指定 <source path='/var/log/vm1-serial.log'/> -->
# guest 内核命令行需包含串口控制台参数(设备名与波特率按实际情况填)
# 交互登录还需在 guest 内启用对应串口的 getty 服务
# 验证:virsh console vm1 能进入,且日志文件在重启后持续增长

配置项与效果

配置项作用常见问题
serial type='pty'提供交互串口通道只配设备不改内核参数,串口里看不到内核输出
serial type='file'把串口输出写入日志文件文件所在分区写满导致日志中断
console 设备与 serial 配对供 virsh console 使用缺少 console 时无法用命令行进入
内核命令行让内核把输出送到串口参数写错设备名,输出仍走图形控制台
getty 服务提供串口登录提示符未启用时串口只有输出、无法登录
日志轮转控制日志文件增长未纳入轮转,长期累积占满分区
需要留存日志时把 serial 改成 type='file' 并指定 source path;guest 内核命令行同时加上串口参数,才能把内核与登录输出送到串口。
串口日志文件会持续增长并包含引导与登录信息:必须纳入日志轮转与容量监控,同时注意其中的敏感信息暴露。

易错点

  • 只改域定义不加内核参数:串口里看不到内核引导信息,排查仍然抓不到关键输出
  • 日志文件所在分区写满:串口日志中断,恰好在出问题时失去记录
  • 忘记启用 guest 侧 getty:串口有输出但无法登录交互
  • 日志未纳入轮转:长期累积占满磁盘,影响宿主与其他虚机
  • 把串口日志当完整日志方案:它只覆盖引导与串口控制台输出,应用日志仍需常规采集

数据来源与参考

  • libvirt 文档:Serial / Console 设备
  • Linux 内核文档:serial console
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌