关于 Prometheus 和 Grafana 的介绍

Prometheus是一个开源的基于指标的监控系统。它通过发送HTTP请求到指标端点来收集来自服务和主机的数据。然后将结果存储在时序数据库中,并提供用于分析和报警的功能。

为什么要进行监控?

  • 在事情出错之前,最好能够提前发出警报,以便有人能够查看。
  • 它可以提供洞察力,以便分析、调试和解决问题。
  • 它使您能够查看随时间变化的趋势/变化。例如,任何给定时间有多少活动会话。这有助于设计决策和容量规划。

监控通常与事件相关。事件可能包括接收HTTP请求、发送响应、从磁盘读取、用户登录。监控系统可能包括性能分析、日志记录、跟踪、指标、报警和可视化。

黑盒监控与白盒监控

监控分为两个主要类别:

黑盒监控

在黑盒监控中,监控是在应用程序或主机级别进行的,因为它们从外部进行观察。这可能相当有限。

白盒监控

白盒监控意味着监控服务的内部。它将公开有关内部组件的状态和性能的数据。

四个黄金信号

According to Google,如果您只能测量用户界面系统的四个指标,请关注以下四个指标,称为四个黄金信号:

#1. 延迟

响应请求所需的时间-无论成功与否。跟踪成功的请求和失败的请求都很重要。

#2. 流量

系统承受的需求量的度量。对于Web服务来说,这通常是每秒的HTTP请求数。

#3. 错误

请求失败的比率。

#4. 饱和度

服务的使用程度。延迟的增加通常是饱和度的一个重要指标。许多系统在达到100%利用率之前就会性能下降。

Prometheus指标类型

Prometheus指标有四种主要类型:

#1. 计数器

计数器的值将始终增加。它永远不会减少,但可以重置为零。因此,如果抓取失败,这只意味着一个数据点被漏掉了。累积增量将在下次读取时可用。例如:

  • 接收到的HTTP请求总数
  • 异常的数量。

#2. 测量仪

测量仪是在任何给定时间点的快照。它既可以增加也可以减少。如果数据获取失败,您将丢失一个样本;下次获取可能会显示不同的值:例如磁盘空间、内存使用情况。

#3. 直方图

直方图对样本进行抽样,并将其计数在可配置的桶中。它们用于请求持续时间或响应大小等内容。例如,您可以测量特定HTTP请求的持续时间。直方图将具有一组桶,例如1毫秒、10毫秒和25毫秒。Prometheus将存储落入特定桶的请求频率,而不是存储每个请求的每个持续时间。

#4. 摘要

与直方图类似,摘要也对观测结果进行抽样,通常是请求持续时间或响应大小。它将提供观测值的总计数和所有观测值的总和,从而允许您计算观测值的平均值。例如,在一分钟内,您有三个持续时间为2、3、4秒的请求。总和将为9,计数将为3。延迟为3秒。

Prometheus生态系统的组件

Prometheus服务器

收集指标,存储它们,并使其可用于查询,根据收集的指标发送警报。

抓取

Prometheus是一个基于拉取的系统。为了获取指标,Prometheus发送一个称为scrape的HTTP请求。它根据其配置将scrape发送到目标。

每个目标(静态定义或动态发现)都以常规间隔(scrape间隔)被抓取。每次抓取都会读取/metrics HTTP端点,以获取客户端指标的当前状态,并将值存储在Prometheus时间序列数据库中。

您可能想要探索更多监视解决方案的time-series databases

客户端库

要监视一个服务,您需要在代码中添加仪表。有适用于所有流行语言和运行时的客户端库可用。使用这些库,一旦添加了几行代码,您的代码就可以开始发出指标。这称为直接仪表。这些库使您可以定义内部指标,并通过HTTP端点公开它们。当Prometheus抓取指标HTTP端点时,客户端库将指标发送到服务器。

Prometheus为Go、Java、Python和Ruby提供官方客户端库。Prometheus拥有一个开放的生态系统。还有为C、PHP、Node.js、C#/.NET和其他许多语言构建的社区客户端库可用。

导出器

许多应用程序以非Prometheus格式公开指标。对于这些应用程序以及您不拥有或无法访问其代码的应用程序,您无法直接添加仪表。例如,MySQL,Kafka,JMX,HAProxy和NGINX服务器。在这些场景中,您可以使用exporters

导出器是您与要获取指标的应用程序一起部署的工具。导出器充当应用程序和Prometheus之间的代理。它将从Prometheus服务器接收请求,从应用程序的访问日志、错误日志中收集数据,将其转换为正确的格式,最后返回给Prometheus服务器。

一些热门的导出器包括:

  • Windows – 用于Windows服务器指标
  • Node – 用于Linux服务器指标
  • Blackbox – 用于DNS和网站性能指标
  • JMX – 用于基于Java的应用程序指标

一旦应用程序已被仪表化,或者导出器已就位,您需要告诉Prometheus它们在哪里。这可以使用静态配置完成。在动态环境中,无法完成此操作,因此使用服务发现。

告警

使用Prometheus进行告警由两部分组成-

告警规则将警报发送到Alertmanager。

Alertmanager然后管理这些警报。它使用许多现成的集成(如电子邮件、Slack、Hipchat和PagerDuty)发送通知。Alertmanager还可以执行静音或聚合操作以减少通知的数量。

这是使用Prometheus和仪表板监视Linux服务器的guide

使用仪表板可视化

Prometheus具有许多API,使用这些API,PromQL查询可以生成用于可视化的原始数据。

虽然Prometheus包含一个用于即席查询的表达式浏览器,但最好的可用工具是Grafana。Grafana与Prometheus完全集成,可以生成各种仪表板。

您需要将Prometheus配置为Grafana的数据源。

您可以通过以下方式添加仪表板:

  • 导入社区构建的仪表板
  • 构建自己的仪表板
  • 使用预定义的仪表板。

这是一个预定义的节点导出器仪表板的外观:

Grafana有一个模块,可用于全球监视站点和DNS性能指标。

总结

Prometheus有非常少的要求。它可以非常简单地运行,因为它只是一个包含配置文件的单一二进制文件。它可以处理数千个目标,并每秒摄入数百万个样本。Prometheus被设计用于跟踪系统的整体情况、健康状况和行为。

Grafana是可用于度量指标可视化的最佳工具,并与Prometheus无缝集成。

类似文章