Prometheus 基于文件的服务发现 file_sd_configs

网友投稿 1137 2022-09-04

Prometheus 基于文件的服务发现 file_sd_configs

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小时内删除侵权内容。

上一篇:除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等(高并发nginx负载均衡策略)
下一篇:禁止Windows Server自动更新及更新后自动重启
相关文章

 发表评论

暂时没有评论,来抢沙发吧~