Prometheus基于consul服务发现
安装consul#
1 2 3 | wget https: //releases.hashicorp.com/consul/1.6.1/consul_1.6.1_linux_amd64.zip unzip consul_1.5.3_linux_amd64.zip ./consul agent -dev |
或者
1 | docker run --name consul -d -p 8500:8500 consul |
访问地址为: http://172.30.12.167:8500
添加测试注册服务,添加本机的node-exporter和另一台主机的cadvisor-exporter。
1 2 | curl -X PUT -d '{"id": "node-exporter1","name": "node-exporter1-192.168.31.131","address": "192.168.31.131","port": 9100,"tags": ["test"],"checks": [{"http": "http://192.168.31.131:9100/metrics", "interval": "5s"}]}' http://192.168.31.131:8500/v1/agent/service/register curl -X PUT -d '{"id": "cadvisor-exporter1","name": "cadvisor-exporter1-192.168.31.158","address": "192.168.31.158","port": 9200,"tags": ["test1"],"checks": [{"http": "http://192.168.31.158:9200/metrics", "interval": "5s"}]}' http://192.168.31.131:8500/v1/agent/service/register |
注销服务,如果不需要继续监控注册到consul的某个服务,如node-exporter,通过如下命令删除
1 | #curl -X PUT http://192.168.31.131:8500/v1/agent/service/deregister/node-exporter |
更新Prometheus配置
1 2 3 4 5 6 7 8 9 10 11 12 13 | [root@localhost prometheus]# vim /home/prometheus/prometheus.yml global: # 全局设置,可以被覆盖 scrape_interval: 15s # 抓取采样数据的时间间隔,每15秒去被监控机上采样,即数据采集频率 evaluation_interval: 15s # 监控数据规则的评估频率,比如设置文件系统使用率>75%发出告警则每15秒执行一次该规则,进行文件系统检查 scrape_configs: # 抓取配置 #服务发现 - job_name: 'consul-prometheus' consul_sd_configs: #基于服务发现类型 - server: '192.168.31.131:8500' #服务地址 relabel_configs: - source_labels: [__meta_consul_tags] #注意两个下划线 "__" regex: .*,test,.* #匹配__meta_consul_tags值包含test的数据(即tags=test) action: keep #丢弃__meta_consul_tags值中不包含test的数据 |
1 | 热加载prometheus |
1 | #curl -X POST http://localhost:9090/-/reload #热加载prometheus命令 |
自定义标签信息#
Prometheus 允许用户在采集任务设置中,通过 relabel_configs
来添加自定义的 Relabeling 的额过程,来对标签进行指定规则的重写。Target 以 __
作为前置的标签是在系统内部使用的。Prometheus 内部做了一次标签重写处理,所以 instance 标签的内容刚好对应 Target 实例的 __address__
值。
详细 relabel_configs 配置及说明可以参考 relabel_config 官网说明。
- replace: 根据 regex 的配置匹配 source_labels 标签的值(注意:多个 source_label 的值会按照 separator 进行拼接),并且将匹配到的值写入到 target_label 当中,如果有多个匹配组,则可以使用 ${1}, ${2} 确定写入的内容。如果没匹配到任何内容则不对 target_label 进行重新, 默认为 replace。
- keep: 丢弃 source_labels 的值中没有匹配到 regex 正则表达式内容的 Target 实例
- drop: 丢弃 source_labels 的值中匹配到 regex 正则表达式内容的 Target 实例
- hashmod: 将 target_label 设置为关联的 source_label 的哈希模块
- labelmap: 根据 regex 去匹配 Target 实例所有标签的名称(注意是名称),并且将捕获到的内容作为为新的标签名称,regex 匹配到标签的的值作为新标签的值
- labeldrop: 对 Target 标签进行过滤,会移除匹配过滤条件的所有标签
- labelkeep: 对 Target 标签进行过滤,会移除不匹配过滤条件的所有标签
上面的 relabel_configs 配置作用为丢弃源标签中 __meta_consul_tags 不包含 test 标签的服务,__meta_consul_tags 对应到 Consul 服务中的值为 "tags": ["test"],默认 consul 服务是不带该标签的,从而实现过滤。
下面进行标签自定义,并分组。
向 Meta Data 数据添加自定义标签信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #vim /home/prometheus/config/consul-0.json { "ID" : "node-exporter" , "Name" : "node-exporter-192.168.31.131" , "Tags" : [ "test" ], "Address" : "192.168.31.131" , "Port" : 9100, "Meta" : { "app" : "spring-boot" , "team" : "appgroup" , "project" : "bigdata" }, "EnableTagOverride" : false , "Check" : { "HTTP" : "http://192.168.31.131:9100/metrics" , "Interval" : "10s" }, "Weights" : { "Passing" : 10, "Warning" : 1 } } |
注:该 Json 文件为要注册的服务信息,同时往 Meta 信息中添加了 app=spring-boot
,team=appgroup
,project=bigdata
三组标签,目的就是为了方便告警分组使用。
注册服务
1 | curl --request PUT --data @/home/prometheus/config/consul-0.json http: //192.168.31.131:8500/v1/agent/service/register?replace-existing-checks=1 |
更新Prometheus.yml
1 2 3 4 5 6 7 8 9 | - job_name: 'consul-prometheus' consul_sd_configs: #基于服务发现类型 - server: '192.168.31.131:8500' #服务地址 relabel_configs: - source_labels: [__meta_consul_tags] regex: .*,test,.* action: keep - regex: __meta_consul_service_metadata_(.+) action: labelmap |
将自动发现的服务进行分类#
可以通过服务 Tag 来进行匹配来创建不同的类型 exporter 分组,通过给每个服务标记不同的 Tag,然后通过 relabel_configs
来进行匹配区分。
注册服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | $ vim /home/prometheus/config/consul-1.json { "ID" : "node-exporter" , "Name" : "node-exporter-192.168.31.131" , "Tags" : [ "node-exporter" ], "Address" : "192.168.31.131" , "Port" : 9100, "Meta" : { "app" : "spring-boot" , "team" : "appgroup" , "project" : "bigdata" }, "EnableTagOverride" : false , "Check" : { "HTTP" : "http://192.168.31.131:9100/metrics" , "Interval" : "10s" }, "Weights" : { "Passing" : 10, "Warning" : 1 } } # 更新注册服务 $ curl --request PUT --data @/home/prometheus/config/consul-1.json http: //192.168.31.131:8500/v1/agent/service/register?replace-existing-checks=1 $ vim /home/prometheus/config/consul-2.json { "ID" : "cadvisor-exporter" , "Name" : "cadvisor-exporter-192.168.31.131" , "Tags" : [ "cadvisor-exporter" ], "Address" : "192.168.31.131" , "Port" : 9080, "Meta" : { "app" : "docker" , "team" : "cloudgroup" , "project" : "docker-service" }, "EnableTagOverride" : false , "Check" : { "HTTP" : "http://192.168.31.131:9080/metrics" , "Interval" : "10s" }, "Weights" : { "Passing" : 10, "Warning" : 1 } } # 注册服务 $ curl --request PUT --data @/home/prometheus/config/consul-2.json http: //192.168.31.131:8500/v1/agent/service/register?replace-existing-checks=1 |
更新Prometheus.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | [root@localhost prometheus]# vim /home/prometheus/prometheus.yml #文件发现 - job_name: 'file_ds' #任务名 全局唯一 file_sd_configs: #基于文件发现配置 - files: [ '/etc/prometheus/config/*.yml' ] #配置文件路径 refresh_interval: 5s #每五秒扫描刷新配置文件 #服务发现 - job_name: 'consul-node-exporter' consul_sd_configs: #基于服务发现类型 - server: '192.168.31.131:8500' #服务地址 services: [] relabel_configs: - source_labels: [__meta_consul_tags] #注意两个横杠 "__" regex: .*node-exporter.* #匹配__meta_consul_tags中值包含node-exporter的 action: keep #keep丢弃未匹配到regex中内容的数据 - regex: __meta_consul_service_metadata_(.+) #获取__meta_consul_service_metadata_的值(标签) action: labelmap #将获取的值作为新的标签 - job_name: 'consul-cadvisor-exproter' consul_sd_configs: - server: '192.168.31.131:8500' services: [] relabel_configs: - source_labels: [__meta_consul_tags] regex: .*cadvisor-exporter.* action: keep - regex: __meta_consul_service_metadata_(.+) action: labelmap |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App