2 Prometheus 简介

news2024/9/28 17:31:17

目录

1. 起源

2. Prometheus 架构

 2.1 指标收集

2.2 服务发现

2.3 聚合和警报

2.4 查询数据

2.5 服务自治

2.6 冗余和高可用性

2.7 可视化

3. Prometheus数据模型

3.1 指标名称

3.2 标签

3.3 采样数据

3.4 符号表示

3.5 保留时间

4. 安全模型

5. Prometheus生态系统

6. 附录


1. 起源

Prometheus最初由前谷歌SRE Matt T. Proud开发,并转化成一个研究项目,最终于2015年1月发布。

Prometheus提供近实时的、基于动态云环境和容器的微服务的内省监控。它专注于现在正在发生的事情,而不是追踪数周/月前的数据。

Prometheus由Golang语言编写,Apache 2.0许可证下授权,孵化于云原生计算基金会。

2. Prometheus 架构

Prometheus通过抓取/拉取服务中暴露的时间序列数据来工作。时间序列数据通常由应用程序本身通过客户端库或者exporter(导出器)的代理来作为HTTP端点暴露。

当前已有很多exporter和客户端库,支持多种编程语言、框架和开源应用程序,如Apache Web服务器和Mysql数据库等。

Prometheus还有一个推送网关(push gateway),可用于接收少量数据(如来自无法拉取的目标数据-防火墙后面的目标数据)。

 2.1 指标收集

Prometheus称其可以抓取的指标来源为端点(endpoint)。端点通常对应单个进程、主机、服务或者应用程序。为了抓取端点数据,Prometheus定义了名为目标(target)的配置。如何进行链接,要应用哪些元数据,连接需要哪些身份认证,或者定义抓取将如何执行的其他信息,这些都是执行抓取过程中所需的信息。一组这样的目标被称为作业(job)。作业通常是具有相同角色的目标组。如负载均衡器后面的Tomcat服务器集群,它们实际上是一组相似的进程。

生成的时间序列数据将被收集并存储在Prometheus服务器本地,也可以设置从服务器发送数据到外部存储器或其他时间序列数据库。

2.2 服务发现

可以通过多种方式来处理主要监控的资源的发现,有如下方式:

  • 用户提供的静态资源列表
  • 基于文件的发现。如使用配置管理工具生成在Prometheus中可以自动更新的资源列表。
  • 自动发现。如查询Consul等数据存储,在Amazon或Google中运行实例,或使用DNS SRV记录来生成资源列表。

2.3 聚合和警报

服务器还可以查询和聚合时间序列数据,并创建规则来记录常用的查询和聚合。允许基于现有的数据创建出新的时间序列数据,如根据请求数和失败数计算失败率,或者产生类似求和等聚合。

Prometheus还可以定义警报规则,这些都是系统配置的在满足条件时触发警报的标准。Prometheus服务器没有内置警报工具,而是将警报从Prometheus服务器推送到名为Alertmanager(警报管理器)的单独服务器。Alertmanager可以管理、整合和分发各种警报到不同的目的地。当然在发出电子邮件报警时,能防止重复发送。

2.4 查询数据

Prometheus服务器还提供了一套内置查询语言PromQL、一个表达式浏览器以及一个用于浏览服务器上数据的图形化界面。

2.5 服务自治

每个Prometheus服务器都设计为尽可能自治,旨在支持扩展到数千台主机的数百万个时间序列的规模,可扩展性。数据存储格式被设计为尽可能降低磁盘的使用率,并在查询和聚合期间快速检索时间序列。

2.6 冗余和高可用性

冗余和高可用性侧重弹性而非数据持久性。Prometheus可以单节点部署,也可以高可用(HA模式)部署,使用两个或者多个配置相同的Prometheus服务器来收集时间序列数据,并且所有生成的警报都由可消除重复警报的高可用Alertmanager集群来处理。相关的冗余架构如下:

 

2.7 可视化

可视化通过内置表达式浏览器提供,并且与开源仪表板Grafana集群(笔者当前所在公司使用该组件),当然也支持其他仪表盘。

3. Prometheus数据模型

在处理Prometheus收集的时间序列数据时,可以使用一个多维时间序列数据模型。这个时间序列数据模型结合了时间序列名称和称为标签(Label)的键值对,这些标签提供了维度。每个时间序列由时间序列名称和标签的组合唯一标识。下面会详细说这些概念。

3.1 指标名称

在一段时间内,收集到有关于业务相关的指标,如website_visits_total为网站访问数,http_response_error_total为Http错误结果数量。

Prometheus指标的名称可以包含ASCII字符、数字、下划线和冒号。

3.2 标签

标签为Prometheus数据模型提供了维度,为特定时间序列添加上下文。比如查询指标http_response_error_total时,可以根据服务区域标签得到各区域的结果。标签可以在指标统计的过程中进一步细分。如http_response_error_total是总的指标,通过服务所在Region作为标签可以查询到亚太、美东、欧洲等区域的http_response_error_total指标。

标签共分为两大类:插桩标签(instrumentation label)目标标签(target label)

插桩标签来自被监控的资源,如在客户端或者exporter抓取前制定的标签,也就是上报指标数据到

Prometheus前就会制定这些标签。目标标签更多地与架构相关,可能会识别时间序列所在的数据中心,它是由Prometheus在抓取期间和之后添加的。

标签名称可以包含ASCII字符、数字和下划线。但带有_前缀的标签名称保留给Prometheus内部使用。

3.3 采样数据

时间序列的真实值是采样(sample)的结果,包含两部分:

  • 一个float64类型的数值
  • 一个毫秒精度的时间戳

3.4 符号表示

Prometheus会将时间序列表示为符号(notation),如下。

<time series name>{<label name> = <label value>, ...}

例如,带有标签的total_error_response_http时间序列可能如下所示。

total_error_response_http{site="MegaApp",location="NJ",instance="HttpWebServer",job="HttpWeb"}

以上表达式,首先是时间序列名称,后面跟着一组键值对标签。通常所有时间序列都有一个instance标签(标识源主机、NODE或者服务)以及一个job标签。

3.5 保留时间

Prometheus为短期监控和警报需求而设计。默认情况下,在其数据库保留15天的时间序列数据。如需保留更长时间的数据,建议将所需数据发送到远程的第三方平台。当然Prometheus提供了写入外部的存储能力。

4. 安全模型

Prometheus可以通过多种方式进行配置和部署,于安全方面有以下两个假设:

  • 不受信任的用户将能够访问Prometheus服务器的HTTP API,从而访问数据库中的所有数据。
  • 只有受信任的用户才能访问Prometheus命令行、配置文件、规则文件和运行时配置。

从Prometheus 2.0开始,默认情况下某些HTTP API的管理功能被禁用。

Prometheus及其组件不提供任何服务器端的身份验证、授权或加密,如有需要,则需自己实施安全控制。

5. Prometheus生态系统

Prometheus生态系统有Prometheus项目本身提供的组件以及丰富的开源工具和套件组成,其核心仍然是Prometheus服务器,当然也包括Alertmanager。

Prometheus项目还包括一系列exporter,用于监控应用程序和服务,并在端点上公开相关指标进行抓取。核心exporter支持常见工具,如Http web服务器、数据库等。当然也有其他开源的exporter,可以去Prometheus社区查看。

Prometheus也发布了一系列客户端库,支持Java、Golang、Ruby、Python等主流语言接入。其他客户端库可以从github等开源社区获取。

6. 附录

  • prometheus官网
  • Prometheus文档
  • prometheus github源码
  • grafana 官网

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

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

相关文章

AI会取代程序员吗?这几个事实告诉你真相

人工智能&#xff08;AI&#xff09;的迅猛发展引起了许多关于其对各行各业的影响的讨论&#xff0c;其中包括程序员的未来。有人认为&#xff0c;AI的出现可能会使程序员岗位面临消失的风险&#xff0c;因为它们可以自动化编码和解决问题的过程。然而&#xff0c;在我们下结论…

MySQL:UNION的使用

UNION的使用 前言一、合并查询结果二、语法格式&#xff1a;三、UNION操作符四、UNION ALL操作符五、使用 前言 本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注博主&#xff01; 也许一个人独行&#xff0c;可以走的很快…

全志V3S嵌入式驱动开发(full image制作和资料汇总)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 所谓的full image制作&#xff0c;就是制作一个image&#xff0c;上面包含了所有的嵌入式软件、库和配置文件。之前虽然我们也构建了spi-nor、spi-…

AC/DC(二): 整流

一、全波整流电路 全波整流电路可以看作是由两个半波整流电路组合而成&#xff0c;如图1所示&#xff0c; 图1 变压器次级线圈中间引出一个中心抽头&#xff0c;把次级线圈分成两个对称的绕组&#xff0c;从而引出大小相等但极性相反的两个电压VD1、VD2&#xff0c;构成VD1、…

14 MFC多进程

文章目录 创建进程win32子进程内容创建进程传递参数关闭进程通过配置文件读取全部代码 打开进程便利进程 创建进程 分别创建MFC应用程序和Win32应用程序 MFC应用程序界面设置 win32子进程内容 #include <Windows.h> int WINAPI wWinMain(HINSTANCE hInstance, HINSTAN…

分享在Linux下使用OSGi.NET插件框架快速实现一个分布式服务集群的方法

在这篇文章我分享了如何使用分层与模块化的方法来设计一个分布式服务集群。这个分布式服务集群是基于DynamicProxy、WCF和OSGi.NET插件框架实现的。我将从设计思路、目标和实现三方面来描述。 1 设计思路 首先&#xff0c;我来说明一下设计思路。我们先来看看目前OSGi.NET插件…

C++中生成二维码-libqrencode

文章目录 前言libqrencode在qt中调用libqrencode其他 前言 二维码的种类很多。本文仅介绍&#xff0c;如何用C生成QR码(QRcode)。通常而言&#xff0c;我们不需要知道QR码的详细结构&#xff0c;如QrCode的结构原理与实战 | 张展鹏的博客。我们只需要&#xff0c;可以将文本转…

Python——— 字符串

&#xff08;一&#xff09;字符串 字符串是 Python 中最常用的数据类型。我们可以使用引号 ( 或 " ) 来创建字符串。顾名思义&#xff0c;羊肉串是由羊肉做成的串&#xff0c;而字符串就是由字符组成的。 字符串的本质是&#xff1a;字符序列。 2 Python 不支持单字符…

Kafka 小结

Kafka 是由 Linkedin 开发并开源的分布式消息系统&#xff0c;因其分布式及高吞吐率而被广泛使用&#xff0c;现已与 Cloudera Hadoop、Apache Storm、Apache Spark、Flink 集成。 Kafka 使用场景 页面访问量 PV、页面曝光 Expose、页面点击 Click 等行为事件&#xff1b;实时计…

低分辨率图像中目标检测(附论文下载)

关注并星标 从此不迷路 计算机视觉研究院 公众号ID&#xff5c;ComputerVisionGzq 学习群&#xff5c;扫码在主页获取加入方式 论文地址&#xff1a;https://arxiv.org/pdf/2201.02314.pdf 计算机视觉研究院专栏 作者&#xff1a;Edison_G 超分辨率&#xff08;SR&#xff09;等…

【Openvino03】深入了解OpenVINO™ 工具包与Jupyter Notebooks工程

接上一篇&#xff0c;本篇将以OpenVINO™ 工具包、Jupyter Notebook工具以及OpenVINO™ Notebooks工程为基础&#xff0c;依照构建环境、工具学习、案例学习、实战部署的顺序引导初学者完成从0到1学习人工智能的全过程&#xff0c;希望众多对人工智能感兴趣的开发者&#xff0c…

【多维BFS】ABC308 D

VP的时候居然花了半小时&#xff01; 可恶&#xff01; D - Snuke Maze (atcoder.jp) 题意&#xff1a; 思路&#xff1a; 首先&#xff0c;我们发现到达一个格子之后&#xff0c;下一个格子的字符是确定的 但是&#xff0c;下一个格子到底是哪个是不确定的 下一个格子不…

FreeRTOS源码解析——第一章 整体架构

FreeRTOS源码解析 第一章 FreeRTOS 整体架构 第二章 FreeRTOS 编程规范 第三章 FreeRTOS 内存管理 第四章 FreeRTOS 任务管理 第五章 FreeRTOS 消息队列 第六章 FreeRTOS 软件定时器 第七章 FreeRTOS 信号量 第八章 FreeRTOS 互斥量 第九章 FreeRTOS 任务通知 第十章 FreeRTOS…

算法习题之宏观分层问题

宏观分层 习题1 给定一个正方形矩阵matrix&#xff0c;原地调整成顺时针90度转动的样子习题2 给定一个长方形矩阵matrix&#xff0c;实现转圈打印习题3 给定一个正方形或者长方形矩阵matrix&#xff0c;实现zigzag打印习题4 输入N,在控制台上输出初始边长为N的图案 习题1 给定一…

U盘数据丢失是什么原因?轻松让U盘数据恢复的教程

在数字化时代&#xff0c;我们不可避免地使用各种便携式存储设备&#xff0c;如U盘&#xff0c;来传输和存储重要数据。然而&#xff0c;有时我们可能不小心删除了U盘中的文件&#xff0c;或者格式化了U盘等等而导致数据丢失。这种情况下&#xff0c;你可能会困惑地想知道&…

机器学习——基于Tensorflow和Keras实现卷积神经网络CNN——猫狗分类

文章目录 环境的配置神经网络CNN的介绍卷积前馈神经网络卷积神经网络应用邻域 数据集准备数据预处理构建基准模型 总结什么是过拟合&#xff08;overfit&#xff09;&#xff1f;什么是数据增强&#xff1f;单独制作数据增强&#xff0c;精确率提高了多少&#xff1f; 然后再添…

硬件大熊原创合集(2023/06更新)

06月份更新篇章&#xff1a; 一款射频芯片的layout设计指导案例-篇章1 一款射频芯片的layout设计指导案例-篇章2 警惕超声波工艺对晶振造成损伤 走嵌入式方向&#xff0c;一定要软硬件都懂吗&#xff1f; 6月份广州光亚展&#xff0c;和电子电力大咖文老师见了个面&#xff0c;…

2023车载摄像头9大热点趋势

摘要&#xff1a; 相较于消费类电子摄像头&#xff0c;车载摄像头的工作环境极度恶劣&#xff0c;比如说震动、高温、雨雾、低温、光线变化剧烈等。而车载摄像头以驾驶安全为目的&#xff0c;上述各个工作状态下&#xff0c;均需要能获取稳定、可靠、清晰的周边环境数据。 近年…

HOT36-二叉树的中序遍历

leetcode原题链接&#xff1a;二叉树的中序遍历 题目描述 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a…

BUUCTF藏藏藏

也是一个图片文件&#xff0c;和一个txt文件 txt文件中是一个提交flag格式&#xff0c;没啥用 拿去010打开后发现可能存在隐藏文件 这个格式说明还有解压文件吧&#xff0c;但是为啥分离不出来呢 刚好有另外一个分离文件的软件foremost 解压后打开在zip文件下有一个福利docx文件…