侧边栏壁纸
  • 累计撰写 28 篇文章
  • 累计创建 23 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

prometheus采集node_exporter并应用http请求参数过滤采集器

zhanjie.me
2024-08-29 / 0 评论 / 0 点赞 / 11 阅读 / 0 字
  • 将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

image-mlwgmjfl.png image-ufodxykp.png

在prometheus中查询 node_exporter的指标

image-itbwjtpt.png image-xhypesql.png

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_namelabel 过滤

  • node_exportercollect[] 参数:用于控制在采集数据时就进行过滤,减少采集量和导出器的负担。
  • Prometheusrelabel_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)
}
0

评论区