如何配置 Prometheus 在单个周期内抓取主机名后面的所有 IP?

How to config Prometheus to scrape all IPs behind a hostname in single period?

我已经在一个主机名后面配置了我所有的服务器,我想在一段时间内从所有服务器上抓取指标。

当我配置如下:

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: gamelet-smoba
    honor_timestamps: true
    metrics_path: /metrics
    scheme: http
    relabel_configs:
        - source_labels: [__meta_dns_name]
          target_label: service
    dns_sd_configs:
        - names:
            - my-hostname
          refresh_interval: 2s
          type: A
          port: 29836

普罗米修斯画像:

也就是说dns_sd_configs可以替代单一IP?

如果想监控所有的IP怎么办?

问题中的配置对于任务来说似乎是正确的。但是,为了使其正常工作,DNS 响应必须一次包含 所有目标 IP。它的工作方式是这样的:

  1. Prometheus 发出 DNS 请求以获取目标列表。
  2. refresh_interval: 2s 缓存目标列表。
  3. Prometheus 为列表中的每个目标发出一个抓取请求。

在下一次迭代中(由 scrape_interval 定义)如果目标列表尚未过期,Prometheus 可能会跳过 p.1 和 p.2。问题是 DNS 服务器只返回一个 IP,因此,普罗米修斯在每个 scrape_interval 只发出一个抓取请求。随机选择的目标收到了它唯一的基于 IP 的 instance 标签,这就是图表看起来断开连接的原因。