Prometheus 从未知数量的 (docker-) 主机中抓取

Prometheus scrape from unknown number of (docker-)hosts

我有一个 Docker Swarm,带有一个 Prometheus 容器和一个用于特定微服务的 1-n 个容器。

url 可以访问微服务容器。我想这个 url 的请求是某种负载平衡的(当然...)。

目前我已经生成了两个微服务容器。查询指标现在似乎在两个容器之间切换。示例:总请求数:10, 13, 10, 13, 10, 13,...

这是我的普罗米修斯配置。我需要做什么?我不想在每次终止或启动微服务容器时都调整 Prometheus 配置。

scrape_configs:
  - job_name: 'myjobname'
    metrics_path: '/prometheus'
    scrape_interval: 15s
    static_configs:
      - targets: ['the-service-url:8080']
        labels:
          application: myapplication

更新 1 我按如下方式更改了我的配置,这似乎有效。此配置在 Docker Swarm 内部使用 dns 查找并找到所有实例 运行 指定的服务。

scrape_configs:
  - job_name: 'myjobname'
    metrics_path: '/prometheus'
    scrape_interval: 15s
    dns_sd_configs:
      - names: ['tasks.myServiceName']
        type: A
        port: 8080

这里的问题是:此配置是否识别一个 Docker 实例已停止而另一个实例已启动?

更新 2 我要求的有一个参数:

scrape_configs:
  - job_name: 'myjobname'
    metrics_path: '/prometheus'
    scrape_interval: 15s
    dns_sd_configs:
      - names: ['tasks.myServiceName']
        type: A
        port: 8080
        # The time after which the provided names are refreshed
        [ refresh_interval: <duration> | default = 30s ]

这应该可以解决问题。

所以答案很简单: 有multiple, documented ways to scrape。 我正在使用 dns-lookup-way:

scrape_configs:
    - job_name: 'myjobname'
        metrics_path: '/prometheus'
        scrape_interval: 15s
        dns_sd_configs:
            - names ['tasks.myServiceName']
                type: A
                port: 8080
                refresh_interval: 15s