Prometheus 教程

Prometheus 简介

Prometheus 简介

Prometheus 是一个开源系统监控和警报工具包,最初由 SoundCloud 开发。自 2012 年推出以来,许多公司和组织都采用了 Prometheus,该项目拥有一个非常活跃的开发者和用户社区。现在,它是一个独立的开源项目,独立于任何公司进行维护。为了强调这一点,并明确项目的治理结构,Prometheus 于 2016 年加入了云原生计算基金会(Cloud Native Computing Foundation,CNCF),成为继 Kubernetes 之后的第二个托管项目。2017年底发布了基于全新存储层的2.0版本,能更好地与容器平台、云平台配合。

Prometheus 以时间序列数据的形式收集和存储其指标,即指标信息与记录时的时间戳以及称为标签的可选键值对一起存储。

Prometheus 作为新一代的云原生监控系统,目前已经有超过650+位贡献者参与到Prometheus的研发工作上,并且超过120+项的第三方集成。

Prometheus 特性

作为新一代的监控框架,Prometheus 的主要特点包括:

  • 多维数据模型:Prometheus 使用标签(labels)来标记时间序列数据,这使得数据查询和分析更加灵活和强大。

  • 灵活的查询语言:PromQL 是一种强大的查询语言,允许用户执行复杂的查询操作,如时间序列聚合、范围向量查询等。

  • 不依赖分布式存储:Prometheus 服务器本身就是一个独立的存储节点,不需要依赖外部存储系统。

  • 时间序列数据库:Prometheus 使用时间序列数据库来存储收集到的数据,这使得数据查询和分析更加高效。

  • 高可用性:Prometheus 支持复制和分片,以确保数据的高可用性和可靠性。

  • 强大的可视化工具:Prometheus 提供了 Grafana 插件,可以与 Grafana 集成,实现强大的数据可视化功能。

Prometheus 适合做什么?

Prometheus 非常适合记录纯数字的时间序列,既可以是以主机为中心的监控,也可以是以服务为导向的动态架构。在微服务的世界,它支持多维度的数据集合,查询功能非常强大。

Prometheus 是为可用性而设计,利用它你可以快速定位问题。每一个 Prometheus Server 都是独立的,不依赖于网络存储或其他的第三方服务。可以在部分基础设施出现问题时仍然使用它。

Prometheus 不适合做什么?

Prometheus 用于评估可用性。如果你想要100%的精准度,比如每个请求的账单,Prometheus 就不是一个好的选择,因为收集上来的数据可能没这么细致、完整。对于这样的需求,你最好用其他的大数据系统对数据做分析。

什么是度量(metrics)?

通俗地说,度量就是数字测量。时间序列一词指的是记录一段时间内的变化。用户想要度量的内容因应用而异。对于网络服务器,可以是请求时间;对于数据库,可以是活动连接数或活动查询数,等等。

度量在了解应用程序以某种方式运行的原因方面发挥着重要作用。假设您正在运行一个网络应用程序,并发现它运行缓慢。要了解应用程序的运行情况,您需要一些信息。例如,当请求数量较多时,应用程序可能会变慢。如果掌握了请求数指标,就可以确定原因,并增加服务器数量来处理负载。

Prometheus 组件

Prometheus 的生态系统包括多个组件,大部分的组件都是用Go语言编写的,因此部署非常方便,而这些组件大部分都是可选的,主要组件介绍如下:

Prometheus Server(主服务器)

Prometheus Server 是 Prometheus 组件中的核心部分,负责实现对监控数据的获取,存储以及查询。

Prometheus Server 可以通过静态配置管理监控目标,也可以配合使用 Service Discovery 的方式动态管理监控目标,并从这些监控目标中获取数据。

Prometheus Server 需要对采集到的监控数据进行存储,Prometheus Server 本身就是一个时序数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。

Prometheus Server 对外提供了自定义的 PromQL 语言,实现对数据的查询以及分析。

Prometheus Server 内置的 Express Browser UI,通过这个 UI 可以直接通过 PromQL 实现数据的查询以及可视化。

推送网关(push gateway)

推送网关主要用来接收由客户端推送(push)过来的指标数据,在指定的时间间隔,由主程序来抓取。

由于 Prometheus 数据采集基于 Pull 模型进行设计,因此在网络环境的配置上必须要让 Prometheus Server 能够直接与 Exporter 进行通信。

当这种网络需求无法直接满足时,就可以利用 PushGateway 来进行中转。

可以通过 PushGateway 将内部网络的监控数据主动推送到 Gateway 当中。

而 Prometheus Server 则可以采用同样 Pull 的方式从 PushGateway 中获取到监控数据。

Exporter

Exporter 主要用来采集数据,并通过 HTTP 服务的形式暴露给 Prometheus Server,Prometheus Server 通过访问该 Exporter 提供的接口,即可获取到需要采集的监控数据。

常见的 Exporter 有很多,例如 node_exporter、mysqld_exporter、statsd_exporter、blackbox_exporter、haproxy_exporter 等,支持如 HAProxy,StatsD,Graphite,Redis 此类的服务监控;

更多 Exporter 请访问 https://prometheus.io/docs/instrumenting/exporters/ 地址。

告警管理器(Alertmanager)

管理告警,主要是负责实现报警功能。

在Prometheus Server中支持基于PromQL创建告警规则,如果满足PromQL定义的规则,则会产生一条告警,而告警的后续处理流程则由AlertManager进行管理。

在AlertManager中我们可以与邮件,Slack等等内置的通知方式进行集成,也可以通过Webhook自定义告警处理方式。AlertManager即Prometheus体系中的告警处理中心。

Prometheus 架构

该图展示了 Prometheus 的架构及其生态系统的部分组件:

Prometheus 简介

Prometheus 可直接或通过中间推送网关从仪表化作业中获取指标,用于短时作业。它将所有采集到的样本存储在本地,并在这些数据上运行规则,从现有数据中汇总并记录新的时间序列或生成警报。可使用 Grafana 或其他 API 消费者对收集到的数据进行可视化。

更多关于 Prometheus 的知识将在后续章节娓娓道来。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号