Detailed explanation of Prometheus service discovery mechanisms:
Static Configuration:
yamlscrape_configs: - job_name: 'node' static_configs: - targets: ['192.168.1.10:9100', '192.168.1.11:9100'] labels: datacenter: 'dc1'
Kubernetes Service Discovery:
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 Role Types:
pod: Discover all Podsservice: Discover all Servicesendpoints: Discover Service Endpointsendpointslices: Discover EndpointSlicesnode: Discover all Nodesingress: Discover all Ingresses
Consul Service Discovery:
yamlscrape_configs: - job_name: 'consul' consul_sd_configs: - server: 'consul.example.com:8500' services: ['web', 'api'] tag_separator: ',' scheme: http
DNS SRV Service Discovery:
yamlscrape_configs: - job_name: 'dns' dns_sd_configs: - names: ['_prometheus._tcp.example.com'] type: SRV port: 9100
EC2 Service Discovery:
yamlscrape_configs: - job_name: 'ec2' ec2_sd_configs: - region: us-east-1 access_key: AKIA... secret_key: xxx...
Relabel Configs:
replace: Replace label valueskeep: Keep matching targetsdrop: Drop matching targetskeep_if_equal: Keep if labels are equaldrop_if_equal: Drop if labels are equalhashmod: Hash modulolabelmap: Label mapping
Common Metadata Labels:
__meta_kubernetes_pod_name: Pod name__meta_kubernetes_service_name: Service name__meta_consul_service_metadata_*: Consul metadata__meta_ec2_tag_*: EC2 tags
Best Practices:
- Use annotations to control Pod scraping
- Use labels for grouping
- Regularly clean up unused service discovery configs
- Use
relabel_configsto filter unwanted targets - Monitor service discovery performance impact