【Blackbox Exporter】prober.Handler源码详细分析

	http.HandleFunc(path.Join(*routePrefix, "/probe"), func(w http.ResponseWriter, r *http.Request) {
   
   
		sc.Lock()
		conf := sc.C
		sc.Unlock()
		prober.Handler(w, r, conf, logger, rh, *timeoutOffset, nil, moduleUnknownCounter, allowedLevel)
	})

在这里插入图片描述

我们了解到blackbox_exporter中都是通过请求/probe来进行端口探测的,那么今天我们来详尽的分析prober.Handler相关源码。

函数签名

func Handler(w http.ResponseWriter, r *http.Request, c *config.Config, logger *slog.Logger, rh *ResultHistory, timeoutOffset float64, params url.Values, moduleUnknownCounter prometheus.Counter, logLevelProber *promslog.AllowedLevel)
  • w http.ResponseWriter:HTTP 响应对象,用于向客户端发送响应。
  • r *http.Request:HTTP 请求对象,包含请求信息。
  • c *config.Config:包含配置的对象,包含了可用的探针模块等配置。
  • logger *slog.Logger:日志记录器,用于输出日志。
  • rh *ResultHistory:用于记录结果历史的对象。
  • timeoutOffset float64:超时偏移量,可能用于调整默认的超时设置。
  • params url.Values:URL 查询参数,通常包含了目标和其他探测信息。
  • moduleUnknownCounter prometheus.Counter:Prometheus 计数器,用于统计未知模块的次数。
  • logLevelProber *promslog.AllowedLevel:日志级别,控制探测日志的详细程度。

1. 获取 URL 查询参数 params

if params == nil {
   
   
    params = r.URL.Query()
}
  • 如果 params 参数为空(即传入的 URL 查询参数为空),则使用 HTTP 请求的查询参数 r.URL.Query()

2. 获取探针模块名称

moduleName := params.Get("module")
if moduleName == "" {
   
   
    moduleName = "http_2xx"
}
module, ok := c.Modules[moduleName]
if !ok {
   
   
    http.Error(w, fmt.Sprintf("Unknown module %q", moduleName), http.StatusBadRequest)
    logger.Debug("Unknown module", "module", moduleName)
    if moduleUnknownCounter != nil {
   
   
        moduleUnknownCounter.Add(1)
    }
    return
}
  • 获取 URL 查询参数中的 module 参数。如果没有传递 module 参数,默认设置为 http_2xx
  • 通过 moduleName 从配置 c.Modules 中获取对应的模块配置。如果模块不存在,返回 HTTP 错误 400 BadRequest

3. 解析超时设置

timeoutSeconds, err := getTimeout
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值