- 将node_exporter 作为采集job配置在prometheus
- node_exporter 通过http参数 过滤相关模块的指标
- prometheus如何配置 采集目标的参数
- node_export源码中怎么处理传入的模块参数
将node_exporter job配置在prometheus中
编辑prometheus配置文件
[root@prome-master ~]# vim /opt/app/prometheus/prometheus.yml
...
scrape_configs:
- job_name: node_exporter
honor_timestamps: true
scrape_interval: 8s
scrape_timeout: 8s
metrics_path: /metrics
scheme: http
follow_redirects: true
static_configs:
- targets:
- 192.168.40.20:9100
...
发送热更新命令
curl -vvv -X POST localhost:9090/-/reload
gui查看config与target
在prometheus中查询 node_exporter的指标
http传入参数,按采集器过滤指标
使用collect参数
-
访问node_exporter metrics页面,传入 collect参数
# 只看cpu采集器的指标 http://192.168.40.20:9100/metrics?collect[]=cpu # 只看cpu和mem采集器的指标 http://192.168.40.20:9100/metrics?collect[]=cpu&collect[]=meminfo -
prometheus配置参数
[root@prome-master ~]# vim /opt/app/prometheus/prometheus.yml ... scrape_configs: - job_name: node_exporter honor_timestamps: true scrape_interval: 8s scrape_timeout: 8s metrics_path: /metrics scheme: http follow_redirects: true static_configs: - targets: - 192.168.40.20:9100 params: collect[]: - cpu - meminfo
prometheusrelabel_config的区别 :
按采集器过滤 VS 按 metric_name 或 label 过滤
- node_exporter 的
collect[]参数:用于控制在采集数据时就进行过滤,减少采集量和导出器的负担。 - Prometheus 的
relabel_config:用于在数据已经被抓取到 Prometheus 后进行进一步的过滤、修改或标签处理。
二者可以结合使用:先通过 node_exporter 的 collect[] 参数过滤掉大部分不需要的数据,再通过 relabel_config 进行更细粒度的调整。
原理: 通过http请求参数过滤采集器
- collect参数解析在
node_exporter-release-1.1/node_exporter.go - 根据http传入的collect参数,进行filter采集模块过滤
- 将过滤后的模块注册到prometheus采集器上
func (h *handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
filters := r.URL.Query()["collect[]"]
level.Debug(h.logger).Log("msg", "collect query:", "filters", filters)
if len(filters) == 0 {
// No filters, use the prepared unfiltered handler.
h.unfilteredHandler.ServeHTTP(w, r)
return
}
// To serve filtered metrics, we create a filtering handler on the fly.
filteredHandler, err := h.innerHandler(filters...)
if err != nil {
level.Warn(h.logger).Log("msg", "Couldn't create filtered metrics handler:", "err", err)
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte(fmt.Sprintf("Couldn't create filtered metrics handler: %s", err)))
return
}
filteredHandler.ServeHTTP(w, r)
}
评论区