通过自动化的手段将被监控端监控起来,之前是每次都在普罗米修斯的配置文件里面写要监控谁,然后重载一下就生效了。最后就可以在普罗米修斯图形界面这里看到其配置了
如果被监控端的数据量很大的话,每次修改配置文件很复杂也容易出错。自动化的目的就是将预期的被监控端自动的加入监控。不需要人工干预这件事
Prometheus服务发现
Prometheus添加被监控端支持两种方式:
• 静态配置:手动配置 手动的在配置文件里面添加
• 服务发现:动态发现需要监控的Target实例
最常用的就是consul
服务发现
我们安装了exporter,并且抓取了主机和容器指标。对于指定的每个目标,我们在抓取配置中手动列出了它们的IP地址和端口。这种方法在主机较少时还可以,但不适用于规模较大的集群,尤其不适用于使用容器和基于云的实例的动态集群,这些实例经常会出现变化、创建或销毁的情况。
- 从配置管理工具生成的文件中接收目标列表。
- 查询API(例如Amazon AWS API)以获取目标列表。
- 使用DNS记录以返回目标列表。
静态配置的局限
要了解服务发现的工作原理,我们需要回顾数据抓取的生命周期(如图所示 数据抓取生命周期 )。当Prometheus开始作业时,第一步就是服务发现,这将生成作业将要抓取的目标和元数据标签列表。
目标列表和关联标签都是采用手动服务发现的方式。不难看出,在繁杂的工作中维护一长串主机列表并不是一个可扩展的任务(HUP的Prometheus服务器也不是每次都可以优雅地启动)。尤其对于
- 基于文件的方式
- 基于云的方式
- 基于DNS的方式
作业可以使用多种类型的服务发现。我们可以通过多种服务发现技术在作业中指定目标。
支持服务发现的来源
基于文件的服务发现
让我们快速创建上述的目录结构。
创建保存目标的JSON文件
实际操作如下
添加被监控端: 这里指定目录,只要在这个目录下创建配置文件就会被自动纳入监控,同时指定每隔多少秒检查有没有新的文件
[root@localhost ~]# cd /usr/local/prometheus/
[root@localhost prometheus]# mkdir sd_config
[root@localhost prometheus]# vim sd_config/node.yml
- targets: ['192.168.179.101:9100']
[root@localhost prometheus]# cat sd_config/node.yml
- targets: ['192.168.179.101:9100']
[root@localhost prometheus]# vim prometheus.yml
- job_name: 'file_sd'
file_sd_configs:
- files: ['/usr/local/prometheus/sd_config/*.yml']
refresh_interval: 5s # 每隔5秒检查一次
[root@localhost prometheus]# ./promtool check config prometheus.yml
Checking prometheus.yml
SUCCESS: 1 rule files found
Checking rules/node.yml
SUCCESS: 2 rules found
在192.168.179.101上面启动node_exporter
[root@k8s-master2 node_exporter]# ./node_exporter
热加载一下普罗米修斯 让配置生效,去普罗米修斯界面查看一下
可以看到基于文件的服务发现生效了
如果需要认证可以使用
- job_name: 'file_sd'
basic_auth:
username: prometheus
password: 123456
file_sd_configs:
- files: ['/usr/local/prometheus/sd_config/*.yml']
refresh_interval: 5s
所以当指定路径下面有yml文件或者yml文件有更新的时候,那么普罗米修斯会自动的帮你加载,就不需要重启这种操作
所以只需要生成yml配置文件就行了