Skip to content

fix: 首个上报量一秒基线,虚拟化类型按 CPUID 与容器痕迹识别 - #13

Merged
stqfdyr merged 3 commits into
mainfrom
fix/first-sample-and-virt
Oct 4, 2026
Merged

stqfdyr merged 3 commits into
mainfrom
fix/first-sample-and-virt

Conversation

@stqfdyr

@stqfdyr stqfdyr commented Oct 3, 2026 •

Copy link
Copy Markdown
Collaborator

首个上报不再是 0,虚拟化类型同一种只有一个名字,顺带清理与实现不符的注释和无用代码。不改协议,新旧 hub 照常配对。

  • 首个上报:连上 hub、发完 hello 后先采一次基线,第一份上报推迟一秒,CPU 与网速量的就是这一秒。此前进程刚启动时首报是 cpu 0 / net 0(--interval 60 时实时视图挂一分钟的 0,历史每次重启多一个 CPU 为 0 的点),重连后的首报则是整段断线期间的平均值
  • 虚拟化类型:先认容器,再认虚拟机
    • 容器只用非特权可读的痕迹:OpenVZ 要求 /proc/vz 存在且没有 /proc/bc(宿主两个都有);systemd 写的 /run/systemd/container;/.dockerenv、/run/.containerenv;挂在 /proc/* 上的 LXCFS(Proxmox CT、LXD,包括不跑 systemd 的 Alpine)。此前 LXC 一律报成宿主的类型
    • x86 读 CPUID 0x40000000 的签名。DMI 由厂商自填,同是 KVM 有 KVM、QEMU、Bochs、Alibaba Cloud ECS 等写法,此前据此报出 kvm / qemu / bochs / vm 几种
    • aarch64 没有 CPUID:有 QEMU 的 fw_cfg 设备即 kvm,其余按 DMI 映射(Nitro、GCE → kvm,Azure → hyper-v)
    • 名字与 systemd-detect-virt 一致,只把 microsoft 写作 hyper-v、oracle 写作 virtualbox(免得读成甲骨文云)、amazon / google 写作 kvm
  • os-release 按规范在 /etc 缺失时读 /usr/lib/os-release,值可用单引号
  • 挂载表按挂载点一次建索引,不再逐行回扫;Kubernetes 节点每个 pod 有好几行挂载
  • 注释:发布版链接 musl,解析器相关说明不再写 glibc;「v6 没有路由时」改为「v6 路由不通时」(没有路由时解析器本就把 v4 排前)
  • 去掉 Facts、Metrics、PingTask 上用不到的 derive

测试:新增 a_container_is_named_from_what_an_unprivileged_process_can_read(构造目录,含 OpenVZ 与 LXCFS 两种宿主)和 virtualization_agrees_with_systemd_detect_virt(真机比对);变异检查逐条变红。hub 1.3.2 端到端通过,--interval 60 首报实测由 cpu 0 / net_rx 0 变为 cpu 58.6 / net_rx 21370。

@stqfdyr
stqfdyr merged commit 2fe0107 into main Oct 4, 2026
1 check passed
@stqfdyr
stqfdyr deleted the fix/first-sample-and-virt branch October 4, 2026 04:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant