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
 
posted @ 2020-02-07 15:14  _幸会  阅读(1601)  评论(0编辑  收藏  举报