6.prometheus服务发现(基于file、dns)
一、概述
手动配置监控目标不适合大批量的监控节点,尤其是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