基于Consul的自动发现

基于Consul的自动发现

背景

Consul Documentation | Consul | HashiCorp Developer

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

基于Consul的自动发现

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

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

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

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

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

  • static._configs: 静态服务发现
  • fi1e_sd_configs: 文件服务发现
  • dns_sd_configs: DNS服务发现
  • kubernetes_sd_configs: Kubernetes服务发现
  • consu1_sd_configs:Consul 服务发现

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

工作原理

  • Prometheus通过Consul API查询Consul的KV存储中保存的配置信息,然后从中获取关于服务的元数据;
  • Prometheus使用这些信息来构造目标服务的URL,并将其添加到服务发现的目标列表中。
  • 当服务被注销或不可用时,Prometheus将自动从其目标列表中删除该服务

image-20240820233711464

容器化Consul集群

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

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

$ docker run -id -expose=[8300,8301,8302,8500,8600] --restart always -p 18300:8300 -p 18301:8301 -p 18302:8302 -p 18500:8500 -p 18600:8600 --name server1 -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' docker.m.daocloud.io/consul agent -server -bootstrap-expect=1 -node=server1 -bind=0.0.0.0 -client=0.0.0.0 -ui -datacenter dc1

各参数说明:

-expose:暴露出出来的端口,即consul启动所需的端口:8300,8301,8302,8500,8600
--restart:always表示容器挂了就自动重启
-p:建立宿主机与容器的端口映射
--name:容器名称
-e:环境变量,这里用于对consul进行配置
consul:这是consul镜像名,不是consul命令
agent:容器中执行的命令,各参数含义:
  -server:表示节点是server类型
  -bootstrap-expect:表示集群中有几个server节点后开始选举leader,既然是单节点集群,那自然就是1了
  -node:节点名称
  -bind:集群内部通信地址,默认是0.0.0.0
  -client:客户端地址,默认是127.0.0.1
  -ui:启用consul的web页面管理
  -datacenter:数据中心

测试验证

$ curl localhost:18500

注册主机到Consul

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

## 格式
$ curl -X PUT -d '{"id": "'${host_name}'","name": "node-exporter","address": "'${host_addr}'","port":9100,"tags": ["dam"],"checks": [{"http": "http://'${host_addr}':9100/","interval": "5s"}]}' http://11.0.1.91:18500/v1/agent/service/register

## 示例
$ curl -X PUT -d '{"id": "sh-middler2","name": "node-exporter","address": "11.0.1.91","port":9100,"tags": ["middleware"],"checks": [{"http": "http://11.0.1.91:9100/metrics","interval": "3s"}]}' http://11.0.1.91:18500/v1/agent/service/register

## 参数说明
id : 注册ID `在consul中为唯一标识`
name :Service名称
address:自动注册绑定ip
port:自动注册绑定端口
tags:注册标签,可多个
checks : 健康检查
http:  检查数据来源
interval: 检查时间间隔
http://111.0.1.91:18500/v1/agent/service/register  consul注册接口

删除

## 格式
$ curl -X PUT http://11.0.1.91:18500/v1/agent/service/deregister/${id}

## 示例
$ curl -X PUT http://11.0.1.91:18500/v1/agent/service/deregister/sh-middler2

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

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

添加Job

 - job_name: consul
      honor_labels: true
      metrics_path: /metrics
      scheme: http
      consul_sd_configs:    #基于consul服务发现的配置
        - server: 11.0.1.91:18500    #consul的监听地址
          services: []                 #匹配consul中所有的service
      relabel_configs:             #relabel_configs下面都是重写标签相关配置
      - source_labels: ['__meta_consul_tags']    #将__meta_consul_tags标签的至赋值给product
        target_label: 'servername'
      - source_labels: ['__meta_consul_dc']   #将__meta_consul_dc的值赋值给idc
        target_label: 'idc'
      - source_labels: ['__meta_consul_service']   
        regex: "consul"  #匹配为"consul"的service
        action: drop       #执行的动作为删除 

热加载

curl -XPOST http://prometheus.kubernets.cn/-/reload

总结

  • 动态服务发现和监控:通过与Consul集成,Prometheus可以动态地维护其目标列表,确保在新服务上线时及时发现和监控它们。
  • 可扩展性自动服务发现使得扩展基础架构变得更加容易,无需担心监控数据的可用性和性能问题。
  • 无缝集成Consul作为服务注册中心,使得Prometheus可以与Consul生态系统中的其他工具进行无缝集成,提供完整的服务基础架构监控和管理解决方案。
    控它们。
  • 可扩展性自动服务发现使得扩展基础架构变得更加容易,无需担心监控数据的可用性和性能问题。
  • 无缝集成Consul作为服务注册中心,使得Prometheus可以与Consul生态系统中的其他工具进行无缝集成,提供完整的服务基础架构监控和管理解决方案。
  • 自愈能力自动服务发现意味着Prometheus可以自动检测服务基础架构的变化,并在实时调整监控目标列表,确保监控数据的连续性和高性能。
  • 26
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值