2 Prometheus 简介

目录

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.hqwc.cn/news/1056.html

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

相关文章

Dubbo【Dubbo实战(用户更新业务消费者实现、用户删除业务消费者实现、复习内容) 】(六)-全面详解(学习总结---从入门到深化)

目录 Dubbo实战_用户更新业务消费者实现 Dubbo实战_用户删除业务消费者实现 复习内容&#xff1a; Dubbo实战_用户更新业务消费者实现 在Consumer中调用更新用户业务 /*** 根据用户id修改用户名字* param users* return*/Integer updateUsers(User users);/*** 根据用户id查…

物种气候生态位动态量化与分布特征模拟----R语言

在全球气候快速变化的背景下&#xff0c;理解并预测生物种群如何应对气候变化&#xff0c;特别是它们的地理分布如何变化&#xff0c;已经变得至关重要。利用R语言进行物种气候生态位动态量化与分布特征模拟&#xff0c;不仅可以量化描述物种对环境的需求和适应性&#xff0c;预…

掌握Python的X篇_4_开发工具ipython与vscode的安装使用,作业

本篇将会介绍两个工具的安装及使用来提高Python的编程效率。 ipython&#xff1a;比python更好用的交互式开发环境vscode&#xff1a;本身是文本编辑器&#xff0c;通过安装相关的插件vscode可以作为python集中开发环境使用 掌握Python的X篇_4_开发工具ipython与vscode的安装使…

TipDM数据挖掘建模平台产品功能特点

TipDM数据挖掘建模平台是可视化、一站式、高性能的数据挖掘与人工智能建模服务平台&#xff0c;致力于为使用者打通从数据接入、数据预处理、模型开发训练、模型评估比较、模型应用部署到模型任务调度的全链路。平台内置丰富的机器学习、深度学习、人工智能算法&#xff0c;可覆…

Lecture 8 Deep Learning for NLP: Recurrent Networks

目录 Problem of N-gram Language Model N-gram 语言模型的问题Recurrent Neural Network(RNN) 循环神经网络RNN Language Model: RNN 语言模型Long Short-Term Memory Model (LSTM) 长短期记忆模型&#xff08;LSTM&#xff09;Gating Vector 门向量Forget Gate 忘记门Input G…

C#核心知识回顾——3.继承构造、拆装箱、多态

1.继承中的构造函数&#xff1a; 特点&#xff1a; 当申明一个子类对象时 先执行父类的构造函数&#xff0c;再执行子类的构造函数注意&#xff01;&#xff01;&#xff1a; 1.父类的无参构造很重要 2.子类可以通过base关键字代表父类调用父类构造 public class Mot…

2.设计模式之前5种设计模式单例工厂原型建造者适配器

1.怎么掌握设计模式? 独孤5剑 先是锋利的剑 后面是无剑才是最强的 ,GOF四人组写的<设计模式>书,包含了23种,实际可能还有其他,不要被束缚(只是覆盖了大部分).设计模式适合的人群: 1.不知道设计模式 2.有编程经验,但是写的好多代码有设计模式却不知道 3.学习过设计模式,发…

Audio API 实现音频播放器

市面上实现音频播放器的库有很多&#xff0c;比如wavesurfer.js、howler.js等等&#xff0c;但是都不支持大音频文件处理&#xff0c;100多M的文件就有可能导致程序崩溃。总之和我目前的需求不太符合&#xff0c;所以打算自己实现一个音频播放器&#xff0c;这样不管什么需求 在…

建设Web3需要Web2的人才?探索传统技能在Web3时代的作用

摘要&#xff1a;Web3作为下一代互联网技术的前沿&#xff0c;许多人关注着它的发展和应用。然而&#xff0c;建设Web3是否需要Web2的人才仍然是一个有争议的问题。 Web3作为下一代互联网技术&#xff0c;以去中心化、智能合约和用户自治等特点引起了广泛的关注。与此同时&…

JAVA1

文章目录 计算机的硬件与软件DOS命令 计算机的硬件与软件 DOS命令

大数据开发基础-环境配置篇-Hadoop集群安装

鼠鼠接下来将更新一系列自己在学习大数据开发过程中收集的资源、和自己的总结、以及面经答案、LeetCode刷题分析题解。 首先是大数据开发基础篇 环境搭建、组件面试题等 其次是更新大数据开发面经的java面试基础 最后更新一个大数据开发离线数仓的实战项目&#xff0c;自己写入…

Redis的数据类型及对应的数据结构(二)

接上篇&#xff1a;Redis的数据类型及对应的数据结构&#xff08;一&#xff09;_鱼跃鹰飞的博客-CSDN博客 本篇主要讨论剩下的几种数据结构的应用场景 应用场景 集合的主要几个特性&#xff0c;无序、不可重复、支持并交差等操作。 因此 Set 类型比较适合用来数据去重和保…