app开发者平台在数字化时代的重要性与发展趋势解析
1137
2022-09-04
Prometheus 基于文件的服务发现 file_sd_configs
通过自动化的手段将被监控端监控起来,之前是每次都在普罗米修斯的配置文件里面写要监控谁,然后重载一下就生效了。最后就可以在普罗米修斯图形界面这里看到其配置了
如果被监控端的数据量很大的话,每次修改配置文件很复杂也容易出错。自动化的目的就是将预期的被监控端自动的加入监控。不需要人工干预这件事
Prometheus服务发现
Prometheus添加被监控端支持两种方式:
• 静态配置:手动配置 手动的在配置文件里面添加
• 服务发现:动态发现需要监控的Target实例
最常用的就是consul
服务发现
我们安装了exporter,并且抓取了主机和容器指标。对于指定的每个目标,我们在抓取配置中手动列出了它们的IP地址和端口。这种方法在主机较少时还可以,但不适用于规模较大的集群,尤其不适用于使用容器和基于云的实例的动态集群,这些实例经常会出现变化、创建或销毁的情况。
Prometheus 通过使用服务发现解决了这个问题:通过自动化的机制来检测、分类和识别新的和变更的目标。服务发现可以通过以下几种机制实现:
从配置管理工具生成的文件中接收目标列表。查询API(例如Amazon AWS API)以获取目标列表。使用DNS记录以返回目标列表。
静态配置的局限
要了解服务发现的工作原理,我们需要回顾数据抓取的生命周期(如图所示 数据抓取生命周期 )。当Prometheus开始作业时,第一步就是服务发现,这将生成作业将要抓取的目标和元数据标签列表。
在现有的配置中,服务发现机制是在 static_configs 块中定义的: 静态服务发现
目标列表和关联标签都是采用手动服务发现的方式。不难看出,在繁杂的工作中维护一长串主机列表并不是一个可扩展的任务(HUP的Prometheus服务器也不是每次都可以优雅地启动)。尤其对于
大多数环境的动态特性,以及被监控主机、应用程序和服务的规模来说,这种局限性更为明显。因此需要更成熟的服务发现方式,那么都有哪些方案可供选择呢?我们将探索以下几种服务发现
方案:
基于文件的方式基于云的方式基于DNS的方式
我们将从基于文件的服务发现开始
作业可以使用多种类型的服务发现。我们可以通过多种服务发现技术在作业中指定目标。
支持服务发现的来源
• azure_sd_configs
• consul_sd_configs
• dns_sd_configs
• ec2_sd_configs
• openstack_sd_configs
• file_sd_configs
• gce_sd_configs
• kubernetes_sd_configs
• marathon_sd_configs
• nerve_sd_configs
• serverset_sd_configs
• triton_sd_configs
基于文件的服务发现
基于文件的发现只比静态配置更先进一小步,但它非常适合配置管理工具。借助基于文件的服务发现,Prometheus 会使用文件中指定的目标。这些文件通常由另一个系统生成,例如 Puppet 、 Ansible或Chef 等配置管理系统,或者从其他源(如 CMDB )查询。定期执行脚本或进行查询可以(重新)生成这些文件。Prometheus 会按指定的时间计划从这些文件重新加载目标。 这个简单,只需要在配置文件里面。
这些文件可以是 YAML 或 jsON 格式,包含定义的目标列表,就像我们在静态配置中定义它们一样。让我们从将现有作业迁移到基于文件的服务发现开始。
基于文件的服务发现 :
我们用file_sd_configs块替换prometheus.yml文件中的static_configs块。在这些块中,已经指定了文件列表,并包含在files列表中。我们在父目录targets下为每个作业指定了对应的文件,并为每个作业创建了一个子目录。你可以创建适合你的任何文件结构。然后使用*.json的glob样式来指定文件。每当这些文件发生更改时,系统都将从此目录中所有以.json结尾的文件加载目标。
我们选择了 JSON 格式,因为它是一种方便使用各种语言和集成来编写的流行格式。
每次作业运行或这些文件发生变化时, Prometheus 都会重新加载文件的内容。以防万一,我们还指定了refresh_interval 选项,该选项将在每个间隔结束时加载文件列表中的目标 —— 对这个示例来说是5分钟。
让我们快速创建上述的目录结构。
创建保存目标的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 foundChecking 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配置文件就行了
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~