docker Prometheus不显示“/metrics”端点上本地主机服务的自定义指标

kr98yfug  于 2023-02-07  发布在  Docker
关注(0)|答案(1)|浏览(293)

我正在localhost上运行一个服务,该服务将指标导出到Docker上运行的Prometheus容器。我可以通过Prometheus的/graph端点看到我的指标已正确注册、抓取和显示。但是,我找不到Prometheus的/metrics端点上报告的指标。
我的服务使用Prometheus Java客户机在localhost:8081/metrics上公开度量。我的服务在localhost:8081/metrics上公开如下:

public class Main {
  private HTTPServer server;
  public static final int SERVER_PORT = 8081;

  /**
   * Initiates the Prometheus Exposer HTTP Server.
   */
  public void main(String args[]) {

    try {
      server = new HTTPServer(SERVER_PORT);
    } catch (IOException e) {
      throw new IllegalStateException("could not start metrics server:\t" + e);
    }

    io.prometheus.client.Gauge gauge = io.prometheus.client.Gauge
        .build()
        .namespace("some_namespace")
        .subsystem("some_subsystem")
        .name("some_name")
        .help("helpMessage")
        .register();

    int i = 0;
    while (true) {
      try {
        Thread.sleep(1000);
        gauge.set(i++);
      } catch (InterruptedException ex) {
        System.err.println("Thread sleep issue, breaking the loop");
        break;
      }
    }
  }

  /**
   * Terminates the Prometheus Exposer HTTP Server.
   */
  public void terminate() {
    try {
      server.close();
    } catch (Exception e) {
      throw new IllegalStateException("could not stop metrics server:\t" + e);
    }
  }
}

我正在使用Prometheus Docker文件,并使用以下配置运行该文件:

version: '2.1'
networks:
  monitor-net:
    driver: bridge
volumes:
    prometheus_data: {}
services:
  prometheus:
    image: prom/prometheus:v2.22.1
    container_name: prometheus
    volumes:
      - ./prometheus:/etc/prometheus
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'
      - '--storage.tsdb.retention.time=200h'
      - '--web.enable-lifecycle'
    restart: unless-stopped
    expose:
      - 9090
    networks:
      - monitor-net
    labels:
      org.label-schema.group: "monitoring"

我的prometheus.yml文件配置如下:

global:
  scrape_interval: 15s
scrape_configs:
  - job_name: 'my_job'
    honor_timestamps: true
    scrape_interval: 15s
    scrape_timeout: 10s
    metrics_path: /metrics
    scheme: http
    static_configs:
      - targets: [ 'host.docker.internal:8081' ]

我可以看到Prometheus在“/metrics”端点上收集并报告与“my_job”关联的多个Prometheus本机指标。但是,我通过Prometheus Java客户端注册的计量器指标只能通过“/graph”端点访问。以下是显示在“/metrics”端点上的此类Prometheus本机指标的示例:

# TYPE prometheus_target_sync_length_seconds summary
prometheus_target_sync_length_seconds{scrape_job="my_job",quantile="0.01"} 0.000311125
prometheus_target_sync_length_seconds{scrape_job="my_job"",quantile="0.05"} 0.000311125
prometheus_target_sync_length_seconds{scrape_job="my_job",quantile="0.5"} 0.000311125
prometheus_target_sync_length_seconds{scrape_job="my_job"",quantile="0.9"} 0.000311125
prometheus_target_sync_length_seconds{scrape_job="my_job"",quantile="0.99"} 0.000311125

我还检查了:
Prometheus配置文件具有适用于我的应用程序的正确目标和擦除配置。Prometheus和我的应用程序的日志中没有与指标收集相关的错误或警告。指标正在以Prometheus文本格式导出。指标正在通过Prometheus配置为擦除的正确终结点和端口导出。我仍然不确定为什么我的指标没有显示在“/metrics”上终结点。我将继续调查并解决此问题。

5hcedyr0

5hcedyr01#

哦,你搞错了。http://localhost:9090/metrics是你的prometheus示例的url。它会显示prometheus自身的指标,比如多少数据被抓取,多少数据被存储等等。它不应该显示prometheus收集的数据。所以你找到的指标只是prometheus花了多少时间抓取你的数据。
实际上,您需要的是在http://localhost:9090/api/v1上访问Prometheus API并查询有关指标的数据,但是一旦您了解了如何运行查询(这也可以在/graph端点上完成),您可能需要像Grafana这样的可视化工具。
回到你的问题:它正在按设计工作。

相关问题