当前位置: 首页 > news >正文

prometheus基于consul的服务发现

consul在微服务中用于服务注册与发现的,在prometheus中也可以用于被监控对象的自动发现,这样就实现了在不修改prometheus配置文件、不重启的情况下,自动发现exporter并将其加入到监控范围

运行consul

可以去官网下载二进制安装包,但这里我还是推荐使用docker,快速上手
docker run -d --rm --name=consul -p 8500:8500 consul:1.15.4
浏览器访问 IP:8500 到consul的services页面,可见现在只有一个consul服务:

运行prometheus

修改默认配置文件为如下内容:

# ...
scrape_configs:- job_name: "prometheus"# 注释掉之前静态配置的内容
#    static_configs:
#      - targets: ["localhost:9090"]# 修改服务发现为 consul_sd_configs:consul_sd_configs:- server: 'consul_ip:8500'services: ['node_exporter']

启动prometheus容器:
docker run -d -p 9090:9090 -v $(pwd)/prometheus.yml:/opt/bitnami/prometheus/conf/prometheus.yml --name prometheus --rm bitnami/prometheus
浏览器访问 IP:9090 到prometheus的targets页面,目前也是一个target都没有

将node_exporter注册到consul

这里采用发HTTP请求的方式注册.先写一个注册的shell脚本
register_consul.sh:

#!/bin/bash
NodeExporterIP=""
NodeExporterPort=9200
ServiceID="node_exporter1"  # 服务唯一标记,随便写,只要保证唯一就行,一般是uuid
ServiceName="node_exporter"  # (一组)服务的名称consulIP=""
consulPort=8500curl -X PUT -d '{"id": "'$ServiceID'","name": "'$ServiceName'","address": "'$NodeExporterIP'","port": '$NodeExporterPort',"tags": ["node_exporter"],"checks": [{"http": "http://'$NodeExporterIP':'$NodeExporterPort'/metrics","interval": "10s"}]
}' http://$consulIP:$consulPort/v1/agent/service/register

注册脚本可以写到node_exporter的启动脚本中(比如systemctl的service或者单独的shell脚本),这样就能在node_exporter启动时,自动注册到consul

运行脚本后到consul和prometheus页面上就能发现刚刚注册的服务和target:

注销服务脚本,deregister_consul.sh:

#!/bin/bash
ServiceID="node_exporter1"consulIP=""
consulPort=8500curl -X PUT http://$consulIP:$consulPort/v1/agent/service/deregister/$ServiceID

服务从consul注销后,prometheus也会自动将其从targets中移除

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 了解MySQL 高可用架构:主从备份
  • 【H2O2|全栈】关于CSS(3)CSS基础(三)
  • 大屏自适应缩放解决方案
  • 跨平台集成:在 AI、微服务和 Azure 云之间实现无缝工作流
  • 如何在YoloV8中添加注意力机制(两种方式)
  • PyTest装饰器
  • 腾讯云、阿里云、华为云优惠券领取、查看、使用教程分享
  • C++ 中的 override 和 overload的区别
  • 旋转电连接器航空插头插座的特点
  • 《深度学习》OpenCV轮廓检测 模版匹配 解析及实现
  • QT信号槽原理是什么,如何去使用它?
  • [前端][JS]html中js不同位置的区别
  • 87-java 可轮询锁和定时锁
  • Vue3图片上传报错:Required part ‘file‘ is not present.
  • HarmonyOS NEXT应用开发性能实践总结
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【391天】每日项目总结系列128(2018.03.03)
  • Apache的基本使用
  • css选择器
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • flutter的key在widget list的作用以及必要性
  • HTTP中的ETag在移动客户端的应用
  • Java 网络编程(2):UDP 的使用
  • mysql_config not found
  • python大佬养成计划----difflib模块
  • REST架构的思考
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • swift基础之_对象 实例方法 对象方法。
  • webgl (原生)基础入门指南【一】
  • 分享一份非常强势的Android面试题
  • 学习ES6 变量的解构赋值
  • 如何用纯 CSS 创作一个货车 loader
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #define
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (003)SlickEdit Unity的补全
  • (1)Android开发优化---------UI优化
  • (Note)C++中的继承方式
  • (二)WCF的Binding模型
  • (翻译)terry crowley: 写给程序员
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)springboot教学评价 毕业设计 641310
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .htaccess配置常用技巧
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .Net 知识杂记
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET成年了,然后呢?
  • .NET程序员迈向卓越的必由之路