一、概述
手動配置監控目標不適合大批量的監控節點,尤其是kubernetes。
prometheus 通過服務發現解決這個問題,自動機制來檢測,分類和識別新的和變更的目標。可以通過下面三種方式:
• 通過配置管理工具填充的文件接收目標列表(file_sd_config)。
• 查詢API以獲取目標列表(azure_sd_config、consul_sd_config、ec2_sd_config、openstack_sd_config、kubernetes_sd_config、gce_sd_config等等)。
• 使用DNS記錄返回目標列表(dns_sd_config)。
二、基於文件的目標發現(file_sd_configs)
基於文件的發現這是比靜態配置更高級的一小步,但是它對於配置管理工具的配置非常有用。通過基於文件的發現,Prometheus使用文件中指定的目標。這些文件通常由另一個系統生成,例如配置管理系統,如Puppet、Ansible,或者從另一個源(如CMDB)查詢。定期運行腳本或查詢,或觸發它們重新填充這些文件。然后,Prometheus按照指定的時間表從這些文件中重新加載目標。
這些文件可以是Yaml或者Json格式,並包含定義的目標列表,就像我們在靜態配置總定義它們一樣。
[root@node1 prometheus]# mkdir -p targets/{nodes,docker} [root@node1 prometheus]# vim targets/nodes/node_exporter.json [{ "targets":[ "192.168.42.133:9100", "192.168.42.128:9100" ], "labels":{ "datacenter":"CD" } }] [root@node1 prometheus]# vim targets/docker/CAdvisor.yml - targets: - "192.168.42.133:8181" [root@node1 prometheus]# vim prometheus.yml scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'node_exporter' file_sd_configs: - files: - targets/nodes/*.json refresh_interval: 5m - job_name: 'docker_CADvisor' file_sd_configs: - files: - targets/docker/*.yml refresh_interval: 5m [root@node1 prometheus]# docker restart prometheus-server
在web端可以看到配置文件已更新,並且各個target采集數據正常。
在metric查詢框中可以查詢到新采集的數據。(如果graph查詢到以前的實驗數據也很正常,因為會存儲)

三、基於DNS的目標發現
DNS服務發現依賴於查詢A、AAAA或SRV DNS記錄。
基於DNS的服務發現,需要搭建一台配置好的DNS服務器,參見:
https://www.cnblogs.com/cmxu/p/12272997.html
將prometheus-server所在主機的dns設置為剛剛部署好的dns,dns配置好解析記錄如下:

scrape_configs: - job_name: 'node_exporter_dns' #基於SRV記錄發現,不手動指定,默認就是基於SRV dns_sd_configs: - names: ['_prometheus._tcp.cmxu.com'] - job_name: 'docker_CADvisor_dns' #基於A記錄發現 dns_sd_configs: - names: ['node1.cmxu.com'] type: A port: 8181
