Prometheus服务发现
Prometheus服务发现介绍
Prometheus默认是采用pull的方式拉取监控数据的,每一个被抓取的目标都要暴露一个HTTP接口,prometheus通过这个接口来获取相应的指标数据,这种方式需要由prometheus-server决定采集的目标服务器有哪些,通过配置在scrape_configs中的各种job来实现,无法动态感知新服务,如果后面新增了节点或组件,就需要手动修改prometheus配置,然后重启服务或重新加载配置,所以出现了动态服务发现。
动态服务发现能够自动发现集群中的新端点,并加入到配置中,通过服务发现prometheus能够自动获取需要监控的targets列表,然后通过这些targets获取监控数据。
Prometheus获取数据源target的方式有多种,包括静态配置和动态服务发现配置。prometheus目前支持的服务发现有很多种,具体可以参考prometheus的配置文档:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#configuration-file
常用的主要有以下几种:
- kubernetes_sd_configs:基于Kubernetes API实现的服务发现,让prometheus动态发现kubernetes中的被监控目标
- static_configs:静态服务发现,基于prometheus配置文件指定监控目标
- dns_sd_configs:基于DNS服务发现监控目标
- consul_sd_configs:基于Consul服务动态发现监控目标
- file_sd_configs:基于指定的文件发现监控目标
relabeling功能
relabeling简介
在Prometheus动态发现的targets中默认都包含一些原始的metadata标签信息,例如通过Kubernetes API动态发现的目标就包含许多以__meta开头的标签,如下图:
标签含义:
- _address_:以:信息显示目标targets的地址
- _scheme_:采集的目标服务器的Scheme形式,HTTP或等
- _metrics_path_:采集的目标服务器的访问路径
其它标签的含义可以参考Prometheus的官方配置文档。
prometheus的relabeling(标签重写)功能,它允许用户重写这些标签或根据标签做一些过滤操作。目前支持的relabel配置主要有以下4中,它的应用范围和生效时间不一样:
- relabel_configs:在对target进行数据采集之前,可以使用relabel_configs添加、修改或删除一些标签,也可以用来配置只采集特定目标或过滤目标,针对的是target,监控目标
- metric_relabel_configs :在对target采集数据之后,数据写入TSDB之前,可以使用metric_relabel_configs做重新标记和过滤,针对的是metric,指标
- alert_relabel_configs:在被发送到alertmanager之前,对标签进行处理,针对的是alert
- write_relabel_configs:写入远端存储之前进行标签处理
其中较为常用的就是relabel_configs,在配置监控目标时使用。后面介绍的也是relabel_configs
relabeling规则
Relabeling规则主要由以下字段组成:
字段 | 作用 |
---|---|
source_labels | 源标签,没有经过relabel处理之前的标签名 |
separator | 分隔符,一个字符串,用于在连接源标签source_labels时分隔它们,默认是分号; |
target_label | 通过action处理之后新的标签名字 |
regex | 给定的值或正则表达式,用来匹配源标签的值 |
action | 对源标签执行的relabeling动作,可选值和作用参考下个表格 |
modules | 模数,串联的源标签哈希值的模,主要用于 Prometheus 水平分片 |
replacement | 写在目标标签上,它可以引用regex正则表达式匹配的组$1、$2… |
action字段可用的值和含义如下:
replace | 设置或替换标签值,是默认的action |
keep | 源标签值满足regex正则条件的实例进行采集,其它实例丢弃,即只采集成功匹配的实例 |
drop | 作用和keep相反,即只采集未匹配的实例 |
labelmap | 将源标签的值映射到一组新的标签中去,action为labelmap时,regex匹配的是标签名,而不是标签值 |
labelkeep | 保留匹配的标签,其它的进行删除 |
labeldrop | 删除匹配的标签,保留不匹配的标签 |
hashmod | 使用hashmod计算源标签的hash值并进行对比,基于自定义的魔术取模,以实现对目标进行分类、重新赋值等 |
基于Kubernetes API的Prometheus服务发现
可以在prometheus配置文件的job中使用kubenetes_sd_configs字段来配置基于Kubernetes API的服务发现,具体配置方式可以参考官网:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config
目前支持的发现目标类型有以下几种:
- node:发现node节点
- service:发现service
- pod:发现Pod
- enpoints:通过endpoints获取监控目标
- endpointslice:通过endpointslice获取监控目标
- ingress:发现ingress
下面分别是一些对应的的示例
apiserver服务发现及监控
apiserver作为集群如入口,所有请求都是通过apiserver进来的,所以对apiserver指标做监控可以用来判断集群健康状态。我们可以通过目标类型为endpoints的kubenetes_sd_configs配置来自动发现apiserver并监控。
这里因为prometheus-server是部署在k8s集群上的,配置保存在configmap中,所以修改对应的configmap,内容如下:
kind: ConfigMap
apiVersion: v1
metadata:labels:app: prometheusname: prometheus-confignamespace: monitoring
data:prometheus.yml: |global:scrape_interval: 15sscrape_timeout: 10sevaluation_interval: 1mscrape_configs:- job_name: kubernetes_apiserver #添加此jobkubernetes_sd_configs:- role: endpoints #指定kubernetes_sd_configs发现角色为endpointscheme: https #指定访问apiserver协议tls_config: #apiserver证书。证书和token都是通过ServiceAccount注入到Prometheus-server Pod中的ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crtauthorization: #访问apiserver的tokencredentials_file: /var/run/secrets/kubernetes.io/serviceaccount/tokenrelabel_configs: #标签重写规则配置- source_labels: ["__meta_kubernetes_namespace", "__meta_kubernetes_endpoints_name", "__meta_kubernetes_endpoint_port_name"] #指定要匹配的源标签regex: default;kubernetes;https #匹配规则,这里表示只匹配名称空间为default,endpoints名称为kubernetes,且端口名称为https的实例action: keep #action为keep,表示匹配的实例保留,然后进行监控
修改完成后,将configmap重新应用的集群中,然后重新加载prometheus配置。
kubectl apply -f prometheus-config.yaml
#重新创建prometheus Pod
kubectl delete pods/prometheus-aswcgth
之后就可以在prometheus界面上看到已经自动发现了3个apiserver,状态都为UP
在Grafana导入模板来查看apiserver监控数据, 模板ID 12006
#查询API Server最近10分钟不同方法的请求数量总计
sum(rate(apiserver_request_total[10m])) by (resource,subresource,verb)
coredns服务发现及监控
修改保存prometheus配置的configmap,添加一个job,内容如下:
- job_name: "kubernetes-service-endpoints"kubernetes_sd_configs:- role: endpointsrelabel_configs: #标签重写规则#如果endpoints对应的service资源上存在注解prometheus.io/scrape=true时,目标实例才会被发现为target- source_labels: ["__meta_kubernetes_service_annotation_prometheus_io_scrape"] #regex: trueaction: keep#通过service资源的注解prometheus.io/scheme获得抓取目标实例的数据时使用的协议(http或https),并赋值给新标签__scheme__- source_labels: ["__meta_kubernetes_service_annotation_prometheus_io_scheme"]regex: (https?)action: replacetarget_label: __scheme__#通过service资源的注解prometheus.io/path获取目标实例提供监控数据的url路径,并赋值给新标签__metrics_path__- source_labels: ["__meta_kubernetes_service_annotation_prometheus_io_path"]regex: (.+)action: replacetarget_label: __metrics_path__#修改__address__标签的值,即目标实例的地址和端口- source_labels: ["__address__", "__meta_kubernetes_service_annotation_prometheus_io_port"]regex: ([^:]+)(?::\d+)?;(\d+)action: replacetarget_label: __address__replacement: $1:$2#保留原来存在的以__meta_kubernetes_service_label_开头的标签- regex: __meta_kubernetes_service_label_(.+)action: labelmap#将标签__meta_kubernetes_service_name修改为 kubernetes_service_name- source_labels: ["__meta_kubernetes_service_name"]action: replacetarget_label: kubernetes_service_name#将标签__meta_kubernetes_namespace修改为 kubernetes_namespace- source_labels: ["__meta_kubernetes_namespace"]action: replacetarget_label: kubernetes_namespace
关于资源注解prometheus.io/scrape: true,需要在被发现的目的target定义此注解,且必须匹配成功该注解才会保留监控target,然后再进行数据抓取并进行标签替换,如annotation_prometheus_io_scheme标签为http或https。
修改完成后,将configmap重新应用的集群中,然后重新加载prometheus配置。步骤同上。
然后在prometheus界面查看,就可以看到已经发现了coredns对应的的Pod为target,状态为UP。如下图:
在Grafana导入coredns模板,查看监控数据,模板ID 14981
相关文章:
Prometheus服务发现
Prometheus服务发现介绍 Prometheus默认是采用pull的方式拉取监控数据的,每一个被抓取的目标都要暴露一个HTTP接口,prometheus通过这个接口来获取相应的指标数据,这种方式需要由prometheus-server决定采集的目标服务器有哪些,通过…...
【Spring6源码・MVC】请求处理流程源码解析
上一篇《【Spring6源码・MVC】初始化registry,完成url和controller的映射关系》我们知道,在IOC容器加载的同时,初始化了registry这个HashMap,这个HashMap中存放了请求路径和对应的方法。当我们请求进来,会通过这个regi…...
elasticsearch term match 查询
1. 准备数据 PUT h1/doc/1 {"name": "rose","gender": "female","age": 18,"tags": ["白", "漂亮", "高"] }PUT h1/doc/2 {"name": "lila","gender&quo…...
canal使用说明:MySQL、Redis实时数据同步
1. canal简介 canal是阿里开源的数据同步工具,基于bin log可以将数据库同步到其他各类数据库中,目标数据库支持mysql,postgresql,oracle,redis,MQ,ES等 canal分成服务端deployer和客户端adapter,我们可以部署多个,同时为了方便管…...
计算机视觉框架OpenMMLab开源学习(三):图像分类实战
前言:本篇主要偏向图像分类实战部分,使用MMclassification工具进行代码应用,最后对水果分类进行实战演示,本次环境和代码配置部分省略,具体内容建议参考前一篇文章:计算机视觉框架OpenMMLab开源学习&#x…...
awk命令
一.介绍 awk是专门为文本处理设计的编程语言,是一门数据驱动的编程语言。与sed类似,都是以数据驱动的行处理软件,主要用于数据扫描,过滤和汇总。数据可以来自于标准输入,管道或者文件。 二.语法 awk是一种处理文本文件…...
LocalDateTime获取时间的年、月、日、时、分、秒、纳秒
如何把String/Date转成LocalDateTime参考String、Date与LocalDate、LocalTime、LocalDateTime之间互转 String、Date、LocalDateTime、Calendar与时间戳之间互相转化参考String、Date、LocalDateTime、Calendar与时间戳之间互相转化 方法介绍 getYear() 获取日期的年 getMon…...
MoveIT Rviz和Gazebo联合仿真
文章目录环境安装概述ros_control框架ros_control数据流文件配置附加工具故障问题解决参考接前两篇:ROS MoveIT1(Noetic)安装总结 Solidworks导出为URDF用于MoveIT总结(带prismatic) MoveIT1 Assistant 总结 环境 Ubu…...
ESP32S2(12K)-DS18B20数码管显示温度
一、物料清单: NODEMCU-32-S2 (ESP32-12K)四段数码管(共阴)DS18B20(VCC/DQ/GND)Arduino-IDE 2.0.3二、实现方法及效果图: 2.1 引用库 // #include <OneWire.h> //可以不引入,因为DallasTemperature.h中已经引入了OneWire.h #include <DallasTemperature.h>#…...
linux栈溢出定位
一、编译选项定位堆栈溢出 来源:堆栈溢出检测机制 - SkrSky - 博客园 1、栈溢出可能打印 unhandled level 1 translation fault (11) at 0x7f8d0347, esr 0x92000005 2、栈溢出保护机制 gcc提供了栈保护机制stack-protector(编译选项-fstack-protec…...
CSS基础:选择器和声明样式
CSS概念 CSS(Cascading Style Sheets)层叠样式表,又叫级联样式表,简称样式表 CSS用于HTML文档中元素样式的定义 使用css让网页具有美观一致的页面 语法 CSS 规则由两个主要的部分构成:选择器和声明样式 选择器通常…...
VS中安装gismo库
文章目录前言一、下载安装paraview直接下载压缩包安装就可以了解压后按步骤安装即可二、gismo库的安装gismo库网址第一种方法:第二种方法第三种方法:用Cmake软件直接安装首先下载cmake软件[网址](https://cmake.org/download/)安装gismo库三、gismo库的使…...
元学习方法解决CDFSL以及两篇SOTA论文讲解
来源:投稿 作者:橡皮 编辑:学姐 带你学习跨域小样本系列1-简介篇 跨域小样本系列2-常用数据集与任务设定详解 跨域小样本系列3:元学习方法解决CDFSL以及两篇SOTA论文讲解(本篇) 跨域小样本系列4…...
大数据之------------数据中台
一、什么是数据中台 **数据中台是指通过数据技术,对海量数据进行采集、计算、存储、加工,同时统一标准和口径。**数据中台的目标是让数据持续用起来,通过数据中台提供的工具、方法和运行机制,把数据变为一种服务能力,…...
Python 中 字符串是什么?
字符串是 Python 中最常用的数据类型。我们可以使用引号 ( ’ 或 " ) 来创建字符串。 创建字符串很简单,只要为变量分配一个值即可。例如: var1 ‘Hello World!’ var2 “Python Runoob” Python 访问字符串中的值 Python 不支持单字符类型&…...
OJ刷题Day1 · 一维数组的动态和 · 将数字变成 0 的操作次数 · 最富有的客户资产总量 · Fizz Buzz · 链表的中间结点 · 赎金信
一、一维数组的动态和二、将数字变成 0 的操作次数三、最富有的客户资产总量四、Fizz Buzz五、链表的中间结点六、赎金信一、一维数组的动态和 给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] sum(nums[0]…nums[i]) 。 请返回 nums 的动态和。 示…...
【数据结构】栈——必做题
逆波兰表达式后缀表达式的出现是为了方便计算机处理,它的运算符是按照一定的顺序出现,所以求值过程中并不需要使用括号来指定运算顺序,也不需要考虑运算符号(比如加减乘除)的优先级。先介绍中简单的人工转化方法&#…...
LearnOpenGL 笔记 - 入门 04 你好,三角形
系列文章目录 LearnOpenGL 笔记 - 入门 01 OpenGLLearnOpenGL 笔记 - 入门 02 创建窗口LearnOpenGL 笔记 - 入门 03 你好,窗口 文章目录系列文章目录前言你好,三角形顶点输入顶点着色器(Vertex Shader)编译着色器片段着色器&…...
keepalived+mysql高可用
一.设置mysql同步信息两节点安装msyql略#配置节点11.配置权限允许远程访问mysql -u root -p grant all on *.* to root% identified by Root1212# with grant option; flush privileges;2.修改my.cnf#作为主节点配置(节点1)#作为主节点配置 server-id 1 …...
JAVA工具篇--1 Idea中 Gradle的使用
前言: 既然我们已经使用Maven 来完成对项目的构建,为什么还要使用Gradle 进行项目的构建;gradle和maven都可以作为java程序的构建工具,但两者还是有很大的不同之处的:1.可扩展性,gradle比较灵活,…...
弄懂自定义 Hooks 不难,改变开发认知有点不习惯
前言 我之前总结逻辑重用的时候,就一直在思考一个问题。 对于逻辑复用,render props 和 高阶组件都可以实现,同样官方说 Hooks 也可以实现,且还是在不增加额外的组件的情况下。 但是我在项目代码中,没有找到自定义 …...
Java面向对象基础
文章目录面向对象类注意事项内存机制构造器this关键字封装javabean格式成员变量和局部变量区别static静态关键字使用成员方法使用场景内存机制注意事项static应用:工具类static应用:代码块静态代码块实例代码块(用的比较少)static…...
基于python下selenium库实现交互式图片保存操作(批量保存浏览器中的图片)
Selenium是最广泛使用的开源Web UI(用户界面)自动化测试套件之一,可以通过编程与浏览量的交互式操作对网页进行自动化控制。基于这种操作进行数据保存操作,尤其是在图像数据的批量保存上占据优势。本博文基于selenium 与jupyterla…...
一:Datart的下载、本地运行
前言:本文只是个人在使用datart的一个记录,仅供参考。如果有不一样的地方,欢迎评论或私信进行交流。datart 是新一代数据可视化开放平台,支持各类企业数据可视化场景需求,如创建和使用报表、仪表板和大屏,进…...
Docker-compose
一.Docker-compose概述Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Docker-Compose将所管理的容器分为三层,分别是 工程(project),服务(service)以及容器&a…...
经典文献阅读之--PLC-LiSLAM(面,线圆柱SLAM)
0. 简介 对于激光SLAM来说,现在越来越多的算法不仅仅局限于点线等简答特征的场景了,文章《PLC-LiSLAM: LiDAR SLAM With Planes, Lines,and Cylinders》说到,平面、线段与圆柱体广泛存在于人造环境中。为此作者提出了一个使用这些landmark的…...
计算组合数Cnk即从n个不同数中选出k个不同数共有多少种方法math.comb(n,k)
【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 计算组合数Cnk 即从n个不同数中选出k个不同数共有多少种方法 math.comb(n,k) 以下python代码输出结果是? import math print("【执行】print(math.comb(3,1))") print(math.comb(…...
工厂设计模式
基本概念:为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。分为三类:简单工厂模式Simple Factory:不利于产生系列产品;工厂方法模式Factory Method:又称为…...
IO多路转接 —— poll和epoll
文章目录1. poll1.1 poll的函数接口1.2 poll的简单测试程序1.3 poll的优缺点分析2. epoll2.1 epoll的函数接口2.2 epoll的工作原理2.3 epoll的工作模式(LT,ET)2.4 epoll的简易服务器实现(默认是LT工作模式)前言: 接上文讲述的select,它有缺点,…...
计算机网络整理-问答
1. 程序工作的时候网络各层的状态 如下图所示: 1. TCP 在进行三次握手的时候,IP 层和 MAC 层对应都有什么操作呢? TCP 三次握手是通过在传输层建立连接的一个过程,在这个过程中,TCP 和 IP 层、MAC 层都起到了重要的…...
如何做seo搜索引擎优化/泰州seo推广
绿豆(cnitpm.com) 11:03:20小李发现其计算机无法连接网络,而办公室其它计算机网络访问正常,为了诊断故障,小李在其计算机操作系统中执行了若干命令,得到的结果如下表所示,根据命令执行结果,小李首先应( )。…...
珠海市网站建设的公司/制作网站代码
距离2018年高考还有不到一个月的时间了,很多人在准备最后冲刺的同时,也在关心高考成绩。2018各地区高考成绩排名查询,高考各高中成绩喜报榜单尚未公布,下面是往年各地区高考成绩排名查询,高考各高中成绩喜报榜单,想要了解同学可以…...
公司让做网站违法/十大技能培训机构排名
Apple在 WWDC 上宣布,将向iOS 14.6、iPadOS 14.6、macOS 11.4 和tvOS 14.6及以上的用户提供空间音频和无损音频。 Apple 表示,在发布时将会提供超过 2000 万首无损质量的歌曲,到 2021 年底,整个 Apple Music 目录中将会提供超过 …...
wordpress产品参数多图/利尔化学股票
JDK安装与环境变量的配置 文章目录JDK安装与环境变量的配置一、JDK下载1.官网下载2.百度网盘二、JDK安装三、环境变量的配置一、JDK下载 1.官网下载 https://www.oracle.com/java/technologies/javase-jdk15-downloads.html 2.百度网盘 链接:https://pan.baidu.…...
卡密wordpress插件/网页推广平台
使用ajax跳转方法时,页面ctrlshifti调试报告了一个404错误,说找不到方法。页面地址栏直接指向方法的地址跳转也是404。目标方法是新增的,于是使用复制黏贴,确定各处方法名称一致之后,重启server。 调试时再次报错&…...
珠海网站策划公司/最新的域名网站
python十六进制字符串To assign a hexadecimal value in the string so that it can be printed as a string, we use \x that is known as Escape sequence”, it represents that given value is the hexadecimal value. 为了在字符串中分配一个十六进制值以便可以将其打印为…...