【Prometheus】概念和工作原理介绍

目录

一、概述

1.1 prometheus简介

1.2 prometheus特点

1.3 prometheus架构图

1.4 prometheus组件介绍

1、Prometheus Server

2、Client Library

3、pushgateway

4、Exporters

5、Service Discovery

6、Alertmanager

7、grafana

1.5 Prometheus 数据流向

1.6 Prometheus监控什么

1.7 Zabbix和Prometheus区别

二、prometheus工作原理

2.1 prometheus工作模式

2.2 prometheus工作流程


一、概述


1.1 prometheus简介


Prometheus是一个开源的系统监控和报警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF托管的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,同时也支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。

文档地址

prometheus官网文档地址:Overview | Prometheus

prometheus中文文档地址:第1节:Prometheus 简介 - Prometheus 中文文档

1.2 prometheus特点


  • 多维度数据模型,时间序列数据由metrics名称和键值对来组成,数据库:Prometheus外置的远端存储通常会用:InfluxDB、openTsDB等
  • 灵活的查询语言(PromQL),可以对采集的metrics指标进行加法,乘法,连接等操作;
  • 可以直接在本地部署,不依赖其他分布式存储;
  • 通过基于HTTP上的拉取方式采集时序数据;
  • 可以通过中间网关pushgateway的方式把时间序列数据推送到prometheus server端;
  • 可通过服务发现或者静态配置来发现目标服务对象(targets)。
  • 有多种可视化图像界面,如Grafana等。
  • 高效的存储,每个采样数据占3.5 bytes左右,300万的时间序列,30s间隔,保留60天,消耗磁盘大概200G。

1.3 prometheus架构图


从上图可发现,Prometheus整个生态圈组成主要包括prometheus server,Exporter,pushgateway,alertmanager,grafana,Web ui界面,Prometheus server由三个部分组成,Retrieval,Storage,PromQL

  1. Retrieval负责在活跃的target主机上抓取监控指标数据
  2. Storage存储主要是把采集到的数据存储到磁盘中
  3. PromQL是Prometheus提供的查询语言模块。

1.4 prometheus组件介绍


1、Prometheus Server

Prometheus Server用于收集和存储时间序列数据。Prometheus server:服务核心组件,采用pull方式收集监控数据,通过http协议传输。并存储时间序列数据。Prometheus server 由三个部分组成:Retrival,Storage,PromQL

  • Retrieval:负责在活跃的target 主机上抓取监控指标数据。
  • Storage:存储,主要是把采集到的数据存储到磁盘中。默认为15天(可修改)。
  • PromQL:是Prometheus提供的查询语言模块。

2、Client Library

客户端库,检测应用程序代码,当Prometheus抓取实例的HTTP端点时,客户端库会将所有跟踪的metrics指标的当前状态发送到prometheus server端。

3、pushgateway

pushgatewy类似一个中转站,各个目标主机可上报数据到pushgatewy,然后prometheus server统一从pushgateway拉取数据。可以理解成目标主机可以上报短期任务的数据到Pushgateway,然后Prometheus server 统一从Pushgateway拉取数据。

4、Exporters

prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到prometheus server端,所有向promtheus server提供监控数据的程序都可以被称为exporter

5、Service Discovery

Service Discovery:服务发现,用于动态发现待监控的Target,Prometheus支持多种服务发现机制:文件、DNS、Consul、Kubernetes等等。

服务发现可通过第三方提供的接口,Prometheus查询到需要监控的Target列表,然后轮询这些Target 获取监控数据。该组件目前由Prometheus Server内建支持

6、Alertmanager

Alertmanager:是一个独立的告警模块,从Prometheus server端接收到“告警通知”后,会进行去重、分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件、钉钉、企业微信等。

  • Prometheus Server 仅负责生成告警指示,具体的告警行为由另一个独立的应用程序AlertManager负责;
  • 告警指示由 Prometheus Server基于用户提供的告警规则周期性计算生成,Alertmanager 接收到Prometheus Server发来的告警指示后,基于用户定义的告警路由向告警接收人发送告警信息。

7、grafana

Grafana:是一个跨平台的开源的度量分析和可视化工具,可以将采集的数据可视化的展示,并及时通知给告警接收方。其官方库中具有丰富的仪表盘插件。

1.5 Prometheus 数据流向


① Prometheus server 定期从配置好的 jobs 或者 exporters 中拉取 metrics,或者接收来自 Pushgateway 发送过来的metrics,或者从其它的Prometheus server中拉取 metrics。

② Prometheus server在本地存储收集到的 metrics,并运行定义好的 alerts.rules,记录新的时间序列或者向Alert manager推送警报。

③ Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警。

④ 在图形界面中,可视化采集数据。

1.6 Prometheus监控什么


级别

监控什么

exporter

网络

网络协议:http、dns、tcp、icmp;

网路硬件:路由器、交换机等

BlockBox Exporter;SNMP Exporter

主机

资源用量

node exporter

容器

资源用量

cadvisor

应用(包括Library)

延迟、错误,QPS,内部状态

代码集中集成Prometheus Client

中间件状态

资源用量,以及服务状态

代码集中集成Prometheus Client

编排工具

集群资源用量,调度等

Kubernetes Components

1.7 Zabbix和Prometheus区别


对比项

Prometheus

zabbix

Prometheus优势

zabbix优势

配置

配置文件

图形化+文件

更好的支持自动化配置

学习成本低

管理

二进制文件启动

LNMP+编译

轻量级server ,便于迁移和维护

client

丰富的client库

zabbix_agent自定义脚本

各种中间件、应用提供专业的exporter,监控项更全面

支持自定义监控项,对监控开发者的要求较高

数据存储方式

TSDB

MySQL

监控数据以时间为维度统计情况较多,时序数据库更适用于监控数据的存储,按时间索引性能更高

MySQL比较常用,学习成本低

数据处理

PromQL

MySQL

PromQL计算函数丰富,统计维度广

MySQL比较常用,学习成本低

二次开发

丰富的SDK

API

提供了Go、JAVA/Scala、Python等SDK二次开发更方便

API适配较为常用,学习成本低

对云环境的支持

原生支持容器监控

更适合物理机监控

自动发现容器,更好的适配k8s

告警方式

可按照标签分组,收敛

在次数上收敛

告警收敛方式更多样化

对比分析:从系统成熟度上看,Zabbix是老牌的监控系统:Zabbix是在1998年就出现的,系统功能比较稳定,成熟度较高。而Prometheus是最近几年才诞生的,虽然功能还在不断迭代更新,但站在巨人的肩膀之上,在架构设计上借鉴了很多老牌监控系统的经验;从数据存储方面来看,Zabbix采用关系数据库保存,这极大限制了Zabbix采集的性能,而Prometheus自研一套高性能的时序数据库,在V3版本可以达到每秒千万级别的数据存储,通过对接第三方时序数据库扩展历史数据的存储;从配置复杂度上看,Prometheus只有一个核心server组件,一条命令便可以启动,相比而言,其他系统配置相对麻烦,从社区活跃度上看,目前Zabbix比较活跃,但基本都是国内的公司参与,Prometheus在这方面占据绝对优势,社区活跃度虽然不如,但是受到CNCF的支持,后期的发展值得期待;从容器支持角度看,由于Zabbix出现得比较早,当时容器还没有诞生,自然对容器的支持也比较差。而Prometheus的动态发现机制,不仅可以支持swarm原生集群,还支持Kubernetes容器集群的监控,是目前容器监控最好解决方案。

总结:如果监控的是物理机,没话说就选 Zabbix,Zabbix在传统监控系统中,尤其是在服务器相关监控方面,占据绝对优势,甚至环境变动不会很频繁的情况下,Zabbix 也会比 Prometheus 好使;但如果是云环境的话,除非是 Zabbix 玩的非常溜,可以做各种定制,否则还是选择 Prometheus 吧,毕竟人家就是干这个的。Prometheus开始成为主导及容器监控方面的标配,并且在未来可见的时间内被广泛应用。如果是刚刚要上监控系统的话,不用犹豫了Prometheus + grafana+ alertManger 没错。


二、prometheus工作原理


2.1 prometheus工作模式


1. Prometheus Server 基于服务发现(Service Discovery)机制或静态配置获取要监视的目标(Target),并通过每个目标上的指标 exporter来采集(Scrape)指标数据;

2. Prometheus Server 内置了一个基于文件的时间序列存储来持久存储指标数据,用户可使用PromQL接口来检索数据,也能够按需将告警需求发往Altermanager完成告警内容发送;

3. 一些短期运行的作业的生命周期过短,难以有效地将必要的指标数据供给到Server端,它们一般会采用推送(Push)方式输出指标数据,Prometheus借助于Pushgateway 接收这些推送的数据,进而由server端进行抓取

2.2 prometheus工作流程


① Prometheus server可定期从活跃的(up)目标主机上(target)拉取监控指标数据,目标主机的监控数据可通过配置静态job或者服务发现的方式被prometheus server采集到,这种方式默认的pull方式拉取指标;也可通过pushgateway把采集的数据上报到prometheus server中;还可通过一些组件自带的exporter采集相应组件的数据;

② Prometheus server把采集到的监控指标数据保存到本地磁盘或者数据库;

③Prometheus采集的监控指标数据按时间序列存储,通过配置报警规则,把触发的报警发送到alertmanager;

④ Alertmanager通过配置报警接收方,发送报警到邮件,微信或者钉钉等

⑤ Prometheus 自带的web ui界面提供PromQL查询语言,可查询监控数据

⑥Grafana可接入prometheus数据源,把监控数据以图形化形式展示出


参考文章:

prometheus和zabbix的对比_prometheus zabbix-CSDN博客

Promethues原理详解_prometheus工作原理-CSDN博客

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

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

相关文章

100天精通Python(实用脚本篇)——第117天:基于selenium实现反反爬策略之代码输入账号信息登录网站

文章目录 专栏导读1. 前言2. 实现步骤3. 基础补充4. 代码实战4.1 创建连接4.2 添加请求头伪装浏览器4.3 隐藏浏览器指纹4.4 最大化窗口4.5 启动网页4.6 点击密码登录4.7 输入账号密码4.8 点击登录按钮4.9 完整代码4.10 GIF动图展示 五、总结 专栏导读 🔥&#x1f5…

httpx.InvalidURL: Invalid port

httpx.InvalidURL: Invalid port 介绍解决方案总结 介绍 httpx包的bug,使用GPT-SoVITS时无法运行报的错 解决方案 改源码的这个文件lib/python3.9/site-packages/httpx/_urlparse.py:149行左右: def urlparse(url: str "", **…

IDEA安装配置以及安装配置Maven

IEDA官方下载地址,有专业版(收费,破解),社区版(免费) 下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE 安装配置Maven 1.解压apache-maven-3.6.3-bin.zip,安装maven到D盘softwar…

台湾旺泓-WH4530A三合一光距感 接近传感芯片

WH4530A是一款集成了环境光传感器(PS)接近传感器(ALS)和红外LED灯三合一为一体的光距感传感芯片,可以测距从0到100厘米以内范围;并采用I2C接口具有超高的灵敏度和精准的测距检测范围。 该WH4530A​​​​​…

真香!NineData SQL开发全面适配 GaiaDB

2 月,新年伊始,NineData 重磅发布,提供了对百度云原生关系型数据库 GaiaDB 的支持。 这一次的发布不仅仅是简单的数据源支持,而是覆盖了整个 SQL 开发能力的重要发布,意味着您已经可以完整地使用 NineData SQL 开发的…

MySQL 事务原理分析

事务 前提:并发连接访问。定义:事务是用户定义的一系列操作,这些操作要么都做,要么都不做,是一个不可分割的单位。目的:事务将数据库从一种一致性状态转换为另一种一致性状态,保证系统始终处于…

半导体物理基础-笔记(续)

源内容参考:https://www.bilibili.com/video/BV11U4y1k7zn/?spm_id_from333.337.search-card.all.click&vd_source61654d4a6e8d7941436149dd99026962 掺杂半导体的费米能级与温度及杂质浓度的关系图 在温度一定的条件下,施主杂质浓度越高&#xff0…

接口测试实战--读取yaml用例

一、yaml模块用法 使用场景: 配置文件、测试用例文件等 语法: 大小写敏感 使用缩进表示层级关系 缩进时不允许用tab键,只能使用空格 缩进的空格数目不重要,只要相同层级的元素左对齐 #表示注释 基本数据类型:字符串、整型、列表、null(可使用~表示)、布尔型、时间 1)…

Redis操作

1、KEY操作 1.1 exists 1.2 expire 设置过期时间 expire name 5 1.3 ttl 如果不过期返回-1 1.4 del 2、字符串值(String) 2.1 set 2.2 get 2.3 setnx 当且仅当key不存在时才新增 不存在时返回1,存在返回0 2.4 setex 设置key的存活时间&am…

Oracle EBS GL 外币折算逻辑

背景 由于公司财务在10月份期间某汇率维护错误,导致帐套折算以后并合传送至合并帐套生成合并日记帐凭证的借贷金额特别大,但是财务核对的科目余额有没有问题,始终觉得合并日记帐生成会计分发有问题,需要我们给出外币折算逻辑。 基础设置 汇率 Path: GL->设置->币种-&…

pclpy 最小二乘法拟合平面

pclpy 最小二乘法拟合平面 一、算法原理二、代码三、结果1.左边原点云、右边最小二乘法拟合平面后点云投影 四、相关数据 一、算法原理 平面方程的一般表达式为: A x B y C z D 0 ( C ≠ 0 ) Ax By Cz D 0 \quad (C\neq0) AxByCzD0(C0) 即: …

【JSON详细讲解】

JSON讲解 1. 介绍2. JSON的基本规则3. JSON中的数据类型4. JSON的基本结构5. 在不同的语言中使用JSON 1. 介绍 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它是基于JavaScript的一个子集,但它是独立于语言的&a…

矢量扩散模型初探

import paddle from matplotlib import pyplot as plt import numpy as np from tqdm import tqdm# 从零开始构建一个简单的扩散模型 # 首先是扩散过程 # loss=label-net(sqrt(alpha_prod[t])*x0+sqrt(1-alpha_prod[t])*label) # label =正太分布采样 # alpha 是 一个斜边为1 的…

Java中使用链表实现的数据结构

在Java中,链表实现主要体现在以下几种数据结构中: 1. LinkedList LinkedList类实现了List接口和Deque接口,提供了双向链表的实现。它允许null元素,提供了列表的顺序访问以及在列表的头部和尾部进行高效的插入和移除操作。Linked…

Spring Boot对接RocketMQ示例

部署服务 参考RocketMq入门介绍 示例 引入maven依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.2</version></dependency>完整依赖如下&am…

C++ 游戏飞机大战, 字符型的

//#define _CRT_SECURE_NO_WARNINGS 1 用于禁止不安全函数的警告 #include<iostream> #include<stdlib.h> #include<string> #include<conio.h> #include<Windows.h> #include<time.h> #include <graphics.h> using namespace std;…

Rust升级慢,使用国内镜像进行加速

背景 rustup 是 Rust 官方的跨平台 Rust 安装工具&#xff0c;国内用户使用rustup update的时候&#xff0c;网速非常慢&#xff0c;可以使用国内的阿里云镜像源来进行加速 0x01 配置方法 1. Linux与Mac OS用户配置环境变量 修改~/.bash_profile文件添加如下内容&#xff1…

微信小程序 --- 小程序基础知识

小程序基础知识 1. 认识什么是小程序 什么是微信小程序 微信小程序是一种运行在微信内部的 轻量级 应用程序。 在使用小程序时 不需要下载安装&#xff0c;用户 扫一扫 或 搜一下 即可打开应用。它也体现了 “用完即走” 的理念&#xff0c;用户不用关心安装太多应用的问题…

力扣链表篇

以下刷题思路来自代码随想录以及官方题解 文章目录 203.移除链表元素707.设计链表206.反转链表24.两两交换链表中的节点19.删除链表的倒数第N个节点面试题 02.07. 链表相交142.环形链表II 203.移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链…

敏捷开发最佳实践:价值维度实践案例之ABTest中台化

22年敏捷白皮书调研发现&#xff0c;仅有14%的企业部分实现价值管理闭环&#xff0c;8%的企业能够做到企业战略和业务目标与价值管理紧密结合。这一现象说明了大部分中国企业还不能在敏捷实践中实现需求价值的体系化及多维度价值度量&#xff0c;因此推广优秀的敏捷实践至关重要…