04-prometheus服务的动态发现

一、概述

        目前,我们每增加一个被监控的节点,就需要修改prometheus的配置文件,然后重新加载prometheus服务,这种方式比较繁琐,每次新增、删除被监控节点都需要重新操作一遍,不适合生产环境的大规模监控架构;

        所以prometheus就提供了这种问题的解决方案,方案有两种,基于文档的自动发现和基于网络的自动发现。

二、基于文档的自动发现

1,修改prometheus的配置文件

[root@prometheus-server31 ~]# cat /prometheus/soft/prometheus/prometheus.yml 
#通用设置
global:
  #抓取监控的间隔时间,多长时间获取一次数据(生产环境,建议15-30s);
  scrape_interval: 3s 
  #多久读一次规则
  evaluation_interval: 15s 

#先不解释,之后会讲
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

#先不讲,之后会讲
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

#被监控的配置
scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]
  #另起一个job名称,被监控的主体自定义名称
  - job_name: "node-exporter01"
    #基于文档自动发现
    file_sd_configs:
      #文档的地址路径
      - files:
          #- /prometheus/soft/prometheus/file-sd.json
          - /prometheus/soft/prometheus/file-sd.yaml

2,重新加载prometheus服务

[root@prometheus-server31 ~]# curl -X POST http://10.0.0.31:9090/-/reload

3,编辑自动发现文档

[root@prometheus-server31 ~]# vim /prometheus/soft/prometheus/file-sd.yaml

- targets:
    - '10.0.0.41:9100'
  labels:
    xinjizhiwa: prometheus-learn
    office: www.xinjizhiwa.com

浏览器刷新查看

4,重新编辑自动发现文档,验证是否自动更新

· yaml文件写法

[root@prometheus-server31 ~]# vim /prometheus/soft/prometheus/file-sd.yaml

- targets:
    - '10.0.0.41:9100'
    - '10.0.0.42:9100'
  labels:
    xinjizhiwa: prometheus-learn
    office: www.xinjizhiwa.com

· json文件写法

[root@prometheus-server31 ~]# vim /prometheus/soft/prometheus/file-sd.yaml

[

        {

                "targets":["10.0.0.41:9100","10.0.0.42:9100"],

                "lables":{

                        "xinjizhiwa":"prometheus-learn","office":"wwwxinjizhiwa.com"

                }

        }

]

浏览器刷新,看是否监控到修改后的自动发现列表

5,小结

        有了文档的自动发现,那么我们以后就不需要再修改prometheus的配置文件了,更不需要重新加载prometheus服务了,是不是方便了很多呀!

        那么有没有更方便的方式呐?那么接下来,我们学习下基于网络的自动发现。

三、基于consul网络集群自动发现

        搭建一个consul的网络集群,让被监控节点全部加入到网络集群中,然后配置prometheus监控地址为这个网络集群,日后,只要有被监控节点加入到这个网络集群中,prometheus就可以自动的发现这些节点,刷新被监控列表;

1,搭建consul网络集群

        随便准备3台机器,用来搭建consul网络集群,本次学习,由于环境限制,我们就从使用虚拟机上选择就行,日后生产环境,需要单独拿出来节点服务器进行单独的配置更好;

官网地址参考链接:Consul by HashiCorp

· 下载consul工具

下载方式:

wget https://releases.hashicorp.com/consul/1.15.4/consul_1.15.4_linux_amd64.zip

本次学习,同样给大家准备了安装包,在百度云盘;

链接:https://pan.baidu.com/s/1qaIutR6qzmJbz72yWy3t_A?pwd=bppk 
提取码:bppk

· 上传解压软件包

        本次使用31、71、41作为consul集群的搭建节点;

rz -E
ll
-rw-r--r-- 1 root root 60030076 Nov  8 01:42 consul_1.16.1_linux_amd64.zip

解压到全局命令下;

unzip consul_1.16.1_linux_amd64.zip -d /usr/local/bin

· 运行consul服务

1,服务端创建集群

本次学习,我们拿31服务器节点当做consul集群的服务端;

[root@prometheus-server31 consul]# consul agent -server -bootstrap -bind=10.0.0.31 -data-dir=/consul -client=10.0.0.31 -ui

也可以查看下端口8500有没有开启~

浏览器访问,可以看到,只有31一个节点;

10.0.0.31:8500

此时集群服务端已经启动。

2,consul客户端加入集群

[root@grafana71 consul]# consul agent  -bind=10.0.0.71 -data-dir=/consul -client=10.0.0.71 -ui -retry-join=10.0.0.31

[root@prometheus-node41 consul]# consul agent  -bind=10.0.0.41 -data-dir=/consul -client=10.0.0.41 -ui -retry-join=10.0.0.31

3,查看浏览器consul地址

此时,consul集群搭建完成;

至此,consul网络集群服务搭建成功!~

2,配置prometheus配置文件

        目的是让prometheus去consul网络中抓取被监控的节点;

[root@prometheus-server31 ~]# cat /prometheus/soft/prometheus/prometheus.yml 
#通用设置
global:
  #抓取监控的间隔时间,多长时间获取一次数据(生产环境,建议15-30s);
  scrape_interval: 3s 
  #多久读一次规则
  evaluation_interval: 15s 

#先不解释,之后会讲
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

#先不讲,之后会讲
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

#被监控的配置
scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]
  #另起一个job名称,被监控的主体自定义名称
  - job_name: "node-exporter01"
    #基于consul服务自动发现
    consul_sd_configs:
      #指定consul的服务器地址,若不指定,默认“localhost:8500”
      - server: 10.0.0.31:8500
      - server: 10.0.0.71:8500
      - server: 10.0.0.41:8500
    relabel_configs:
      #匹配consul的源标签字段,表示服务的名称
      - source_labels: [__meta_consul_service]
        # 指定源标签的正则表达式,若不定义,默认值为"(.*)"
        regex: consul
        # 执行动作为删除,默认值为"replace",有效值: replace, keep, and drop
        action: drop

[root@prometheus-server31 ~]# curl -X POST http://10.0.0.31:9090/-/reload

3,被监控节点加入consul服务

· 被监控节点41加入

[root@prometheus-node41 ~]# curl -X PUT -d '{"id":"prometheus-node41","name":"prometheus-node41","address":"10.0.0.41","port":9100,"tags":["node-exporter"],"checks": [{"http":"http://10.0.0.41:9100","interval":"5m"}]}' http://10.0.0.31:8500/v1/agent/service/register

· consul集群页面查看

41加入成功;

· 被监控节点42加入

[root@prometheus-node42 node_exporter]# curl -X PUT -d '{"id":"prometheus-node42","name":"prometheus-node42","address":"10.0.0.42","port":9100,"tags":["node-exporter"],"checks": [{"http":"http://10.0.0.42:9100","interval":"5m"}]}' http://10.0.0.31:8500/v1/agent/service/register

· consul集群页面查看

42加入成功

4,prometheus页面查看

查看是否监控到41和42节点

5,拓展:节点下线consul服务

举个花生/栗子:节点41下线,不让prometheus监控了;

注意:

        我们consul集群中有3台集群,31、41、71,当被监控节点加入consul时选择哪个集群节点加入的,那么退出集群时也需要指定加入时的节点;

        加入指定的31退出也必须指定31.

curl -X PUT http://10.0.0.31:8500/v1/agent/service/deregister/prometheus-node41

四、总结

构建prometheus基于consul局域网络监控自动发现节点的步骤;

1,构建consul局域网络集群;

2,被监控节点“加入”consul集群;

3,修改prometheus配置文件,指定consul服务进行监控;

就此,成功了;

###############

至此,prometheus的服务发现,就学习完毕了;

###############

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/717994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go-zero中分布式事务的实现(DTM分布式事务管理器,在一个APi中如何调用两个不同服务的rpc层,并保证两个不同服务之间的业务逻辑同时成功)

涉及到的相关技术 1.DTM分布式事务管理器,解决跨数据库、跨服务、跨语言栈更新数据的一致性问题。 2.SAGA事务模式,SAGA事务模式是DTM中常用的一种模式,简单易上手.(当然还有其它更多的事务模式,这里采用的SAGA只不过是其中一种较为简单的方法) 3.Go-zero框架,ETCD服务注册... …

Windows 2012 设置 nginx 开机自启动(适用于windows2012/10)

Windows 2012 设置 nginx 开机自启动(适用于windows2012/10)https://www.cnblogs.com/xuegqcto/articles/7521483.html 在windows server 2012上安装nginx,同时配置开机自启动服务(推荐使用“Windows Service Wrapper”工具&…

【Linux】线程概念|线程理解|线程控制

文章目录 线程概念Linux中线程是否存在的讨论线程创建和线程控制线程的终止和等待(三种终止方式 pthread_join()的void**retval) 线程概念 线程就是进程内部的一个执行流,线程在进程内运行,线程在进程的地址空间内运行&#xff0…

LeetCode-第14题-最长公共前缀

1.题目描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 2.样例描述 3.思路描述 按字符串数组每个数组的长度,将字符串数组从小到大排序;他们的公共前缀一定小于或等于最长元素长度…

2024年智能驾驶年度策略:自动驾驶开始由创造型行业转向工程型行业

感知模块技术路径已趋于收敛,自动驾驶从创造型行业迈向工程型行业。在特斯拉的引领下,国内主机厂2022年以来纷纷跟随特斯拉相继提出“重感知、轻地图”技术方案,全球自动驾驶行业感知模块技术路径从百花齐放开始走向收敛。我们认为主机厂智能…

2023.3.3周报

目录 摘要 一、文献阅读 1、题目 2、摘要 3、模型架构 4、文献解读 一、Introduction 二、实验 三、结论 二、PINN 一、PINN比传统数值方法有哪些优势 二、PINN方法 三、正问题与反问题 三、PINN实验 一、数学方程 二、模型搭建 总结 摘要 本周我阅读了一篇…

Postman上传文件的操作方法

前言 调用某个接口,测试上传文件功能。一时间不知如何上传文件,本文做个操作记录,期望与你有益。 步骤一、设置Headers key:Content-Type value:multipart/form-data 步骤二、设置Body 选择form-data key:file下拉框选择file类型value&…

STM32(8)NVIC编程

中断源由部分片上外设产生 在misc.h中找,杂项 配置NVIC GPIO和AFIO不能产生中断源,但能通过EXTI,由EXTI产生中断源 NVIC不需要开启时钟,因为NVIC模块位于内核内部,芯片一上电就能工作。 中断响应函数 中断向量表在启…

Java:JVM基础

文章目录 参考JVM内存区域程序计数器虚拟机栈本地方法栈堆方法区符号引用与直接引用运行时常量池字符串常量池直接内存 参考 JavaGuide JVM内存区域 程序计数器 程序计数器是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器,各线程…

Unity 常用的4种灯光、制作镜子、灯光的调用修改数值、

创建灯光时,一般用4种:定向光、点光源、聚光、区域光、 定向光:太阳 点光源:灯泡 聚光灯:手电筒 区域光:烘焙-贴图 灯光选择已烘焙 需要先选择被烘焙的物体,然后再选择Contribute GI 等待进…

java中的set

Set Set集合概述和特点 不可以存储重复元素 没有索引,不能使用普通for循环遍历 哈希值 哈希值简介 是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值 如何获取哈希值 Object类中的public int hashCode():返回对象的哈希码值。 哈希值的特点 同一个…

分布式ID生成算法|雪花算法 Snowflake | Go实现

写在前面 在分布式领域中,不可避免的需要生成一个全局唯一ID。而在近几年的发展中有许多分布式ID生成算法,比较经典的就是 Twitter 的雪花算法(Snowflake Algorithm)。当然国内也有美团的基于snowflake改进的Leaf算法。那么今天我们就来介绍一下雪花算法…

计算机视觉基础知识(二)---数字图像

像素 像素是分辨率的单位;构成位图图像的最基本单元;每个像素都有自己的颜色; 图像分辨率 单位英寸内的像素点数;单位为PPI(Pixels Per Inch),为像素每英寸;PPI表示每英寸对角线上所拥有的像素数目:,x:长度像素数目,y:宽度像素数目,Z:屏幕大小;屏幕尺寸(大小)指的是对角线长…

springer模板参考文献不显示

Spring期刊模板网站,我的问题是23年12月的版本 https://www.springernature.com/gp/authors/campaigns/latex-author-support/see-where-our-services-will-take-you/18782940 参考文献显示问好,在sn-article.tex文件中,这个sn-mathphys-num…

数据结构c版(3)——排序算法

本章我们来学习一下数据结构的排序算法! 目录 1.排序的概念及其运用 1.1排序的概念 1.2 常见的排序算法 2.常见排序算法的实现 2.1 插入排序 2.1.1基本思想: 2.1.2直接插入排序: 2.1.3 希尔排序( 缩小增量排序 ) 2.2 选择排序 2.2…

rtt的io设备框架面向对象学习-io设备管理层

目录 1.设备基类2.rtt基类2.1 rtt基类定义2.2 对象容器定义2.3 rtt基类构造函数 3.io设备管理接口4.总结 这层我的理解就是rtt基类和设备基类所在,所以抽离出来好点,不然每个设备类都要重复它。 1.设备基类 /include/rtdef.h中定义了设备基类struct rt_…

STM32(11)按键产生中断

1.初始化IO引脚,设置模式,速度等 2.设置AFIO(配置EXTI的引脚映射),记得开启时钟 3.配置EXTI的通道(EXTI0和EXTI1) 4.配置NVIC 4.1 中断优先级分组 4.2 配置中断 5.编写中断响应函数 在中断向量…

蓝桥ACM培训-实战1

前言&#xff1a; 今天老师没讲课&#xff0c;只让我们做了一下几道题目。 正文&#xff1a; Problem:A 小蓝与操作序列&#xff1a; #include<bits/stdc.h> using namespace std; stack<int> a; int main(){int n,flag1,ans;string cz;cin>>n;for(int i1;…

访问修饰符、Object(方法,使用、equals)、查看equals底层、final--学习JavaEE的day15

day15 一、访问修饰符 含义&#xff1a; 修饰类、方法、属性&#xff0c;定义使用的范围 理解&#xff1a;给类、方法、属性定义访问权限的关键字 注意&#xff1a; ​ 1.修饰类只能使用public和默认的访问权限 ​ 2.修饰方法和属性可以使用所有的访问权限 访问修饰符本类本包…

JetCache源码解析——API实现(持续更新中……)

在JetCache中不仅可以通过在类和接口的函数上使用注解Cached、CacheUpdate和CacheInvalidate等实现缓存加载、更新和删除操作&#xff0c;也支持通过调用API接口的形式来实现缓存的加载、更新和删除操作。 缓存接口 缓存接口的定义如下&#xff1a; /*** 缓存接口&#xff0…