Prometheus 没有抓取 stats d exporter

Posted

技术标签:

【中文标题】Prometheus 没有抓取 stats d exporter【英文标题】:Prometheus is not scraping stats d exporter 【发布时间】:2021-12-22 04:31:58 【问题描述】:

我对 docker、k6、Prometheus、statds 非常陌生。

场景 - 创建一个将运行 create 的 docker compost 文件

    具有自定义指标的 K6 负载测试。将结果发送给 Statsd Exporter(想法是使用 Prometheus 作为数据库,但由于 K6 不支持直接支持 Prometheus,所以我使用的是 Statsd。如果有人有比这更简单的解决方案,请随时提出建议。)。李> Prometheus 将从 statsd 导出器中抓取结果。 Grafana - 将连接到 Prometheus 并显示可视化。

但是发生的情况是生成的 Statsd 指标包括我的自定义指标。但普罗米修斯并没有刮掉它。 prometheus 作业未在 prometheus 的 Status->Targets 页面中列出。

以下是我的 docker-compose 文件。

version: '3.7'
services:
  statsdex:
    image: "prom/statsd-exporter:latest"
    container_name: statsd_exporter
    ports:
      - 9102:9102
    volumes:
            - ./loadtesting/statsd_mapping.yml:/tmp/statsd_mapping.yml 
  k6:
    image: "loadimpact/k6:0.32.0"
    command: ["run", "/scripts/K6-script.js","-q", "-o","statsd"]
    depends_on:
      - statsdex
    environment:
      K6_STATSD_ADDR: "statsdex:9125"
      K6_STATSD_ENABLE_TAGS: "true"
      K6_STATSD_PUSH_INTERVAL: 1s
      #K6_STATSD_BUFFER_SIZE: 7000
    volumes:
      - "./loadtesting:/scripts"
  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_AUTH_BASIC_ENABLED=false      
      - GF_INSTALL_PLUGINS=michaeldmoore-scatter-panel
    volumes:
      - grafana-storage:/var/lib/grafana
      - ./grafana/dashboards:/etc/grafana/dashboards/
      - ./grafana/datasources:/etc/grafana/datasources/
      - ./grafana:/etc/grafana/provisioning/
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    ports:
        - 9090:9090
    volumes:
        - ./loadtesting/prometheus.yml:/etc/prometheus/prometheus.yml 

volumes:
  grafana-storage:
    external: true

以下是我的 Prometheus yaml 文件,我认为它试图从 statds 导出器输出结果的同一端口抓取数据。 (我没有在 Prometheus 中看到这项工作。我尝试提供 ip 地址,localhost 也是。)

scrape_configs:
  - job_name: 'statsd_exporter'
    static_configs:
      - targets: ['statsd_exporter:9102']

以下是用于 K6 映射的 statds 导出器的映射文件。

defaults:
  observer_type: histogram
mappings:
- match: "k6.*"
  name: "k6_$1"
- match: "k6.check.*.*.*"
  name: "k6_check"
  labels:
    http_name: "$1"
    check_name: "$2"
    outcome: "$3"

当我使用命令 docker compose up 时,我可以看到

    在所有四个服务都已启动并运行的 docker 桌面中。脚本执行完成后 K6 退出。 我可以在 http://localhost:9102/metrics 看到 Statsd Metrics 我可以看到 Prometheus 设置在 http://localhost:9090。但是在 Status->Targets 部分我没有看到 Statsd Exporter。这就是我认为问题所在。 Prometheus 和 Statsd 出口商没有互相交谈。这可能是我无法从 Prometheus 查询 statsd 导出器中的自定义指标的原因。

以下是Prometheus中的配置。

global:
  scrape_interval: 15s
  scrape_timeout: 10s
  evaluation_interval: 15s
alerting:
  alertmanagers:
  - follow_redirects: true
    scheme: http
    timeout: 10s
    api_version: v2
    static_configs:
    - targets: []
scrape_configs:
- job_name: prometheus
  honor_timestamps: true
  scrape_interval: 15s
  scrape_timeout: 10s
  metrics_path: /metrics
  scheme: http
  follow_redirects: true
  static_configs:
  - targets:
    - localhost:9090
- job_name: wmi_exporter
  honor_timestamps: true
  scrape_interval: 15s
  scrape_timeout: 10s
  metrics_path: /metrics
  scheme: http
  follow_redirects: true
  static_configs:
  - targets:
    - localhost:9182

谁能帮我弄清楚到底是什么问题?

【问题讨论】:

我不记得 OTOH 但 Compose DNS 是使用 statsdex(服务名称)还是 statsd_exporter(容器名称)构建的?或者两者兼而有之?您在 Prometheus 配置中使用 statsd_exporter,您可能希望将其切换为 statsdex 您可能需要检查日志中的错误docker-compose logs statsdex... prometheus 【参考方案1】:

我发现了问题并得出了解决方案。

prometheus 和 statsdex 没有互相交谈。 Prometheus 是在刮自己而不是 statsdex。我为 prometheus 更改了我的 docker compose 并提供了 prometheus yml 文件的详细信息。我将普罗米修斯文件保存在给定的确切位置。 所以 promethus 从配置文件中读取。

普罗米修斯: 图片:舞会/普罗米修斯 命令: - '--config.file=/etc/prometheus/prometheus.yml' 容器名称:普罗米修斯 端口: - 9090:9090 卷: - ./prometheus:/etc/prometheus - 普罗米修斯数据:/普罗米修斯

在 prometheus yml 文件中,我给出了 ip 地址而不是服务的名称。

scrape_configs:

job_name: 'statsdex' 指标路径:/指标 静态配置: 目标:['x.x.x.1:9102']

它就像一个魅力。

【讨论】:

以上是关于Prometheus 没有抓取 stats d exporter的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Prometheus 中每小时正确抓取和查询指标

ADB抓取内存命令

Prometheus 使用自定义标头抓取 /metric

Prometheus(在 Docker 容器中)无法在主机上抓取目标

将 Prometheus 抓取的数据转换为数组

容器化 Prometheus 无法抓取 JMX-exporter