kvm-dmesg:从宿主机窥探虚拟机内核dmesg日志

在虚拟化环境中,实时获取虚拟机内核日志对于系统管理员和开发者来说至关重要。传统的 dmesg 工具可以方便地查看本地系统的内核日志,但在KVM(基于内核的虚拟机)环境下,获取虚拟机内部的内核日志则复杂得多。为了简化这一过程,kvm-dmesg 应运而生——这是一款专为KVM虚拟化环境设计的工具,它使得我们能够直接从宿主机获取虚拟机(Guest VM)的内核日志,极大地方便了调试和排错工作。

1. 介绍

kvm-dmesg 是一个专门用于从KVM虚拟机中提取内核日志的工具。它提供了与传统的 dmesg 工具类似的功能,但其最大的亮点在于可以跨越虚拟化边界,直接从宿主机获取虚拟机内核的日志信息。

2. 主要功能

kvm-dmesg 可以从KVM虚拟机中获取内核日志,帮助管理员或开发者快速访问虚拟机的内核输出,尤其在调试和排查问题时,能够直观地获取虚拟机的dmesg日志。

支持两种连接方式
为了适应不同的使用场景,kvm-dmesg 提供了两种不同的连接方式:

  • libvirt 接口
    如果虚拟机是通过 libvirt 管理的,kvm-dmesg 可以通过 libvirt 来与虚拟机进行通信,并输出其内核日志。
  • QMP 套接字
    如果虚拟机对外暴露有QMP套接字,可以通过 QEMU Monitor Protocol(QMP)直接与虚拟机进行连接,并获取日志。

仅支持 x86_64 Linux 虚拟机
当前版本的 kvm-dmesg 仅支持 x86_64 架构的 Linux 虚拟机,对于其他架构的支持可能会在未来版本中考虑。

依赖 System.map 符号表
为了将虚拟机内核日志中的地址信息映射为可读的符号,kvm-dmesg 需要访问虚拟机的 System.map 符号表。该符号表包含了内核的符号信息,可以将内核日志中的地址转换为具体的符号和函数名称,从而更加高效。

3. 实现原理

linux内核中log_buf定义如下:

// printk.c
#define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT)
static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN);
static char *log_buf = __log_buf;
static u32 log_buf_len = __LOG_BUF_LEN;

实现过程如图所示,主要是通过qemu获取guest的CR3寄存器的值,然后经过页表转换,获取到log_buf指针指向的地址,取出内核环形缓冲区中的内存数据并解析成dmesg日志。
在这里插入图片描述

4. 使用方法

使用 kvm-dmesg 获取虚拟机内核日志的过程非常简单。以下是两种主要的连接方式:

1. 使用 libvirt 接口获取日志

./kvm-dmesg <domain_name> <system.map_path>

2. 使用 QMP 套接字获取日志

./kvm-dmesg <socket_path> <system.map_path>

以QMP为例,具体使用方法如下:

$ ./kvm-dmesg /tmp/qmp.sock System.map-5.15.171[    0.000000] Linux version 5.15.171 (rayylee@ubuntu-dev) (gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0, GNU ld (GNU Binutils for Ubuntu) 2.42) #1 SMP Tue Nov 12 14:44:05 UTC 2024
[    0.000000] Command line: console=ttyS0
[    0.000000] BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000001ffdffff] usable
[    0.000000] BIOS-e820: [mem 0x000000001ffe0000-0x000000001fffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000feffc000-0x00000000feffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved
[    0.000000] BIOS-e820: [mem 0x000000fd00000000-0x000000ffffffffff] reserved
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] SMBIOS 2.8 present.
[    0.000000] DMI: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
[    0.000000] tsc: Fast TSC calibration using PIT
[    0.000000] tsc: Detected 3194.022 MHz processor
[    0.000569] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
[    0.000571] e820: remove [mem 0x000a0000-0x000fffff] usable
...

工具地址:https://github.com/rayylee/kvm-dmesg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/20330.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

如何在分布式环境中实现高可靠性分布式锁

目录 一、简单了解分布式锁 &#xff08;一&#xff09;分布式锁&#xff1a;应对分布式环境的同步挑战 &#xff08;二&#xff09;分布式锁的实现方式 &#xff08;三&#xff09;分布式锁的使用场景 &#xff08;四&#xff09;分布式锁需满足的特点 二、Redis 实现分…

编程之路,从0开始:联合和枚举

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路。 目录 1、自定义类型&#xff1a;联合体 1.1联合体的声明 1.2联合体变量的定义与赋值 1.3联合体的特点 1.4利用联合体判断大小端 2、自定义类型&#xff1a;枚举…

【从零开始的LeetCode-算法】3301. 高度互不相同的最大塔高和

给你一个数组 maximumHeight &#xff0c;其中 maximumHeight[i] 表示第 i 座塔可以达到的 最大 高度。 你的任务是给每一座塔分别设置一个高度&#xff0c;使得&#xff1a; 第 i 座塔的高度是一个正整数&#xff0c;且不超过 maximumHeight[i] 。所有塔的高度互不相同。 请…

POE接口

一、POE的概念 POE&#xff08;Power over Ethernet&#xff09;是一种以太网供电技术&#xff0c;它允许在现有的以太网电缆中传输电力和数据信号&#xff0c;从而无需额外的电源线。POE技术广泛应用于IP电话、无线接入点、网络摄像头、安全系统和其他需要网络连接和供电的设…

分层架构 IM 系统之架构演进

在电商业务日活几百万的情况下&#xff0c;IM 系统采用分层架构方式&#xff0c;如下图。 分层架构的 IM 系统&#xff0c;整体上包含了【终端层】、【入口层】、【业务逻辑层】、【路由层】、【数据访问层】和【存储层】&#xff0c;我们在上篇文章&#xff08;分层架构 IM 系…

基于Ruoyi的同一token跨系统访问,后端单点登录并且鉴权方案

基于Ruoyi的同一token跨系统访问,后端单点登录并且鉴权方案 需求场景以及先决条件默认方案改造思路改造代码,一共4个类需要变更完整需要修改的代码 需求场景以及先决条件 同一环境下的多个ruoyi项目,各自使用相同的一组用户(我这里用的是LDAP的登录,不影响本文),但是每个权限拥…

基于Lora通讯加STM32空气质量检测WIFI通讯-分享

目录 目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 1.电路图采用Altium Designer进行设计&#xff1a; 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着环境污染问题的日益严重&#xff0c;空气质量的监测与管理已经…

How to paint colors to the assets cube through .urdf

1. Find your assets/cube.urdf Something looks like this <?xml version"1.0"?> <robot name"object"><link name"object"><visual><origin xyz"0 0 0"/><geometry><box size"0.05…

刚学php序列化/反序列化遇到的坑(攻防世界:Web_php_unserialize)

刚开始遇到题目的时候&#xff0c;思路还是很明确。 原题入口&#xff1a;攻防世界 (xctf.org.cn) 中的 Web_php_unserialize 两个函数 serialize() //将一个对象转换成一个字符串 unserialize() //将字符串还原成一个对象 首先看到 unserialize() 可以知道基本上能得…

5G 现网信令参数学习(3) - RrcSetup(2)

前一篇&#xff1a;5G 现网信令参数学习(3) - RrcSetup(1) 目录 1. rlf-TimersAndConstants 2. spCellConfigDedicated 2.1 initialDownlinkBWP 2.1.1 pdcch-Config 2.1.1.1 controlResourceSetToAddModList 2.1.1.2 searchSpacesToAddModList 2.1.2 pdsch-Config 2.1…

在windows上打包mediasoup arm64版本的docker镜像

mediasoup版本&#xff1a;3.14.14 mediasoup-demo版本&#xff1a;v3 windows 10 专业版 docker-desktop版本&#xff1a;4.30.0 (149282) docker info: Client:Version: 26.1.1Plugins:buildx: Docker Buildx (Docker Inc.)Version: v0.14.0-desktop.1Path: C:\Prog…

11.19机器学习_逻辑回归

十二 逻辑回归 1.概念 逻辑回归(Logistic Regression)是机器学习中的一种分类模型&#xff0c;逻辑回归是一种分类算法&#xff0c;虽然名字中带有回归&#xff0c;但是它与回归之间有一定的联系。由于算法的简单和高效&#xff0c;在实际中应用非常广泛。 逻辑回归一般用于…

【LLM训练系列01】Qlora如何加载、训练、合并大模型

示例1&#xff1a;Qlora训练Qwen2.5 参考脚本&#xff1a;https://github.com/QwenLM/Qwen/blob/main/recipes/finetune/deepspeed/finetune_qlora_multi_gpu.ipynb 训练命令如下&#xff1a; !torchrun --nproc_per_node 2 --nnodes 1 --node_rank 0 --master_addr localho…

Jmeter数据库压测之达梦数据库的配置方法

目录 1、概述 2、测试环境 3、数据库压测配置 3.1 安装jmeter 3.2 选择语言 3.3 新建测试计划 3.4 配置JDBC连接池 3.5 配置线程组 3.6 配置测试报告 3.7 执行测试 1、概述 Jmeter是Apache组织开发的基于Java的压力测试工具&#xff0c;用于对软件做压力测试。 它最…

[ 应急响应进阶篇-1 ] Windows 创建后门并进行应急处置-5:启动项后门

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

编译报错:protoc did not exit cleanly. Review output for more information.

目录标题 解决“protoc did not exit cleanly”的报错问题检查.proto文件的语法 解决“protoc did not exit cleanly”的报错问题 今天做的项目需要用到grpc&#xff0c;然后需要编写proto然后编译后实现grpc的具体方法&#xff01; 结果编译的时候报了protoc did not exit cl…

Java码农人生开启手册——重载和重写

一、重载 有时在调用现有方法时会出现参数类型不匹配的问题&#xff0c;在Java中&#xff0c;如果多个方法的名字相同&#xff0c;参数列表不同&#xff0c;则称该几种方法被重载了。 注意&#xff1a; 方法名必须相同参数列表必须不同与返回值是否相同无关编译器在编译代码时&…

ComfyUI-unclip模型部署指南

一、介绍 unCLIP 模型是 SD 模型的版本&#xff0c;经过专门调整&#xff0c;除了文本提示之外&#xff0c;还可以接收图像概念作为输入。使用这些模型附带的 CLIPVision 对图像进行编码&#xff0c;然后在采样时将其提取的概念传递给主模型。 它并不是按照传统意义将图像混合…

优雅关闭:避免服务停机带来的业务损失

服务关闭有什么问题&#xff1f; 在“单体应用”复杂到一定程度后&#xff0c;一般会进行系统拆分&#xff0c;也就是微服务架构。服务拆分之后&#xff0c;就需要协同&#xff0c;于是RPC框架就出来了&#xff0c;用来解决各个子系统之间的通信问题。 拆分系统的目的&#x…

硬件知识 cadence16.6 原理图输出为pdf 网络名下划线偏移 (ORCAD)

1. cadence原理图输出为PDF网络名下划线偏移 生这种情况的原因 1. 设计的原理图图纸大小比正常的 A4图纸大。 2. 打印为PDF 的时候&#xff0c;打印机的设置有问题。 2.cadence原理图输出为 PDF网络名下划线偏移的情况 可以看到上图&#xff0c;网络名往上漂移。 3. 解决办法 …