2019年完整的普罗米修斯指南


DevOps和SRE工程师可能不止一次听说过Prometheus


Prometheus于2012年在SoundCloud上创建,此后已成为监控系统的标准。 它具有完全开源的代码,它提供了数十种不同的导出器,您可以使用它们 几分钟内设置对整个基础结构的监视


Prometheus具有明显的价值,已经被DigitalOcean或Docker等行业创新者用作完整监视系统的一部分。


什么是普罗米修斯?
为什么需要它?
与其他系统有何不同?


如果您对Prometheus一无所知,或者想更好地了解Prometheus,其生态系统和所有交互作用,那么本文仅适合您


与InfluxDB一样,我们将本指南分为3部分。


  • 首先是Prometheus的完整概述,其生态系统以及快节奏技术的关键方面。
  • 然后,提供了对Prometheus技术术语的解释 。 如果您不知道什么是度量标准,标签,实例或导出器,请按此处。
  • 最后,我们描述了使用Prometheus的各种现实情况 。 在这里,您将受到成功公司范例的启发。

第一部分。什么是普罗米修斯?


Prometheus是一个时间序列数据库。 如果您不知道什么是时间序列数据库,请阅读InfluxDB手册的第一部分


但是Prometheus不仅是时间序列数据库。


您可以将整个工具生态系统附加到其上以扩展功能。


Prometheus 监视各种各样的系统 :服务器,数据库,单个虚拟机以及几乎所有东西。


为此, 普罗米修斯定期取消目标


什么是刮ing?


Prometheus 通过对Prometheus配置中指定的特定端点的HTTP调用检索指标



以位于http:// localhost:3000的Web应用程序为例。 该应用程序将文本格式的度量标准传输到某个URL。 可以说http:// // localhost:3000 / metrics


在此地址,Prometheus以特定的时间间隔从目标中检索数据


1.普罗米修斯如何工作?


正如我们所说的,普罗米修斯由各种各样的组成部分组成。


首先,您需要它来从系统中提取指标。 有不同的方法:


  • 应用程序的检测,即您的应用程序将在指定的URL提供Prometheus兼容的指标。 Prometheus将其识别为目标,并将在指定的时间间隔将其报废。
  • 使用现成的出口商 。 普罗米修斯拥有一系列现有技术的出口商。 例如,现成的导出器用于监视Linux机器( Node Exporter ),通用数据库( SQL ExporterMongoDB Exporter ),甚至HTTP负载均衡器(例如HAProxy Exporter )。
  • 使用Pushgateway 。 有时应用程序或任务不直接提供指标。 它们可能不是为此设计的(例如,批处理作业),或者您自己决定不直接通过应用程序提供指标。

如您所知, Prometheus本身会收集数据 (除了极少数情况下使用Pushgateway)。



这是什么意思?
为什么需要这个?


2.收集与 发送


Prometheus与其他时间序列数据库有显着差异: 它会主动扫描目标以从中获取指标


例如,InfluxDB的工作方式有所不同:您可以直接将数据直接发送给它



两种方法各有利弊。 根据可用的文档,我们汇总了Prometheus的创建者选择此体系结构的原因:


  • 集中控制 。 如果Prometheus向目标发送请求,我们将在Prometheus端而不是单个系统上执行所有配置。

普罗米修斯决定刮擦的位置频率


如果对象本身发送数据,则存在这样的数据过多的风险,并且服务器将崩溃。 当系统收集数据时,您可以控制收集的频率并创建几种抓取配置, 以为不同的对象选择不同的频率


  • Prometheus存储汇总指标

这是我们讨论普罗米修斯角色的第一部分的补充。


Prometheus并非基于事件,并且与其他时间序列数据库有很大不同。 它不会参考时间(例如,服务中断)来拦截单个事件, 而是收集有关服务的预汇总指标


具体来说,Web服务不会发送404错误消息和包含错误原因的消息。 发送一条消息,指出该服务在最近五分钟内收到404错误消息。


这是收集汇总指标的时间序列数据库与收集原始指标的时间序列数据库之间的主要区别。


3.发达的普罗米修斯生态系统


本质上,Prometheus是一个时间序列数据库。


但是,在使用此类数据库时,通常需要可视化数据,对其进行分析并为其配置警报


Prometheus支持以下工具来扩展其功能:


  • 警报管理员 。 Prometheus根据配置文件中定义的自定义规则将警报发送到Alertmanager。 从那里,它们可以导出到不同的端点(例如,Pagerduty或Slack)。
  • 数据可视化 。 与Grafana一样,您可以直接在Prometheus Web用户界面中可视化时间序列。 您可以过滤数据并针对不同目标中发生的事情创建特定的评论。
  • 服务发现 。 Prometheus动态检测目标并根据要求自动刮取新目标。 如果您使用根据需求动态更改地址的容器,这将特别方便。



第二部分 普罗米修斯的概念


与InfluxDB手册一样,我们将详细解释与Prometheus相关的技术术语


1.键值数据模型


在继续使用Prometheus工具之前,重要的是要充分了解该数据模型。


Prometheus使用键值对 。 密钥描述了我们要测量的内容,该值将实际值存储为数字。


切记:Prometheus并非旨在存储原始信息,例如纯文本。 它存储一段时间内汇总的指标。

在这种情况下,密钥称为metric 。 例如,这是处理器速度或内存使用情况。


但是,如果您需要有关该指标的更多详细信息怎么办?
例如,处理器具有4个核心,我们需要4个单独的指标吗?


捷径可助您一臂之力。 快捷方式通过添加其他字段来提供有关指标的更多信息。 例如,您不仅描述了处理器的速度,还描述了特定IP上一个内核的速度。



然后,您可以按标签过滤指标,并仅查看所需的信息。


2.指标类型


使用Prometheus进行监视时,可以用四种方式描述指标。 最好读到最后,因为这里有陷阱


柜台


这可能是最简单的指标类型。 顾名思义,计数器在一段时间内对元素进行计数


例如,如果您要计算服务器或访问网站上的HTTP错误,请使用计数器


当然,从逻辑上讲, 计数器只能将数字增加或为零 ,因此不适用于可能减少的值或负值。


借助它的帮助,特别方便的是考虑一段时间内某个事件的发生次数 ,即度量随时间的变化率。


如果您需要测量一段时间内的已用内存?
该值可能会降低。 如何用普罗米修斯算出来?


仪表


遇见米!


仪表处理的值可能会随着时间的推移而降低 。 可以将它们与温度计进行比较-如果您看着温度计,我们将看到当前温度。


但是,如果仪表可以增加和减少并取正值和负值,那么事实证明它们比计数器更好吗?
所以柜台没用吗?


起初,我是这么认为的。 由于它们可以做所有事情,因此让我们在各处使用它们。 这合乎逻辑吗?


但是没有


仪表是测量当前指标值的理想选择,该指标可能会随着时间的推移而降低。


这就是真正的陷阱所在:仪表无法显示一段时间内指标的发展。 使用仪表, 您会错过随时间变化的不规则指标


怎么了 / u / justinDavidow说的是


仪表显示一段时间内某个单位的计数器增量的平均值。

计数器会考虑使用的每个单位(如果是处理器,则是操作,周期或滴答声),然后您可以选择所需时段的指标。

如果使用仪表,则采样率必须准确。 如果频率相差至少几微秒,则该值将不可靠。 “在重负载下,测量之间的时间以指数方式增加,这尤其引人注目,因为系统规划人员没有时间关注监视应用程序。”

如果系统每5秒发送一次指标,而Prometheus每15秒刮擦一次目标,则该过程中可能会丢失一些指标。 如果使用这些指标执行其他计算,结果的准确性将更低。


在柜台,每个值都被汇总。 当Prometheus收集它时,他意识到该值是在一定时间间隔内发送的。


现在不要困惑。


条形图


直方图是一种更复杂的指标。 它提供了其他信息。 例如,测量值的总和及其数量。


在具有自定义上限的区域中收集值。 因此,直方图可以:


  • 计算平均值 ,即的总和除以值的数量。
  • 计算值的相对度量,如果您需要找出某个区域中有多少个值与指定的标准相对应,这将非常方便。 如果您需要跟踪比例或设置质量指标,这将特别有用。

在现实世界中,如果20%的服务器的响应时间超过300毫秒或服务器的响应时间超过20%的时间超过300毫秒,我希望收到警报。


如果要处理比例,则需要直方图


总结


仪表板是高级直方图 。 它们还显示了测量的总和和数量,以及移动期间的分位数


分位数(如果有的话)将概率密度划分为几率相等的段。


那么:条形图还是摘要?


这一切都取决于意图


直方图会组合一段时间内的值,从而提供可用于跟踪特定指标发展的数量和数量。


另一方面,摘要显示了移动期间的分位数(即,随着时间的推移不断发展)。


如果您需要知道一个代表一段时间内记录的值的95%的值,这将特别方便。


3.任务和实例


鉴于分布式体系结构的最新进展以及基于云的解决方案的普及,您不太可能使用单独运行的单个服务器。


服务器在世界各地复制和分发。


为了说明这一点,让我们看一下两个HAProxy服务器的经典体系结构,它们在九个后端Web服务器( 不,不,没有Stackoverflow堆栈 )之间重新分配负载


在这个真实的示例中,我们将跟踪Web服务器返回的HTTP错误数


在Prometheus中,一个Web服务器称为instance该任务将是您测量所有实例上的HTTP错误数的事实。



优点是任务和实例是标签中的字段,您可以按特定的实例或任务过滤结果。


方便吗


4. PromQL


如果您使用基于InfluxDB的数据库,那么您可能已经熟悉InfluxQL了 。 或在TimescaleDB中使用SQL


Prometheus还具有用于查询和检索服务器中数据的语言: PromQL


众所周知,数据是以键值对的形式呈现的。 PromQL使用相同的语法,并以向量形式返回结果。


什么样的载体?


Prometheus和PromQL中有两种类型的向量:


  • 表示上一个时间戳记的所有度量的即时向量
  • 具有时间范围的向量 :如果需要查看度量随着时间的发展,则可以在对Prometheus的请求中指定时间范围。 结果,您将获得一个向量,该向量合并了选定时间段内记录的所有值。


PromQL API提供了一组函数来处理查询中的数据。


您可以对值进行排序,对其应用数学函数(例如,计算导数或指数),甚至可以进行预测(例如,使用Holt-Winters模型)。


5.仪表


仪器仪表是普罗米修斯的另一个重要组成部分。 在从应用程序提取数据之前,先对它们进行检测。


在Prometheus中,检测意味着将客户端库添加到应用程序以提供Prometheus指标。


检测适用于大多数常见的编程语言:例如, Python,Java,Ruby,Go,甚至是Node或C#


本质上,您创建的内存对象(例如仪表或计数器)将动态地增加或减少该值。


然后,选择在何处提供指标。 Prometheus将从那里将其拾取并将其保存在时间序列数据库中。



6.出口商


在您编写的应用程序中,自定义提供的指标并使用工具随时间更改它们非常方便。


对于著名的应用程序,服务器和数据库, Prometheus提供了可用于监视目标的导出器


这些导出器通常表示为Docker映像,并且易于定制。 它们提供了一组现成的指标和通常现成的仪表板,您可以使用它们在几分钟内配置监视。


出口商的例子:


  • 数据库导出器 :用于MongoDB数据库,SQL和MySQL服务器。
  • HTTP导出器 :用于HAProxy,Apache或NGINX服务器。
  • Unix导出器 :可以使用内置节点导出器监视系统性能,该节点提供所有系统指标,而无需额外配置。


关于相互兼容性的几句话


大多数时间序列数据库都支持其系统的互操作性。


Prometheus并不是唯一具有度量标准要求的监视系统。 例如, InfluxDB (通过Telegraf), CollectDStatsDNagios也有自己的标准。


因此,对于不同系统的交互,创建了出口商。 即使Telegraf不以Prometheus接受的格式发送度量标准,Telegraf仍可以将这些度量标准发送到InfluxDB导出器,然后Prometheus将从中获取它们。


7.警报


使用时间序列数据库时,您需要数据反馈,并且警报管理器对此负责。


在Grafana中,警报很常见,但在Prometheus中也可以通过警报管理器使用警报。


Alert Manager是加入Prometheus并启动自定义警报器的单独工具


警报在配置文件中定义,并定义一组度量标准规则。 如果在时间序列中发生了对规则的遵守,则会触发警报并将其发送给指定的收件人。


与在Grafana中一样,您可以将电子邮件地址, Slack webhook,PagerDuty和自定义HTTP对象指定为收件人。



第三部分 普罗米修斯的例子



并且,当然,每个指南都应有实际示例 。 就像我要说的那样,技术本身并不是目的,应该完成特定的任务。


我们将讨论这个。


1. DevOps


由于所有这些用于不同系统,数据库和服务器的导出器,很明显,Prometheus主要用于DevOps行业


我们知道在这一领域有许多竞争的供应商和个性化解决方案。


Prometheus非常适合DevOps。


几乎不需要花费任何精力来设置和运行实例,并且您可以轻松地激活和配置任何辅助工具。


通过检测目标例如,通过文件导出器),对于广泛使用容器和分布式体系结构的堆栈来说,这是一个很好的解决方案。


在不断创建和删除实例的环境中,没有服务发现就无法实现一个DevOps堆栈。


2.健康


如今,不仅在IT中需要监视解决方案。 它们还用于提供灵活和可扩展的医疗保健体系结构的大型行业。


需求在增长,IT体系结构必须遵守它。 如果您没有可靠的工具来监视整个基础架构, 则可能会导致服务严重中断的风险 。 在卫生部门中,必须将这种危险降到最低。


下一篇文章在opensource.com上讨论了此示例


3.金融服务


最新的例子是在InfoQ会议上给出的,该会议讨论了Prometheus在金融机构中的使用。


Jamie Christian和Alan Strader展示了他们如何使用Prometheus来监控Northern Trust的基础设施。 非常有用,我建议您看看。



第十部分:下一步是什么?



是时候从理论转向实践了


今天,您熟悉了Prometheus的基础知识,了解了Prometheus执行的功能,使用的工具和系统以及使用的术语。


现在, 您拥有创建监视解决方案所需的一切


要开始使用Prometheus,请研究所有可用的出口商


然后安装必要的工具,创建第一个仪表板-然后开始!


如果您需要灵感,请阅读我的文章“如何使用Prometheus和Grafana监视Linux机器” 。 其中包含有关设置工具和第一个仪表板的说明。


我希望你学到了一些新东西。


如果您有我下一篇文章的主题,请分享。


愉快地留下来!

Source: https://habr.com/ru/post/zh-CN455290/


All Articles