监控 - Prometheus
00 分钟
2024-6-25
Created
Jun 6, 2024 03:36 AM
Tags

Prometheus

什么是 Prometheus ?

Prometheus 是一个开源的报警系统和监控工具包,是由 SoundCloud 公司开发的 开源监控报警系统时序数据库(TSDB) 。Prometheus 使用 Go 语言开发,是 Google BorgMon 监控系统的开源版本。从 2012 年成立以来,许多公司和组织都采用 Promethues,并且该项目有着很活跃的社区和开发者;现在是一个开源项目,可以独立于任何公司进行维护;2016年 Prometheus 成为继 Kubernetes 之后第二个加入 Linux 基金会旗下的原生云基金会 Cloud Native Computing Foundation 的托管项目。

各监控系统对比

监控方案
数据收集
自动发现
侧重点
数据展示方案
贴合云原生
Cacti
SNMP
插件支持
数据展示
RRDTOOL
Nagios
各种脚本插件
脚本插入
状态展示
阈值
Zabbix
zabbix-agent 为主
主机地址自动发现
状态、数据展示
PHP
中等
Prometheus
Exporter为主
各种模式支持,最为完善
以时间序列保存数据
通过结合 Grafana 进行结合展示
优秀

特性

  • 由 metric 名称和 K/V 键值对标识的时间序列的多维数据模型
  • 简单的查询语言 PromQL(TSDB数据库的查询语言)
  • 不依赖分布式存储,单个服务节点自动治理
  • 通过 http 的 pull 模型获取数据的时序集合
  • 支持通过网关 push 时序数据
  • 通过服务发现或者静态配置发现目标
  • 支持多种图表和仪表盘模式

架构图

notion image
notion image
notion image
notion image

组件

  • Prometheus Server
    • 负责定时去目标抓取 metrics (指标)数据,每个被抓取对象需要开放一个 http 服务接口;pull 下来的数据经过整理后写入到本地的时序数据库(TSDB)中。
  • Client Library
    • 客户端类库(例如官方提供的:Go,Python,Java等),为需要监控的服务产生相应的 metrics数据并开放一个http服务接口给 Prometheus Server。
      目前很多软件原生就支持 Prometheus ,提供了 metrics 数据,可以直接使用 Prometheus pull 。对于像操作系统不提供提供 metrics 数据的情况,可以使用exporter ,或者自己开发 exporter 来提供 metrics 数据服务。
  • Node Exporter
    • 泛指能向 Prometheus 提供监控的 metrics 数据的都可以称为一个 exporter。一个 exporter 的实例称为 target ,exporter 来源主要2个方面,一个是社区提供的,一种是用户自定义的。主要用来支持其他数据源的 metrics 数据导入到 Prometheus ,支持数据库、硬件、消息中间件、存储系统、HTTP 服务器、jmx 等。
  • PushGateway
    • 主要用于临时性的 short-lived job。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了。对此类 jobs 定时将 metrics 数据 push 到 pushgateway 上,再由 Prometheus Server 从 Pushgateway 上 pull 到本地。这种方式主要用于服务层面的 metrics,对于机器层面的 metrices ,需要使用 node exporter。
  • Promdash 和 Grafana
    • Prometheus 内置一个简单的 Web 控制台 Promdash ,可以查询 metrics 数据,查看配置信息或者 Service Discovery 等,实际工作中,查看指标或者创建仪表盘通常使用 Grafana ,Prometheus 作为 Grafana 的数据源。
  • alertmanager
    • 从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对应的接受方式上,发出报警。常见的接收方式有:电子邮件,pagerduty,OpsGenie, webhook 等。
  • PromQL
    • 是 Prometheus TSDB 的查询语言。是结合 Grafana 进行数据展示和告警规则的配置的关键部分。

工作过程

  • Prometheus Daemon 负责定时去被监控目标上抓取 metrics 数据,每个抓取目标需要暴露一个 http 服务的接口给它定时抓取。Prometheus 支持通过配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup 等方式指定抓取目标。Prometheus 采用 PULL 的方式进行监控,即服务器可以直接通过目标 PULL 数据或者间接地通过中间网关来 Push 数据。
  • Prometheus 在本地处理抓取到的所有数据,并通过一定规则进行整理数据,并把得到的结果存储到新的时间序列中。
  • Prometheus 通过 PromQL 和其他 API 可视化地展示收集的数据。Prometheus 支持很多方式的图表可视化,例如 Grafana、自带的 Promdash 以及自身提供的模版引擎等等。Prometheus 还提供 HTTP API 的查询方式,自定义所需要的输出。
  • PushGateway 支持 Client 主动推送 metrics 到 PushGateway,而 Prometheus 只是定时去 Gateway 上抓取数据。
  • Alertmanager 是独立于 Prometheus 的一个组件,可以支持 Prometheus 的查询语句,提供十分灵活的报警方式。

PromQL 查询语言

​ PromQL(Prometheus Query Language)是 Prometheus 自己开发的表达式语言,语言表现力很丰富,内置函数也很多。使用它可以对时序数据进行筛选和聚合。

PromQL 语法

  1. 数据类型
    1. PromQL 表达式计算出来的值有以下几种类型:
      • 瞬时向量 (Instant vector)
        • 一组时序,每个时序只有一个采样值
      • 区间向量 (Range vector)
        • 一组时序,每个时序包含一段时间内的多个采样值
      • 标量数据 (Scalar)
        • 一个浮点数
      • 字符串 (String)
        • 一个字符串,暂时未用
  1. 时序选择器
    1. 2.1 瞬时向量选择器:瞬时向量选择器用来选择一组时序在某个采样点的采样值
      notion image
      1673464715153
      2.2 区间向量选择器:区间向量选择器类似于瞬时向量选择器,不同的是它选择的是过去一段时间的采样值。
      notion image
      1673464768839
      2.3 偏移修饰器
      前面介绍的选择器默认都是以当前时间为基准时间,偏移修饰器用来调整基准时间,使其往前偏移一段时间。偏移修饰器紧跟在选择器后面,使用 offset 来指定要偏移的量。
      notion image
      1673465572627
      notion image
      1673465605210

2. PromQL操作符(了解)

  1. 二元操作符
    1. PromQL 的二元操作符支持基本的逻辑判断和算术运算,包含算术类、比较类和逻辑类三大类
      1.1 算术类二元操作符
      1.2 比较类二元操作符
      1.3 逻辑类二元操作符
      1.4 二元操作符优先级
  1. 向量匹配
    1. 前面算术类和比较类操作符都需要在向量之间进行匹配。共有两种匹配类型,one-to-onemany-to-one | one-to-many
      2.1 One-to-one 向量匹配
      2.2 Many-to-one / one-to-many 向量匹配
  1. 聚合操作符
    1. PromQL 的聚合操作符用来将向量里的元素聚合得更少。总共有下面这些聚合操作符:

3. PromQL函数(了解)

Prometheus 内置了一些函数来辅助计算,下面介绍一些典型的
上一篇
Linux 基础知识 往期汇总
下一篇
<K8S> vol. 01 - kubernetes 组件