
这两个函数是 Go 语言 node_exporter 的核心部分,主要与 Prometheus 指标的收集、注册、处理以及 HTTP 处理器的创建相关。我们将逐步解析每个函数的逻辑。
1. newHandler函数
func newHandler(includeExporterMetrics bool, maxRequests int, logger *slog.Logger) *handler {
h := &handler{
exporterMetricsRegistry: prometheus.NewRegistry(),
includeExporterMetrics: includeExporterMetrics,
maxRequests: maxRequests,
logger: logger,
}
if h.includeExporterMetrics {
h.exporterMetricsRegistry.MustRegister(
promcollectors.NewProcessCollector(promcollectors.ProcessCollectorOpts{
}),
promcollectors.NewGoCollector(),
)
}
if innerHandler, err := h.innerHandler(); err != nil {
panic(fmt.Sprintf("Couldn't create metrics handler: %s", err))
} else {
h.unfilteredHandler = innerHandler
}
return h
}
解析:
-
创建
handler对象:h := &handler{ exporterMetricsRegistry: prometheus.NewRegistry(), includeExporterMetrics: includeExporterMetrics, maxRequests: maxRequests, logger: logger, }- 这段代码初始化了一个
handler实例,并设置其属性:exporterMetricsRegistry: 创建一个新的 PrometheusRegistry,用来注册指标。includeExporterMetrics: 是否包括node_exporter自身的指标(如进程、Go runtime 等)。maxRequests: 配置最大并发请求数。logger: 用于记录日志的logger对象。
- 这段代码初始化了一个
-
如果
includeExporterMetrics为true,注册与 exporter 自身相关的指标:if h.includeExporterMetrics { h.exporterMetricsRegistry.MustRegister( promcollectors.NewProcessCollector(promcollectors.ProcessCollectorOpts{

最低0.47元/天 解锁文章
213

被折叠的 条评论
为什么被折叠?



