Prometheus 支持多种服务发现(Service Discovery)机制,可以自动发现目标系统并从中抓取指标。以下是一些常见的服务发现机制:
-
静态配置:你可以在 Prometheus 的配置文件中静态地列出所有的抓取目标。
-
文件服务发现:Prometheus 可以监视一组文件,这些文件中包含了抓取目标的信息。当这些文件发生变化时,Prometheus 会自动更新抓取目标。
-
DNS 服务发现:Prometheus 可以使用 DNS SRV 记录来发现抓取目标。
-
Consul:Prometheus 可以从 Consul 服务发现和配置系统中获取抓取目标。
-
Kubernetes:Prometheus 可以从 Kubernetes API 中获取抓取目标,包括 Pod、Service、Endpoints 等。
-
EC2:Prometheus 可以从 Amazon EC2 API 中获取抓取目标。
你需要在 Prometheus 的配置文件中配置相应的服务发现机制。例如,以下是一个使用 Kubernetes 服务发现的配置示例:
scrape_configs:
- job_name: 'kubernetes'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
action: replace
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
target_label: __address__
在这个配置中,Prometheus 会抓取所有带有 prometheus.io/scrape: "true"
注解的 Kubernetes Pod。__metrics_path__
和 __address__
标签会被替换为 Pod 的注解中定义的值。