FantasticMao 技术笔记
BlogGitHub
  • README
  • C & Unix
    • C
      • 《C 程序设计语言》笔记
      • C 语言中的陷阱
      • CMake 示例
      • GNU make
      • LLVM Clang
      • Nginx 常用模块
      • Vim 常用命令
    • Unix-like
      • 《深入理解计算机系统》笔记
      • 《UNIX 环境高级编程》笔记 - UNIX 基础知识
      • 《UNIX 环境高级编程》笔记 - 文件 IO
      • 《UNIX 环境高级编程》笔记 - 标准 IO 库
      • 《鳥哥的 Linux 私房菜》笔记 - 目录配置
      • 《鳥哥的 Linux 私房菜》笔记 - 认识与学习 bash
      • 《鳥哥的 Linux 私房菜》笔记 - 任务管理
      • OpenWrt 中的陷阱
      • iptables 工作机制
  • Go
    • 《A Tour of Go》笔记
    • Go vs C vsJava
    • Go 常用命令
    • Go 语言中的陷阱
  • Java
    • JDK
      • 《Java 并发编程实战》笔记 - 线程池的使用
      • 设计模式概览
      • 集合概览
      • HashMap 内部算法
      • ThreadLocal 工作机制
      • Java Agent
    • JVM
      • 《深入理解 Java 虚拟机》笔记 - Java 内存模型与线程
      • JVM 运行时数据区
      • 类加载机制
      • 垃圾回收算法
      • 引用类型
      • 垃圾收集算法
      • 垃圾收集器
    • Spring
      • Spring IoC 容器扩展点
      • Spring Transaction 声明式事务管理
      • Spring Web MVC DispatcherServlet 工作机制
      • Spring Security Servlet 实现原理
    • 其它
      • 《Netty - One Framework to rule them all》演讲笔记
      • Hystrix 设计与实现
  • JavaScript
    • 《写给大家看的设计书》笔记 - 设计原则
    • 《JavaScript 权威指南》笔记 - jQuery 类库
  • 数据库
    • ElasticSearch
      • ElasticSearch 概览
    • HBase
      • HBase 数据模型
    • Prometheus
      • Prometheus 概览
      • Prometheus 数据模型和指标类型
      • Prometheus 查询语法
      • Prometheus 存储原理
      • Prometheus vs InfluxDB
    • Redis
      • 《Redis 设计与实现》笔记 - 简单动态字符串
      • 《Redis 设计与实现》笔记 - 链表
      • 《Redis 设计与实现》笔记 - 字典
      • 《Redis 设计与实现》笔记 - 跳跃表
      • 《Redis 设计与实现》笔记 - 整数集合
      • 《Redis 设计与实现》笔记 - 压缩列表
      • 《Redis 设计与实现》笔记 - 对象
      • Redis 内存回收策略
      • Redis 实现分布式锁
      • Redis 持久化机制
      • Redis 数据分片方案
      • 使用缓存的常见问题
    • MySQL
      • 《高性能 MySQL》笔记 - Schema 与数据类型优化
      • 《高性能 MySQL》笔记 - 创建高性能的索引
      • 《MySQL Reference Manual》笔记 - InnoDB 和 ACID 模型
      • 《MySQL Reference Manual》笔记 - InnoDB 多版本
      • 《MySQL Reference Manual》笔记 - InnoDB 锁
      • 《MySQL Reference Manual》笔记 - InnoDB 事务模型
      • B-Tree 简述
      • 理解查询执行计划
  • 中间件
    • gRPC
      • gRPC 负载均衡
    • ZooKeeper
      • ZooKeeper 数据模型
    • 消息队列
      • 消息积压解决策略
      • RocketMQ 架构设计
      • RocketMQ 功能特性
      • RocketMQ 消息存储
  • 分布式系统
    • 《凤凰架构》笔记
    • 系统设计思路
    • 系统优化思路
    • 分布式事务协议:二阶段提交和三阶段提交
    • 分布式系统的技术栈
    • 分布式系统的弹性设计
    • 单点登录解决方案
    • 容错,高可用和灾备
  • 数据结构和算法
    • 一致性哈希
    • 布隆过滤器
    • 散列表
  • 网络协议
    • 诊断工具
    • TCP 协议
      • TCP 报文结构
      • TCP 连接管理
由 GitBook 提供支持
在本页
  • 数据模型
  • 指标名称和标签
  • 数据样本
  • 表达式
  • 指标类型
  • Counter
  • Gauge
  • Histogram
  • Summary
  • 参考资料
  1. 数据库
  2. Prometheus

Prometheus 数据模型和指标类型

数据模型

从本质上来说,Prometheus 把所有数据存储为时序类型:按照指标和多维标签来划分的、带有时间戳的数据流。Prometheus 除了存储时序数据之外,可能还会生成临时的时序数据作为查询结果。

指标名称和标签

Prometheus 中的每个时序数据都由它的指标名称和被称为标签的可选的 key-value 键值对来被唯一标识。

指标名称指定了被测量系统的一般功能(例如 http_requests_total 代表了收到 HTTP 请求的总数)。指标名称可以包含 ASCII 字符、数字、下划线和冒号,并且必须满足如下的正则表达式 [a-zA-Z_:][a-zA-Z0-9_:]*。

标签可以使 Prometheus 支持多维度的数据模型:对于相同指标名称的不同标签组合,都可以标识该指标的特定维度的实例(例如所有使用 POST 方法的发送给 /api/tracks 处理器的 HTTP 请求)。Prometheus 的查询语言支持基于这些标签维度来过滤和聚合数据,更改标签值,包括添加和删除标签,都会创建一组新的时序数据。

标签名称可以包含 ASCII 字符、数字和下划线,并且必须满足如下的正则表达式 [a-zA-Z_][a-zA-Z0-9_]*,标签值可以包含任意的 Unicode 字符。

标签值为空的标签等同于该标签不存在。

数据样本

数据样本形成了真实的时序数据,每个数据样本包含了:

  • 一个 float64 类型的值

  • 一个毫秒精度的时间戳

表达式

给定一个指标名称和一组标签,时序数据通常使用如下表达式来标识:

<metric name>{<label name>=<label value>, ...}

例如,指标名称为 api_http_requests_total、带有标签 method="POST" 和 handler="/messages" 的时序数据可以写作为:

api_http_requests_total{method="POST", handler="/messages"}

指标类型

Prometheus 客户端库中提供了四种核心的指标类型,这些指标类型目前仅在客户端库和查询 API 中有所区别。Prometheus 服务端目前尚未使用这些类型信息,并会将所有数据扁平化为无类型的时序数据。这一点可能会在未来的版本中改变。

Counter

counter 是一个累计的指标,代表了一个单调递增的计数器,它的值只能增加或者是在系统重启时重置为零。例如,可以使用 counter 来表示处理过的 HTTP 数量、完成的任务数量、错误数量等。

不要使用 counter 来表示可以减少的值。例如,不要使用 counter 来表示正在运行的进程数,而是使用 gauge。

Gauge

gauge 是一个指标,代表可以任意上下浮动的单个数值。

gauge 通常用于表示测量值,例如温度或者当前内存的使用情况,也能用于表示可以上下浮动的计数值,例如当前并发请求的数量。

Histogram

histogram 会对观测数据进行采样(通常是请求的持续时间和响应的内容大小),并将它们计入可配置的槽中。histogram 也可以提供所有被观测的数值总和。

指标名称为 basename 的 histogram 指标类型,在一次数据采集过程中可以暴露多个时序数据:

  • 观测槽中的累计数值,会被暴露为 <basename>_bucket{le="<upper inclusive bound>"}

  • 所有被观测的数值总和,会被暴露为 <basename>_sum

  • 已经观测到的事件总数,会被暴露为 <basename>_count(与上文中的 <basename>_bucket{le="+Inf"} 写法相同)

Summary

summary 与 histogram 类似,也会对观测数据进行采样。summary 不仅提供了观测的事件总数,以及观测的数值总和,还计算了滑动时间窗口内的可配置的百分位数值。

指标名称为 basename 的 summary 指标类型,在一次数据采集过程中可以暴露多个时序数据:

  • 被观测事件的流式 φ 分位数值,会被暴露为 <basename>{quantile="<φ>"}

  • 所有被观测的数值总和,会被暴露为 <basename>_sum

  • 已经观测到的事件总数,会被暴露为 <basename>_count

参考资料

最后更新于1年前

这与 使用的表达式相同。

使用 histogram_quantile() 函数可以根据 histogram 甚至是 histogram 的聚合结果中计算百分位数值。histogram 也可以用来计算 分数。在观测槽中计算时,需要注意 histogram 的数值是累计的。

OpenTSDB
Apdex
Data Model
Metric Types