Dawn's Blogs

分享技术 记录成长

0%

Prometheus学习笔记

Prometheus

Prometheus 是新一代的云原生监控系统,是一个开源的完整监控解决方案,形成了基于中央化的规则计算、统一分析和告警的新模型。

特点

Prometheus 作为一种云原生监控系统,有以下特点:

易于管理

  • Prometheus 核心部分只有一个单独的二进制文件,不存在任何的第三方依赖(数据库、缓存等),因此不会存在级联故障
  • Prometheus 基于 Pull 模型的架构方式,可以在任何地方搭建监控系统。
  • 对于一些复杂的情况,还可以使用 Prometheus 服务发现功能动态管理监控目标。

监控服务的内部运行状态

  • Pometheus 鼓励用户监控服务的内部状态,基于 Prometheus 丰富的 Client 库,用户可以轻松的在应用程序中添加对 Prometheus 的支持,从而让用户可以获取服务和应用内部真正的运行状态。

强大的数据模型

  • 所有采集的监控数据均以指标(metric)的形式保存在内置的时间序列数据库当中。所有的样本除了基本的指标名称以外,还包含一组用于描述该样本特征的标签。每一条时间序列由指标名称(Metrics Name)以及一组标签(Labels)唯一标识。如下所示:
1
2
http_request_status{code='200',content_path='/api/path',environment='produment'} => 
[value1@timestamp1,value2@timestamp2...]

其中,http_request_status 为指标名称,codecontent_path 等为标签,[value1@timestamp1,value2@timestamp2...] 按照时间的先后顺序存储的值。

强大的查询语言 PromQL

  • Prometheus 内置了一个强大的数据查询语言 PromQL。 通过 PromQL 可以实现对监控数据的查询、聚合。同时 PromQL 也被应用于数据可视化(如 Grafana)以及告警当中。

可扩展

  • Prometheus 对于联邦集群的支持,可以让多个 Prometheus 实例产生一个逻辑集群,当单实例 Prometheus Server 处理的任务量过大时,通过使用功能分区 + 联邦集群可以对其进行扩展。

架构

Prometheus 整体上可以分为三个模块:

  • 采集层
  • 存储计算层
  • 应用层

image-20221219101506892

采集层

采集层主要用于采集被监控的数据,层分为两类,一类是生命周期较短的作业,还有一类是生命周期较长的作业(这种对应于监控特定的机器)。

  • 短作业:直接通过 API,在退出时将指标推送给 Pushgateway(推送网关,短作业将指标推送给推送网关,之后 Prometheus server 中的 Retrieval 统一从推送网关中拉取短作业的监控数据)。
  • 长作业:Retrieval 组件直接从 Job 或者 Exporter(Exporter 为专门为一些应用开发的数据获取组件,如 mysqld_exporter、node_exporter 等)拉取数据。

存储计算层

存储计算层包含两个主要组件,Prometheus server 和 Service discovery。

  • Prometheus server:
    • Retrieval:取数据组件,它会主动从 Pushgateway 或者 Exporter 中拉取指标数据。
    • TSDB:时序数据库,提供数据核心存储与查询
    • HTTP server:对外提供 HTTP 服务。
  • Service discovery:可以动态发现要监控的目标。

应用层

应用层主要分为两种,AlertManager 和数据可视化。

  • AlertManager:专门用于处理告警的组件。
  • 数据可视化:用于数据可视化或者向外提供 API 用于提供监控数据,数据可视化可以采用 Prometheus Web UI、Grafana。

PromQL

Prometheus 通过指标名称(metrics name)以及对应的一组标签(labelset)唯一定义一条时间序列。指标名称反映了监控样本的基本标识,而标签则在这个基本特征上为采集到的数据提供了多种特征维度。

用户可以基于这些特征维度过滤,聚合,统计从而产生新的计算后的一条时间序列。PromQL 是 Prometheus 内置的数据查询语言,其提供对时间序列数据丰富的查询,聚合以及逻辑运算能力的支持。并且被广泛应用在 Prometheus的日常应用当中,包括对数据查询、可视化、告警处理当中。

详细的语法查询 Prometheus 官方文档即可:https://prometheus.io/docs/prometheus/latest/getting_started/