什么是 Prometheus


Prometheus 是一个开源监控和报警工具集,随着 Kubernetes 的发展而变得越来越受欢迎。 Prometheus 最初是在 SoundCloud 构建的,其根源可以追溯到 Google 的一个名为 Borgmon 的监控项目。

Prometheus 是使用基于拉取的模型从应用程序和基础设施中收集指标的主要支持者。 这意味着 Prometheus 会定期向您的目标发送请求,然后将收集到的指标存储在时间序列数据库中。 在自我管理的 Prometheus 实例中,您提供基础设施来收集、存储和查询指标。 在 Prometheus 的托管版本中,供应商提供所有基础设施和服务正常运行时间的服务级别协议 (SLA)。

Prometheus 提供了一种名为 PromQL 的查询语言来查询时间序列数据。 有许多项目利用 PromQL(包括 Grafana 和 Alertmanager)来帮助完成分析和操作任务,例如数据可视化、创建报警和扩展监控基础设施。

Prometheus 用于从您的应用程序和基础设施收集指标。 这些指标可用于跟踪系统的运行状况、识别潜在问题并解决问题。

以下是使用 Prometheus 的一些具体好处:

优势
描述
开放性 Prometheus 是开源的,是云原生计算基金会 (CNCF) 的一部分,并且免费使用。
可靠性 Prometheus 非常可靠,并且在世界上一些最大的公司的生产环境中拥有良好的记录。
社区支持 Prometheus 拥有一个庞大且活跃的社区,可以提供支持、文档和改进。 它还与其他工具进行了许多集成,使您可以监控系统和基础设施并可视化数据。
与 Kubernetes 配合良好 为 Kubernetes 事实上的默认监控解决方案,大多数第三方应用程序已经提供了 Prometheus 指标。
适用于任何地方 虽然大多数采用都是在 Kubernetes 部署上,但 Prometheus 也可用于虚拟机和一些无服务器环境。
组件
描述
prometheus-server prometheus监控系统的核心组件。它存储时间序列数据并公开用于查询该数据和发出警报的 HTTP API。
prometheus-exporter 从各种系统收集指标并将其公开给 Prometheus 的软件代理。
alertmanager 从 Prometheus 接收警报并将其路由到适当的人员或系统的服务。
prometheus-federation 联邦,允许多个 Prometheus 服务器共享数据的功能。
prometheus-pushgateway 一个组件,允许服务将指标推送到 Prometheus,而无需抓取它们。 此功能最适合短期工作。
prometheus-blackbox-exporter 可用于监控 HTTP、TCP 和 DNS 端点可用性的服务。

Prometheus 使用 pull 模型来收集指标,这意味着 Prometheus 服务器会轮询其正在监视的系统或应用程序以获取指标。 这与许多其他监控系统使用的推送模型形成鲜明对比,在推送模型中,您可以修改应用程序代码以定期向服务器发送指标。

pull 模型不要求被监控的系统或应用程序了解 Prometheus 服务器,因此可以将其添加到监控系统,而无需更改应用程序代码。 pull 模型仅在需要时收集指标,因此 Prometheus 不会通过收集未使用的指标来浪费资源。

此外,Prometheus还可以通过以下方式自动发现数据源:

  • 服务发现:Prometheus 可以使用各种服务发现机制来查找正在运行公开指标的服务的主机。 例如,Prometheus 可以使用 Kubernetes API 通过运行的 prometheus-exporter 来发现 Pod。
  • 静态配置:还可以静态配置 Prometheus 来抓取特定资源。 这对于无法通过其他方式发现的资源非常有用。
  • 文件发现:Prometheus 还可以通过查找包含指标的文件来发现资源。 例如,Prometheus 可以发现由 collectd 或 Nagios 生成的文件。

一旦 Prometheus 发现资源,它将定期抓取该资源的指标。 然后,这些指标将存储在 Prometheus 的数据库中,可以在其中进行查询和可视化。

指标
描述
Counters 计数器跟踪只能递增的累积值。 它们通常用于跟踪服务的请求、错误和传输的字节等内容。
Gauges 测量跟踪上升或下降的比率,最常见的是测量每秒的速率。 它们通常用于跟踪内存使用情况、CPU 使用情况和磁盘空间等信息。
Histograms 直方图跟踪值的分布。 它们通常用于跟踪请求延迟和响应大小等内容。
Summaries 摘要与直方图类似,但它们也跟踪分位数。这使得它们对于识别异常值和理解值的整体分布更有用。

PromQL 是一种强大而灵活的查询语言,用于 Prometheus 收集的指标,可用于创建临时图形、表格和警报。

PromQL 使用功能查询语言,允许用户实时选择和聚合时间序列数据。 表达式的结果可以显示为图表,在 Prometheus 表达式浏览器中以表格数据形式查看,或者由外部系统通过 HTTP API 使用。

以下是 Prometheus 和 PromQL 的一些用途:

用途
描述
监控应用程序和基础设施的运行状况 Prometheus 收集有关潜在问题的指标和警报。
识别潜在问题 Prometheus 将当前指标与历史数据进行比较,并对任何重大偏差发出警报。
问题排查 Prometheus 提供系统状态的详细视图,并允许用户深入了解特定指标和资源,以确定问题的根本原因。
可视化您的数据 Prometheus 使用其 PromQL 查询语言来查询其时间序列数据,然后以各种格式显示结果,包括图形、表格和警报。
创建警报 Prometheus 使用其 PromQL 查询语言来查询其时间序列数据,然后在结果满足特定条件时发送通知。
在第三方工具中进行可视化 任何理解 Prometheus Query API 的前端,例如 Grafana 或 Kiali,都可以查询 Prometheus 服务器并显示数据。

以下是 PromQL 查询的一些示例:

平均每秒 CPU 使用率

要获取特定应用程序的平均每秒 CPU 使用率,您可以使用以下查询:

avg(rate(container_cpu_usage_seconds_total{app="myapp"}[1m]))

端点请求数

要获取对特定端点发出的请求数,您可以使用以下查询:

sum(http_requests_total{endpoint="/myendpoint"})

端点请求错误数

要获取从特定端点返回的错误总数,您可以使用以下查询:

sum(http_server_errors_total{endpoint="/myendpoint"})