先说结论:这门课不是给想快速搭一套监控的人准备的。如果你只是想装个 Zabbix、配几个模板、看看告警有没有发出来,那市面上的入门教程和官方文档已经够了,不需要碰源码。这门课面向的是另一类问题——监控系统本身出故障了,或者性能压不上去,而你在日志和文档里找不到答案。

它解决的是哪类工作场景

Zabbix 用久了,几乎一定会撞上几种说不清的毛病:采集项大面积超时、队列堆积但看不出卡在哪一环、Server 内存持续上涨、某个进程 CPU 跑满却定位不到触发条件。这些问题在配置层面往往查不出原因,因为瓶颈藏在进程模型和数据结构里。

课程从源码角度拆的正是这条链路:数据怎么被采集进来、在进程之间怎么流转、写入数据库前后各自做了什么。学完之后你至少能回答一类具体问题——当监控出现延迟或丢数据时,是采集端、预处理、队列还是存储这一环出的问题,而不是靠重启服务碰运气。这类判断能力,在日常运维里直接对应排障时间。

学完能独立做什么

  • 能自己从源码编译出可调试的 Zabbix,挂上调试器跟踪一个具体进程的执行流程,而不是只能看打印日志。
  • 遇到采集异常或队列积压时,能按模块缩小范围,判断问题出在哪个进程、哪个处理阶段。
  • 能读懂核心组件的关键数据结构,为改配置参数、调优参数提供依据,而不是照搬网上的调优清单。
  • 具备做小幅二次开发的基础,比如修改或扩展某个处理逻辑。

需要说明的是,这些能力建立在你能读懂 C 代码、熟悉 Linux 进程与调试工具的前提上。如果这两块是空的,课程里大量内容会变成看天书,收益会大打折扣。

资料适合什么基础

最低门槛是能看懂 C 语言,尤其是指针、结构体、链表这类基础;同时要熟悉 Linux 下的编译流程和基本调试手段。课程按基础版组织,讲的是核心机制这条主线,不是把整个代码库逐行了讲一遍,所以更适合已经用过 Zabbix、对它的功能有实感的人。

纯运维背景、没写过 C 的读者要慎重:这门课不会补 C 语言,也不会补操作系统,缺的部分得自己先补上。反过来,如果你本来就有后端或系统开发经验,只是想搞清楚一个成熟监控系统的工程实现,那这门课的信息密度是够的。

怎么用这套资料

建议不要按顺序从头看到尾。先跟着把环境编译起来,让代码能跑、能断点,这一步没走通,后面全是空谈。然后挑一条你实际遇到过问题的链路重点看,比如数据采集或数据入库,边看边在调试器里验证。其余部分当作参考,遇到具体问题时再回头查对应模块。

把它当成一本可以动手验证的源码手册,比当成视频课刷完,效果差别很大。

课程目录

课程目录94 集
  • 01 课程介绍 01 课程简介.mp4
  • 02 各进程职责.mp4
  • 02 环境准备 01 下载zabbix源码包,并安装虚拟机.mp4
  • 02 创建git仓库,上传代码,安装git插件.mp4
  • 03 安装系统依赖,编译安装并且配置zabbix.mp4
  • 04 添加第一行中文注释,切割日志,课后总结.mp4
  • 03 主进程源码分析 01 学习目标,修改日志级别.mp4
  • 02 main函数讲解.mp4
  • 03 守护进程讲解.mp4
  • 04 主进程入口函数讲解-上.mp4
  • 05 主进程入口函数讲解-下.mp4
  • 04 配置同步进程源码分析 01 安装zabbix-proxy和zabbix-agent.mp4
  • 02 configuration syncer进程的完整启动流程.mp4
  • 03 DCsync_configuration()函数讲解.mp4
  • 04 zbx_dbsync_init()函数讲解.mp4
  • 05 zbx_dbsync_compare_config()函数讲解.mp4
  • 06 DBsync_config()函数讲解.mp4
  • 07 查询主机模板、宏参数到全局配置缓存中-上.mp4
  • 08 查询主机模板、宏参数到全局配置缓存中-下.mp4
  • 09 更新主机模板、宏参数到全局配置缓存中-上.mp4
  • 10 更新主机模板、宏参数到全局配置缓存中-下.mp4
  • 11 查询9组数据.mp4
  • 12 查询并更新主机信息到全局配置缓存中.mp4
  • 13 查询并更新监控项信息到全局配置缓存中.mp4
  • 14 输出配置同步过程中新增、修改、删除的数量和同步时间.mp4
  • 15 全局配置缓存输出到日志分析.mp4
  • 05 主动采集进程源码分析 01 入口函数分析-上.mp4
  • 02 入口函数分析-下.mp4
  • 03 get_values()函数分析.mp4
  • 04 获取二叉堆中的监控项用于采集.mp4
  • 05 判断获取的监控项是否需要采集.mp4
  • 06 监控项宏替换和各采集属性赋值.mp4
  • 07 get_value()函数分析.mp4
  • 08 采集结果处理和日志分析.mp4
  • 06 被动接收进程源码分析 01 进程功能介绍与进程交互脚本使用.mp4
  • 02 入口函数分析.mp4
  • 03 process_trapper_child()函数解析-上.mp4
  • 04 process_trapper_child()函数解析-下.mp4
  • 05 进程日志分析.mp4
  • 07 预处理管理进程源码分析 01 进程介绍与入口函数分析.mp4
  • 02 接收IPC服务消息.mp4
  • 03 注册预处理工作进程.mp4
  • 04 接收并转发消息给预处理工作进程-01.mp4
  • 05 接收并转发消息给预处理工作进程-02.mp4
  • 06 接收并转发消息给预处理工作进程-03.mp4
  • 07 接收并转发消息给预处理工作进程-04.mp4
  • 08 接收并处理预处理结果-01.mp4
  • 09 接收并处理预处理结果-02.mp4
  • 10 接收并处理队列长度请求.mp4
  • 11 日志分析.mp4
  • 08 预处理工作进程源码分析 01 进程介绍与入口函数分析.mp4
  • 02 注册预处理工作进程.mp4
  • 03 读取IPC消息并处理预处理消息-01.mp4
  • 04 处理预处理消息-02.mp4
  • 05 处理预处理消息-03.mp4
  • 09 数据入库进程源码分析 01 进程介绍与入口函数讲解.mp4
  • 02 开始讲解同步历史缓存数据入库函数-01.mp4
  • 03 获取待入库的缓存数据.mp4
  • 04 向数据库中添加历史值数据.mp4
  • 05 将历史值数据写入缓存中.mp4
  • 06 向数据库中添加趋势值数据-01.mp4
  • 07 向数据库中添加趋势值数据-02.mp4
  • 08 技术触发器生成事件.mp4
  • 09 日志分析.mp4
  • 10 测试采集数据的完整生命周期.mp4
  • 11 加餐:TCP Socket与IPC Socket编程示例.mp4
  • 10 Pinger进程源码分析 01 进程介绍与入口函数分析.mp4
  • 02 处理主机列表中的Ping任务.mp4
  • 11 http-poller进程源码分析 01 进程介绍与入口函数分析.mp4
  • 02 处理HTTP测试任务.mp4
  • 03 日志分析.mp4
  • 12 proxy-poller进程源码分析 01 进程介绍和入口函数分析.mp4
  • 02 进程关键步骤分析.mp4
  • 03 日志分析.mp4
  • 13 不可达进程源码分析 01 进程介绍.mp4
  • 02 不可达进程源码分析.mp4
  • 14 自监控进程源码分析 01 进程介绍与收集统计数据源码分析.mp4
  • 02 收集统计数据日志分析.mp4
  • 03 更新自监控统计数据源码分析.mp4
  • 04 获取统计数据源码与日志分析.mp4
  • 15 管家进程源码解析 01 管家进程介绍和入口函数分析.mp4
  • 02 清理历史数据与趋势数据-上.mp4
  • 03 清理历史数据与趋势数据-下.mp4
  • 04 清理其他数据.mp4
  • 05 日志分析.mp4
  • 16 自发现进程源码解析 01 自发现进程介绍和入口函数分析.mp4
  • 02 自发现进程源码分析.mp4
  • 03 自发现进程日志分析.mp4
  • 17 告警管理进程源码分析 01 告警管理进程介绍.mp4
  • 02 入口函数关键步骤分析.mp4
  • 03 同步看门狗信息.mp4
  • 04 处理告警结果.mp4
  • 05 日志分析.mp4
  • 18 告警器进程源码分析 01 告警器进程介绍与源码分析.mp4