一、背景

Consul Documentation Consul HashiCorp Developer

Prometheus配置文件 prometheus-config.yam 配置了大量的采集规则,基本上都是运维小伙伴手动处理,如果后面增加了节点或者组件信息,就得手动修改此配置,并热加载 promethues;那么能否动态的监听微服务呢? Prometheus 摄供了多种动态服务发现的功能,这里以consul为例。

二、基于Consul的自动发现

ConsuI是分布式K/V数据库,是一个服务注册组件,其他服务都可以注册到consul上,Prometheus也不例外,通过consul的服务发现,我们可以避免在Prometheus中指定大量的target.

prometheus基于consul的服务发现流程如下:

1.在consul注册服务或注销服务(监控targets)

2.Prometheus一直监视consul服务,当发现consul中符合要求的服务有新变化就会更新Prometheus监控对象

三、Prometheus 支持的多种服务发现机制

Prometheus数据源的配置主要分为静态配置和动态发现,常用的为以下几类:

基于Prometheus的全方位监控平台--基于Consul的自动发现_工作原理

在监控kubernetes的应用场景中,频繁更新的pod,SVC,等资源配置应该是最能体现Prometheus监控目标自动发现服务的好处,

四、工作原理

1、Prometheus通过ConsulAPI查询Consul的KV存储中保存的配置信息,然后从中获取关于服务的元数据:

2、Prometheus使用这些信息来构造目标服务的URL,并将其添加到服务发现的目标列表中

3、当服务被注销或不可用时,Prometheus将自动从其目标列表中制除该服务。

基于Prometheus的全方位监控平台--基于Consul的自动发现_Prometheus_02

五、容器化Consul集群

测试验证,不可作为线上使用! 线上一定要甚于集群的方式做整体的部署验证,并做服务进程的守护及监控

创建一个只有一个节点的consul集群

基于Prometheus的全方位监控平台--基于Consul的自动发现_工作原理_03

基于Prometheus的全方位监控平台--基于Consul的自动发现_Prometheus_04

测试验证: 可通过web端访问,例如: http://192.10.192.109:18500/

curl 1ocalhost:18500
六、注册主机到Consul

例如:将某台虚机上的 node-exporter 注册到 consule.

添加:

基于Prometheus的全方位监控平台--基于Consul的自动发现_工作原理_05

删除

## 格式
$ cur1 -x PUT http://192.10.192.109:18500/v1/agent/service/deregister/s{id}
## 示例
$ cur1 -X PUT http://192.10.192.109:18500/v1/agent/service/deregister/sh-middler2
七、Prometheus配置Consul实现自动服务发现

修改prometheus的configmap配置文件:prometheus-config.yam

基于Prometheus的全方位监控平台--基于Consul的自动发现_工作原理_06

按上面方法重载 Prometheus,打开 Prometheus 的Target 页面,就会看到上面定义的 mysql-exporter 任务

八、总结

动态服务发现和监控:通过与Consul集成,Prometheus可以动态地维护其目标列表,确保在新服务上线时及时发现和监控它们,

可扩展性:自动服务发现使得扩展基础架构变得更加容易,无需担心监控数据的可用性和性能问题。

无缝集成:Consul作为服务注册中心,使得Prmetheus可以与Consul生态系统中的其他工具进行无缝集成,提供究整的服务基础架构监控和管理解决方案

自愈能力:自动服务发现意味着Prometheus可以自动检测服务甚础架构的变化,并在实时调整监控目标列表,确保监控数现的连续性和高性能