监控
Zabbix
Zabbix部署及基础配置
Prometheus
Prometheus部署
基于Consul的自动发现
Prometheus Operator部署
本文档使用 MrDoc 发布
-
+
首页
基于Consul的自动发现
# 1、背景 [Consul Documentation | Consul | HashiCorp Developer](https://developer.hashicorp.com/consul/docs) Prometheus配置文件 prometheus-config.yaml 配置了大量的采集规则,基本上都是运维小伙伴手动处理,如果后面增加了节点或者组件信息,就得手动修改此配置,并热加载 promethues;那么能否动态的监听微服务呢?Prometheus 提供了多种动态服务发现的功能,这里以 consul 为例。 # 2、基于Consul的自动发现 Consul是分布式k/v数据库,是一个服务注册组件,其他服务都可以注册到consul上, Prometheus也不例外,通过consul的服务发现,我们可以避免在Prometheus中指定大量的target。 prometheus基于consul的服务发现流程如下: - 1、在consul注册服务或注销服务(监控targets) - 2、Prometheus一直监视consul服务,当发现consul中符合要求的服务有新变化就会 更新Prometheus监控对象 # 3、Prometheus支持的多种服务发现机制 Prometheus数据源的配置主要分为 **静态配置** 和 **动态发现** , 常用的为以下几类: ```bash 1)static_configs: #静态服务发现 2)file_sd_configs: #文件服务发现 3)dns_sd_configs: #DNS服务发现 4)kubernetes_sd_configs: #Kubernetes 服务发现 5)consul_sd_configs: #Consul服务发现 ``` 在监控kubernetes的应用场景中,频繁更新的pod,svc,等资源配置应该是最能体现 Prometheus监控目标自动发现服务的好处。 # 4、工作原理 1、Prometheus通过Consul API查询Consul的KV存储中保存的配置信息,然后从中获关于服务的元数据; 2、Prometheus使用这些信息来构造目标服务的URL,并将其添加到服务发现的目标列表中。 3、当服务被注销或不可用时,Prometheus将自动从其目标列表中删除该服务。  # 5、容器化Consul集群 测试验证,**不可作为线上使用!** 线上一定要基于集群的方式做整体的部署验证,并做服务进程的守护及监控。 创建一个只有一个节点的consul集群 ```bash $ 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}' consul agent -server -bootstrap-expect=1 -node=server1 -bind=0.0.0.0 -client=0.0.0.0 -ui -datacenter dc1 ``` 各参数说明: ```bash -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:数据中心 ``` **测试验证:** 可通过web端访问,例如:http://192.10.192.109:18500/ ```BASH $ curl localhost:18500 ``` # 6、注册主机到Consul 例如:将某台虚机上的 node-exporter 注册到 consule. **添加:** ```bash ## 格式 $ 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://192.10.192.109:18500/v1/agent/service/register ## 示例 $ curl -X PUT -d '{"id": "sh-middler2","name": "node-exporter","address": "192.10.192.134","port":9100,"tags": ["middleware"],"checks": [{"http": "http://192.10.192.134:9100/metrics","interval": "3s"}]}' http://192.10.192.109:18500/v1/agent/service/register ## 参数说明 id : 注册ID 在consul中为唯一标识 name :Service名称 address:自动注册绑定ip port:自动注册绑定端口 tags:注册标签,可多个 checks : 健康检查 http: 检查数据来源 interval: 检查时间间隔 http://192.10.192.109:18500/v1/agent/service/register consul注册接口 ```  **删除:** ```bash ## 格式 $ curl -X PUT http://192.10.192.109:18500/v1/agent/service/deregister/${id} ## 示例 $ curl -X PUT http://192.10.192.109:18500/v1/agent/service/deregister/sh-middler2 ``` # 7、Prometheus配置Consul实现自动服务发现 修改prometheus的configmap配置文件:`prometheus-config.yaml ` ```yaml - job_name: consul honor_labels: true metrics_path: /metrics scheme: http consul_sd_configs: #基于consul服务发现的配置 - server: 192.10.192.109: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 #执行的动作为删除 ``` 按上面方法重载 Prometheus,打开 Prometheus 的 Target 页面,就会看到 上面定义的 `mysql-exporter` 任务 ```bash curl -XPOST http://prometheus.kubernets.cn/-/reload ``` 
阿星
2024年1月27日 16:17
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码