Prometheus 服务发现机制详解:
静态配置:
yamlscrape_configs: - job_name: 'node' static_configs: - targets: ['192.168.1.10:9100', '192.168.1.11:9100'] labels: datacenter: 'dc1'
Kubernetes 服务发现:
yamlscrape_configs: - job_name: 'kubernetes-pods' 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_ip] target_label: __address__ replacement: $1:9104
Kubernetes 角色类型:
pod:发现所有 Podservice:发现所有 Serviceendpoints:发现 Service 的 Endpointsendpointslices:发现 EndpointSlicesnode:发现所有 Nodeingress:发现所有 Ingress
Consul 服务发现:
yamlscrape_configs: - job_name: 'consul' consul_sd_configs: - server: 'consul.example.com:8500' services: ['web', 'api'] tag_separator: ',' scheme: http
DNS SRV 服务发现:
yamlscrape_configs: - job_name: 'dns' dns_sd_configs: - names: ['_prometheus._tcp.example.com'] type: SRV port: 9100
EC2 服务发现:
yamlscrape_configs: - job_name: 'ec2' ec2_sd_configs: - region: us-east-1 access_key: AKIA... secret_key: xxx...
Relabel Configs(重标签配置):
replace:替换标签值keep:保留匹配的目标drop:丢弃匹配的目标keep_if_equal:如果标签相等则保留drop_if_equal:如果标签相等则丢弃hashmod:哈希取模labelmap:标签映射
常用元标签:
__meta_kubernetes_pod_name:Pod 名称__meta_kubernetes_service_name:Service 名称__meta_consul_service_metadata_*:Consul 元数据__meta_ec2_tag_*:EC2 标签
最佳实践:
- 使用注解控制 Pod 是否被采集
- 合理使用标签进行分组
- 定期清理无用的服务发现配置
- 使用
relabel_configs过滤不需要的目标 - 监控服务发现的性能影响