最后更新: 2025-09-01, 作者: 夜莺监控
面向操作系统的可观测性项目 HUATUO 开源了。
2016 年滴滴开始转向云原生架构,以K8S为基础,构建了内部的弹性云计算平台,并逐步实现了全量服务的容器化。在这个过程中,面临着一些关键的挑战:
- 容器密度高、集群规模大
- 服务延迟敏感、稳定性要求高
- 在离线工作负载混合调度
- 集群资源利用率很高
在维护弹性云计算平台的工作中,最耗时费力的问题莫属追查生产环境性能瓶颈。一个实例性能毛刺的排查,有时候需要花费好几天还找不到头绪,不仅要排查应用层面的各种指标、日志和链路跟踪数据,还得重点排查容器与容器之间、以及宿主对目标容器的干扰。要准确的定界并分析这些问题,少不了“现场还原”。在大规模、高负载的环境下,“现场还原”不是一件容易的事情。在这个背景下,滴滴研发了针对操作系统的实时监控组件 HUATUO,利用 eBPF 技术,常态化运行并全面收集内核各个子系统的统计指标和异常事件(性能损耗小于1%),并根据生产环境经验值,当统计指标达到一定阈值或者出现某种异常事件时,HUATUO 从内核自动抓取异常上下文现场并及时保存,如抓取用户调用栈、系统态调用栈生成火焰图、异常中断上下文等重要信息。
华佗常态收集的操作系统层面的统计指标如下,有接近 300 项:
可以使用 Grafana 或者夜莺生成这些统计指标仪表盘,实时全面掌握内核工作情况:
需要注意的是,统计指标的收集是常态化运行的,HUATUO 确保性能损耗小于1%。但抓取调用栈生成火焰图的行为是“触发式”的,触发条件为当统计指标达到一定阈值或者出现某种异常事件。HUATUO内置的自动触发条件(包括不限于)如下所示(也称之为 HUATUO AutoTracing):
-
CPUSYS 系统态 CPU 时间反映内核执行开销,包括系统调用、中断处理、内核线程调度、内存管理及锁竞争等操作。该指标异常升高,通常表明存在内核级性能瓶颈:高频系统调用、硬件设备异常、锁争用或内存回收压力(kswapd 直接回收)等。Huatuo 检测到该指标异常时,自动会触发抓取系统的调用栈并生成火焰图,帮助定位问题根因,其触发条件如下:
CPU Sys 使用率 > 阈值 A CPU Sys 使用率单位时间内增长 > 阈值 B
-
CPUIDLE K8S 容器环境,CPU idle 时间(即 CPU 处于空闲状态的时间比例)的突然下降通常表明容器内进程正在过度消耗 CPU 资源,可能引发业务延迟、调度争抢甚至整体系统性能下降。HUATUO 根据以下条件,自动触发抓取调用栈生成火焰图:
CPU Sys 使用率 > 阈值 A CPU User 使用率 > 阈值 B && CPU User 使用率单位时间增长 > 阈值 C CPU Usage > 阈值 D && CPU Usage 单位时间增长 > 阈值 E
-
DLOAD D 状态是一种特殊的进程状态,指进程因等待内核或硬件资源而进入的一种特殊阻塞状态。与普通睡眠(S 状态)不同,D 状态进程无法被强制终止(包括 SIGKILL),也不会响应中断信号。该状态通常发生在 I/O 操作(如直接读写磁盘)、硬件驱动故障时。系统 D 状态突增往往和资源不可用或者锁被长期持有导致,可运行进程突增往往是业务代码设计不合理导致。Huatuo 借助 netlink 获取容器 running + uninterruptible 进程数量,通过滑动窗口算法计算出过去 1 分钟内容器 D 进程对负载做出的贡献值,当平滑计算后的 D 状态进程负载值超过阈值的时候,表示容器内的 D 状态进程数量出现异常,开始触发收集容器运行情况、D 状态进程信息。
-
MemBurst 用于检测宿主机上短时间内大量分配内存的情况,突发性内存分配可能引发直接回收甚至 OOM,所以一旦突发性内存分配就需要记录相关信息。
-
IOTracing 当 I/O 带宽被占满 或 磁盘访问量突增 时,系统可能因 I/O 资源竞争而出现 请求延迟升高、性能抖动,甚至影响整个系统的稳定性。IOTracing 在宿主磁盘负载高、IO 延迟异常时,输出异常时 IO 访问的文件名和路径、磁盘设备、inode 号,容器名等上下文信息。
HUATUO 项目已捐赠给中国计算机学会(CCF),并加入其重点孵化项目序列,项目地址:https://github.com/ccfos/huatuo ,HUATUO 项目的开源,意义重大:
- HUATUO 的定位非常清晰准确,就是常态化运行实时获取操作系统的关键指标和异常行为,从内核角度获取并记录必要的异常上下文信息,开箱即用。填补了操作系统可观测性领域的空白。
- HUATUO 不仅仅是一个工具,更有价值的是大厂背后的技术深耕所积累的经验,HUATUO在滴滴大规模的生产环境场景下运行了好几年,操作系统的什么指标应该被采集、什么阈值下应该自动触发生成火焰图,都是宝贵的实战经验积累,这些经验以开源软件的方式开放到社区中,对行业是巨大的贡献。
- 滴滴HUATUO项目的开源和捐赠,给开源社区注入了新的力量和信心。
现在,即刻部署 HUATUO + 夜莺 Nightingale 工具组合,快速构建覆盖应用、中间件、数据库、操作系统内核的一体化可观测体系
篇尾:
- 关注微信公众号【HUATUO 开源技术】留言,或扫码添加工作人员微信,邀请您加入用户群(请备注姓名+单位):
- 代码仓库:https://github.com/ccfos/huatuo
- 官方网站:https://huatuo.tech/