本节重点介绍 :
- blackbox框架源码解读
- 根据模块找到探针
- 对目标执行探针方法
- http 探测代码
- 使用net/http/httptrace库进行trace
- 钩子函数设置时刻
- time.sub计算时间差
blackbox框架源码解读
main中注册 /probe handler
probeHandler函数中 解析请求的module参数和target参数
- 获取 module参数
- 根据启动时配置文件中加载的模块找到对应的模块
- 解析请求的target参数
- 根据解析得到的模块,找到对应的底层探针
- 执行对应的探针函数,这步是核心
http 探测代码解读
- 根据上面的解读我们,得知最核心的流程就是探针函数的执行
http探针
- 代码位置 D:\go_path\pkg\mod\github.com\prometheus\blackbox_exporter@v0.19.0\prober\http.go 中的ProbeHTTP
源码解读
- 底层使用 net/http/httptrace库
- 在HTTP客户端请求的整个生命周期中收集细粒度信息的工具, 收集的信息可用于调试延迟问题,服务监控,编写自适应系统等。
- 这个库的用法就是可以在http各个阶段设置对应的钩子处理函数
- 同时设定很多时间点对象
- 那么在对应的事件触发时,trace调用实现设定好的钩子函数给相关的时间对象赋值,比如下面的dns解析结束的例子
- DNSDone发生时将dnsDone时间对象设置为当前时间
- 最后进行各阶段统计耗时的计算,算时间差即可
- 各阶段耗时统计
- 类似的代码可以看下 httpstat
本节重点总结:
- blackbox框架源码解读
- 根据模块找到探针
- 对目标执行探针方法
- http 探测代码
- 使用net/http/httptrace库进行trace
- 钩子函数设置时刻
- time.sub计算时间差