【编者的话】本文会让你了解Prometheus是什么,并让你理解它在监控领域的适用场景。

Prometheus起源

很久以前,加利福尼亚州山景城有一家名为Google的公司。他们推出了大量产品,其中最著名的是广告系统和搜索引擎平台。为了运行这些不同的产品,他们建立了一个名为Borg的平台。Borg系统是“一个集群管理器,可以运行来自成千上万个不同的应用程序的成千上万个作业,它跨越多个集群,每个集群都有数万台服务器。“开源容器管理平台Kubernetes很多部分都是对Borg平台的传承。在Borg部署到Google后不久,他们意识到这种复杂性需要一个同等水平的监控系统。Google建立了这个系统并命名为Borgmon。Borgmon是一个实时的时间序列监控系统,它使用这些时间序列数据来识别问题并发出警报。如果你想和更多Prometheus技术专家交流,可以加我微信liyingjiese,备注『加群』。群里每周都有全球各大公司的最佳实践以及行业最新动态 。

Prometheus的灵感来自谷歌的Borgmon。它最初由前谷歌SRE Matt T. Proud开发,并转为一个研究项目。在Proud加入SoundCloud之后,他与另一位工程师Julius Volz合作开发了Prometheus。后来其他开发人员陆续加入了这个项目,并在SoundCloud内部继续开发,最终于2015年1月公开发布。

与Borgmon一样,Prometheus主要用于提供近实时的,针对动态云环境下的和基于容器的微服务、服务和应用程序的检测监控。SoundCloud是这些架构模式的早期采用者,Prometheus的建立是为了满足这些需求。如今,Prometheus被更多的公司广泛使用,通常也是满足类似的监控需求,但也用来监控传统架构的资源。

Prometheus专注于现在正在发生的事情,而不是追踪数周或数月前的数据。它基于这样一个前提,即大多数监控查询和警报都是从最近的,通常是一天内的数据生成的。Facebook在其内部时间序列数据库Gorilla的论文中验证了这一观点。Facebook发现85%的查询是针对26小时内的数据。Prometheus假定你尝试修复的问题可能是最近出现的,因此最有价值的是最近时间的数据,这反映在强大的查询语言和通常有限的监控数据保留期上。

Prometheus是用开源编程语言Go编写的,并在Apache 2.0许可证下授权。它孵化于云原生云计算基金会(Cloud Native Computing Foundation)。

Prometheus架构

Prometheus通过抓取或拉取从应用程序中暴露的时间序列数据来工作。时间序列数据通常由应用程序本身通过客户端库,或通过称为导出器(exporter)的代理作为HTTP端点暴露。目前已经存在很多exporter和客户端库,支持多种编程语言、框架和开源应用程序,例如,Apache Web服务器和MySQL数据库等。

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

Prometheus架构

图文字翻译:Alert manager:Alertmanager;My Service:服务;Exporters run here:Exporter在这运行

指标收集

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

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

服务发现

可以通过多种方式处理要监控的资源的发现,包括:

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

聚合和警报

服务器还可以查询和聚合时间序列数据,并创建规则来记录常用的查询和聚合。这允许你从现有的时间序列创建新的时间序列,例如计算变化率和比率或求和等聚合。这样就不必重新创建常用的聚合,例如用于调试,并且预计算可能比每次需要时运行查询性能更好。

Prometheus还可以定义警报规则。这些是为系统配置在满足条件时触发警报的标准,例如,资源时间序列开始显示异常的CPU使用率。Prometheus服务器没有内置警报工具,而是将警报从Prometheus服务器推送到名为警报管理器(Alertmanager)的单独服务器。Alertmanager可以管理、整合和分发各种警报到不同目的地 - 例如,它可以在发出警报时发送电子邮件,并能够防止重复发送。

查询数据

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

Prometheus表达式浏览器

自治

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

提示:为了速度和可靠性,建议Prometheus服务器充分使用内存(Prometheus在内存中做很多事)和SSD磁盘。关于SSD使用可以参考注释链接视频。

冗余和高可用性

冗余和高可用性侧重弹性而不是数据持久性。Prometheus团队建议将Prometheus服务器部署到特定环境和团队,而不是仅部署一个单体Prometheus服务器。如果你确实要部署高可用HA模式,则可以使用两个或多个配置相同的Prometheus服务器收集时间序列数据,并且所有生成的警报都由可消除重复警报的高可用Alertmanager集群处理。

Prometheus冗余架构

图文字翻译:Alert manager:Alertmanager;My Service:服务

提示:我们将在第7章中介绍如何实现此配置。

可视化

可视化通过内置表达式浏览器提供,并与开源仪表板Grafana集成。此外,Prometheus也支持其他仪表板。

Prometheus数据模型

正如之前所述,Prometheus收集时间序列数据。为了处理这些数据,它使用一个多维时间序列数据模型。这个时间序列数据模型结合了时间序列名称和被称为标签(label)的键/值对,这些标签提供了维度。每个时间序列由时间序列名称和标签的组合唯一标识。

指标名称

时间序列名称通常可以描述收集的时间序列数据的一般性质 - 例如,website_visits_total为网站访问的总数。

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

指标标签

标签为Prometheus数据模型提供了维度。它们为特定时间序列添加上下文。例如,total_website_visits时间序列可以使用能够识别网站名称、请求IP或其他特殊标识的标签。Prometheus可以在一个时间序列、一组时间序列或者所有相关的时间序列上进行查询。

标签共有两大类:监控标签(instrumentation label)和目标标签(target label)。监控标签来自被监控的资源 - 例如,对于与HTTP相关的时间序列,标签可能会显示所使用的特定HTTP谓词。这些标签在被抓取之前被添加到时间序列中,例如由客户端或exporter。目标标签更多地与架构相关 - 它们可能会识别时间序列所在的数据中心。目标标签在Prometheus抓取期间和之后添加。

时间序列由名称和标签标识(尽管从技术上讲,名称本身也是名为__name__的标签)。如果你在时间序列中添加或更改标签,Prometheus会将其视为新的时间序列。

提示:你可以理解label就是键/值形式的标签,并且新的标签会创建新的时间序列。

标签名称可以包含ASCII字符、数字和下划线。

提示:带有__前缀的标签名称保留给Prometheus内部使用。

采样数据

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

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

符号表示

结合这些元素,我们可以看到Prometheus如何将时间序列表示为符号(notation)。

代码清单2.1时间序列符号:

{=, ...} 

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

代码清单2.2时间序列示例:

total_website_visits{site="MegaApp

prometheus 发送恢复 值_Prometheus基础知识介绍相关推荐

  1. prometheus 发送恢复 值_Prometheus监控神器-Rules篇

    本章主要对如何使用Prometheus与Alertmanager组件集成配置,以及对警报规则 Rules 的俩种类型及其模板内容进行讲解. 与Alertmanager集成 Prometheus把产生的 ...

  2. prometheus 发送恢复 值_基于prometheus+grafana+alertmanager监控系统配置钉钉告警

    概述 因为目前工作基本都是用钉钉办公,所以今天主要介绍一下怎么在prometheus配置钉钉告警,这里的前提是已经部署了alertmanager. 一.配置go 由于Prometheus 是用gola ...

  3. OpenGL开发之旅基础知识介绍

    最近由于手机项目中需要用到OpenGL ES的知识,所以这段时间正在研究OpenGL的相关知识.因为OpenGL ES是OpenGL的剪裁版本,所以我直接从OpenGL入手,然后再去看OpenGL E ...

  4. OpenGL基础知识介绍和简单使用

    OpenGL基础知识介绍 OpenGL简介 OpenGL 专业词解析 1.OpenGL上下文[context] 2.渲染 3.顶点数组和顶点缓冲区 4.着色器程序Shader 5.顶点着色器(Vert ...

  5. Fragment的基础知识介绍详解必看

    一.Fragment的基础知识介绍 1.1概述 1.1.1 特性 Fragment是activity的界面中的一部分或一种行为.可以把多个Fragment组合到一个activity中来创建一个多界面 ...

  6. springsecurity-oauth2之基础知识介绍(一)

    springsecurity-oauth2之基础知识介绍(一) 1.公钥与私钥 本项目采用JWT令牌生成采用非对称加密算法. 1.1 自己电脑上安装 Win64OpenSSL-1_1_1b.exe 1 ...

  7. java udp 广播 组播_UDP广播和组播的基础知识介绍

    UDP广播和组播的基础知识介绍 ━━━━━━━━━━━━━━━━━━━━━━━━━ UDP可以实现一对多的传输方式,即通过广播和组播把数据发送给一组进程.下面就介绍下UDP广播和组播的相关知识. 一. ...

  8. 视频编解码的理论和实践1:基础知识介绍

    近几年,视频编解码技术在理论及应用方面都取得了重大的进展,越来越多的人想要了解编解码技术.因此,网易云信研发工程师为大家进行了归纳梳理,从理论及实践两个方面简单介绍视频编解码技术. 相关阅读推荐 &l ...

  9. UICC 之 USIM 详解全系列——UICC基础知识介绍

    本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. UICC 之 USIM 详解全系列--UICC(TS102 ...

最新文章

  1. Dubbo 同步、异步调用的几种方式
  2. Windows XP中安装虚拟网卡microsoft loopback adapter
  3. java怎么制作放置游戏_从零开始实现放置游戏(八)——实现后台管理系统(6)代码重构...
  4. 查看目标网站--结构
  5. flask-mail异步发送邮件_.NET Core使用FluentEmail发送邮件
  6. 【推荐】技术人必看的音视频学习资源清单
  7. 前端学习(1335):mongoDB导入数据
  8. KNN-K最近邻算法+实例应用
  9. 用vs.net 调试传统ASP程序
  10. Linux网络编程和套接字
  11. (七)洞悉linux下的Netfilteriptables:状态防火墙
  12. Valve员工手册,一部震惊世界的“人生攻略”
  13. 如何正确、高效地进行论文阅读和批判性思考
  14. AMAZEUI之iscroll 下滑刷新/上拉加载更多实例
  15. 高清车牌识别系统无法连接服务器,智能停车场高清车牌识别系统,常见的故障及解决方法!...
  16. 2018年阅读书物列表
  17. 神经网络(Neural Networks)简介
  18. 键盘记录器(有发送到指定qq邮箱的功能。附源代码及使用教程,免费下载)
  19. C++设计模式 温故知新李建忠(BooLan、GeekBand)
  20. 打开虚拟机时显示不是有效的虚拟机配置文件是什么原因啊

热门文章

  1. JavaScript数组内置排序函数
  2. C# 中数据缓存总结
  3. 理解ORACLE数据库字符集
  4. 11月30在spring mvc中使用Validator框架和文件上传
  5. Spring security/Shiro ---登陆成功后返回登陆前界面<页面重定向>
  6. 移远EC20 4G模块LTE开发板三网通模块 MQTT阿里云物联网
  7. 全国计算机等级考试题库二级C操作题100套(第46套)
  8. mysql使用 BETWEEN AND 查询
  9. 论文信息系统项目管理的进度管理
  10. 使用DSX2-5000 CH测试时选择(+PoE)和(+All)后缀的含义