Prometheus生态与实现原理介绍

Prometheus

1.1 Prometheus简介

Prometheus于2012年由SoundCloud创建,目前已经已发展为最热门的分布式监控系统。
Prometheus完全开源的,被很多云厂商(架构)内置,在这些厂商(架构)中,可以简单部署
Prometheus,用来监控整个云基础架构设施。比如DigitalOcean或Docker都使用普罗米修斯作为基础
监控。
Prometheus是一个时间序列数据库,它涵盖了可以绑定的整个生态系统工具集及其功能。
Prometheus主要用于对基础设施的监控,包括服务器、数据库、VPS几乎所有东西都可以通过Prometheus进行监控

Prometheus主要优点如下:

  • 提供多维度数据模型和灵活的查询方式。通过将监控指标关联多个tag,来将监控数据进行任意维
    度的组合,并且提供简单的PromQL,还提供查询接口,可以很方便地结合等GUI组件展示数据。
  • 在不依赖外部存储的情况下,支持服务器节点的本地存储。通过Prometheus自带的时序数据库,
    可以完成每秒千万级的数据存储。
  • 定义了开发指标数据标准,以基于HTTP的pull方式采集时序数据。只有实现了Prometheus监控数
    据格式的监控数据才可以被Prometheus采集、汇总。
  • 支持通过静态文件配置和动态发现机制发现监控对象,自动完成数据采集。Prometheus目前已经
    支持Kubernetes、etcd、consul等多种服务发现机制,可以减少运维人员的手动配置环节。
  • 易于维护,可以通过二进制文件直接启动,并且提供容器化部署镜像。
  • 支持数据的分区采集和联邦部署,支持大规模集群监控。

1.2 Prometheus生态系统

Prometheus生态系统有功能丰富工具集:
Alertmanager:Prometheus通过配置文件定义规则将告警信息推送到Alertmanager。Alertmanager
可以将其导出到多个端点,例如Pagerduty或Email等。
数据可视化:在Web UI中可视化时间序列数据,轻松过滤查看监控目标的信息,与Grafana、Kibana等
类似。
服务发现:Prometheus可以动态发现监控目标,并根据需要自动废弃目标。这在云架构中使用动态变
更地址的容器时,非常方便。
请添加图片描述

1.3 Prometheus实现原理

数据存储
Prometheus指标数据支持本地存储和远程存储。
请添加图片描述

指标数据
Prometheus使用键-值对存储监控数据。键描述了测量值时将实际测量值存储为数字的值。
Prometheus并不会存储原始信息,如日志文本,它存储的是随时间汇总的指标。
一般来说键也就监控指标,如果想要获得有关指标的更多详细信息,Prometheus有一个标签的概念。
标签旨在通过向键添加其他字段来为指标提供更详细信息。
请添加图片描述

度量类型
Prometheus监控指标有Counter(计数器)、Gauge(仪表盘)、Histogram(直方图)和Summary(摘要)四种
度量类型。

  • Counter
    计数器Counter是我们使用的最简单的度量标准形式。计数器的值只能增加或重置为0,比如,要
    计算服务器上的HTTP错误数或网站上的访问次数,这时候就使用计数器。
  • Gauges
    Gauges用于处理随时间减少或增加的值。比如温度、内存变化等。Gauge类型的值可以上升和下
    降,可以是正值或负值。
  • Histogram
    直方图Histogram是一种更复杂的度量标准类型。它为我们的指标提供了额外信息,例如观察值的
    总和及其数量,常用于跟踪事件发生的规模。其值在具有可配置上限的存储对象中聚合。比如,为
    了监控性能指标,我们希望得到在有20%的服务器请求响应时间超过300毫秒发送警告。对于涉及
    比例的指标就可以考虑使用直方图。
  • Summary
    摘要Summary是对直方图的扩展。除了提供观察的总和和计数之外,它们还提供滑动窗口上的分
    位数度量。分位数是将概率密度划分为相等概率范围的方法。直方图随时间汇总值,给出总和和计
    数函数,使得易于查看给定度量的变化趋势。而摘要则给出了滑动窗口上的分位数(即随时间不断
    变化)。

PromQL
对于Prometheus数据,我们可以通过HTTP来查询,如果是复杂的数据查询,则还可以使用PromQL进
行。和关系型数据库实现SQL解析一样,Prometheus实现了一套自己的数据库语言解析器,最大的区
别是支持查询。
使用Prometheus的PromQL,会处理两种向量:

  • 即时向量:表示在最近时间戳中跟踪的指标。
  • 时间范围向量:用于查看度量随时间的演变,可以使用自定义时间范围查询Prometheus。

PromQL API公开了一组方便查询数据操作的函数。用它可以实现排序,数学函计算(如导数或指数函
数),统计预测计算(如Holt Winters函数)等。

Instrumentation仪表化
仪表化是Prometheus的一个重要组成部分。在从应用程序检索数据之前,必须要仪表化它们。
Prometheus术语中的仪表化表示将客户端类库添加到应用程序,以便它们向Prometheus吐出指标。
可以对大多数主流的编程语言进行仪表化。
在仪表化操作时,需要创建内存对象(如仪表盘或计数器),然后选择指标公开的位置。Prometheus
将从该位置获取并存储到时间序列数据库。

Exporters模板
Exporter是一个采集监控数据样本的组件。除了官方实现的Exporter,还有很多第三方实现如 Redis
exporter 和RabbitMQ exporter等。这些Exporters通过HTTPS/HTTP方式、TCP方式、本地文件方式
或标准协议方式访问。
常见的Exporters模版有:
数据库模版:用于MongoDB数据库,MySQL服务器的配置。
HTTP模版:用于HAProxy,Apache或Nginx等Web服务器和代理的配置。
Unix模版:用来使用构建的节点导出程序监视系统性能,可以实现完整的系统指标的监控。
请添加图片描述

Alertmanager告警
在处理时间序列数据库时,我们希望对数据进行处理,并对结果给出反馈,而这部分工作由告警来实
现。
告警在Grafana中非常常见,Prometheus是通过Alertmanager实现完成的告警系统。Alertmanager是
一个独立的工具,可以绑定到Prometheus并运行自定义Alertmanager。告警通过配置文件定义,定义
由一组指标规则组成,如果数据命中这些规则,则会触发告警并将信息发送到预定义的目标。
Prometheus的告警,可以通过email,Slack webhooks,PagerDuty和自定义HTTP目标等。
请添加图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42460087/article/details/126170860