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

一、背景

Consul Documentation | Consul | HashiCorp Developer

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

二、基于Consul的自动发现

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

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

  1. 在consul注册服务或注销服务(监控targets)
  2. Prometheus一直监视consul服务,当发现consul中符合要求的服务有新变化就会更新Prometheus监控对象

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

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

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

四、工作原理

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

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

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

85f16fd

五、容器化Consul集群

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

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

各参数说明:

测试验证:

可通过web端访问,例如:http://192.10.192.109:18500/

六、注册主机到Consul

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

添加:

删除:

七、Prometheus配置Consul实现自动服务发现

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

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

八、总结