星途物语 星途物语
首页
  • 随手记录
  • 故障处理
  • Nginx
  • MySQL
  • Ansible
  • Nexus
  • Tomcat
  • Docker
  • Zabbix
  • Prometheus
  • Git
  • GitLab
  • Jenkins
  • Kubernetes
  • Shell
  • Python
  • 圈圈空间
  • 做饭这件事
收藏站点
留言板
归档
GitHub (opens new window)

星途物语

尚记时,记之
首页
  • 随手记录
  • 故障处理
  • Nginx
  • MySQL
  • Ansible
  • Nexus
  • Tomcat
  • Docker
  • Zabbix
  • Prometheus
  • Git
  • GitLab
  • Jenkins
  • Kubernetes
  • Shell
  • Python
  • 圈圈空间
  • 做饭这件事
收藏站点
留言板
归档
GitHub (opens new window)
  • 随手记录

    • QPS优化记录
    • 阿里云SLB演示
    • DDOS预防
    • Linux内核优化
    • rsync同步守护进程
    • NFS文件同步
    • Tomcat升级
    • 编译安装mysql后添加到systemd管理
    • 防火墙笔记
    • python自动化巡检服务器
  • 故障处理

    • 处理防MIME攻击后出现的问题解决
  • MySQL学习笔记

    • MySQL5.7安装
    • MySQL常用操作语句
    • MySQL主从架构实施
    • MySQL主主架构实施
    • MySQL MHA高可用实施
    • MyCat读写分离
    • MySQL创建用户时的授权
    • MySQL备份
    • MySQL通配符
  • Nginx学习笔记

    • 状态码含义
    • 匹配优先级
    • Nginx常用操作
    • 添加第三方模块
    • 关于路径匹配
    • 转发和重写
    • 内置变量
    • Nginx配置文件结构
  • Tomcat学习笔记

    • 部署Tomcat
    • 修改发布目录
    • Tomcat调优
  • Redis学习笔记

    • 通过 tar.gz 包安装部署 redis
    • redis 配置文件
    • 哨兵集群
    • redis常用命令
    • 虚拟机安装 redis.tar.gz 遇到的问题
  • Ansible学习笔记

    • 部署和使用 ansible
    • ansible 自带的密码认证参数
    • 批量免密操作:批量分发公钥
    • 配置主机清单
    • ansible 小知识
    • 模块介绍
    • 剧本
    • 一键部署 rsync 环境
    • 批量安装一个tomcat
    • 批量安装一个nginx
    • 批量安装 zabbix-agent
  • Zabbix学习笔记

    • 部署 zabbix 服务端、客户端
    • 自定义监控
    • 触发器
    • 监控项类型
    • 简单检查模式
    • zabbix web 界面结构信息
    • 邮件报警
    • 微信报警
    • snmp 监控网络设备
    • 部署 zabbix 服务端、客户端
    • jmx 监控 java 应用
    • ipmi 监控硬件
    • 自动化注册
    • 监控项的主要项和相关项
    • percona 监控 mysql
  • Git学习笔记

    • 配置 git
    • 常用命令
  • GitLab学习笔记

    • 环境准备
    • 安装 gitlab
    • gitlab 忘记 root 管理员密码的处理办法
  • Jenkins学习笔记

    • 安装部署
    • jenkins 使用脚本完成项目构建
    • jenkins 自动构建最新项目
    • 将 jenkins 自动部署的结果返回给 gitlab
    • jenkins 上线 java 项目
    • jenkins pipeline
  • Docker学习笔记

    • 安装 docker
    • 配置 docker 源
    • docker 中的常见名词
    • 镜像管理命令
    • 容器管理命令
    • 创建容器
    • 数据卷
    • docker network
    • 搭建 LNMP
    • Dockerfile
    • Dockerfile 搭建 tomcat
    • docker 镜像磁盘扩容
    • docker composer
    • Harbor 私有镜像仓库
    • docker 面试题
    • docker desktop 运行时与虚拟机冲突
    • docker离线安装
  • Nexus学习笔记
  • Prometheus学习笔记

    • 核心组件
    • 工作原理
    • 安装和配置
    • 启动 Prometheus
    • PromQL 使用
    • 数据模型
      • Exporter
      • 演示服务
      • Grafana 数据可视化
      • Prometheus 告警
    • Kubernetes学习笔记

      • K8S的介绍
      • K8S集群环境的搭建
      • K8S资源管理
      • K8S的实战入门
    • 运维
    • Prometheus学习笔记
    星途物语
    2025-01-01
    目录

    数据模型

    Prometheus 的数据模型是围绕时间序列数据构建的,旨在高效存储、查询和分析时序数

    Prometheus 的核心数据模型由以下几个主要部分组成

    • 时间序列(Time Series)
    • 标签(Labels)
    • 样本(Sample)
    • 指标(Metric)
    • Metric 类型(Metric Type)

    # 时间序列

    在 Prometheus 中,时间序列是一个逻辑上的数据集合,标识了某个具体的指标及其维度组合,由以下两部分组成

    指标名称(Metric Name):每个时间序列都有一个对应的名称,通常是描述某个特定监控目标的指标名

    标签(Labels):每个时间序列还可以附带一组键值对标签,用于进一步区分时间序列的不同维度

    假设你正在监控一个网站的 HTTP 请求

    http_requests_total{status="200", method="GET", instance="server1"} http_requests_total{status="404", method="POST", instance="server2"}

    时间序列 1:http_requests_total{status="200", method="GET", instance="server1"} 表示服务器 server1 接收到的 GET 请求,且返回状态码是 200 的 HTTP 请求总数

    时间序列 2:http_requests_total{status="404", method="POST", instance="server2"} 表示服务器 server2 接收到的 POST 请求,且返回状态码是 404 的 HTTP 请求总数

    时间序列是一个非常抽象的概念,指的是一段随时间变化的概念

    在监控系统中,时间序列就是通过时间戳记录某个指标(如请求次数、CPU 使用率等)在不同时间点的值。例如,Prometheus 通过抓取目标系统的状态(如 HTTP 请求数、CPU 使用率等),将它们以时间序列的方式存储,并随着时间推移不断更新

    # 标签

    标签是键值对形式的元数据,用于标识和区分同一个指标的不同维度

    例如,在监控 HTTP 请求时,可以通过标签区分不同的 HTTP 状态码、请求路径 或 请求方法 等

    标签是 Prometheus 数据模型的核心,它使得同一个指标能够有多个不同的维度,避免了单一指标带来的混乱

    http_requests_total{status="200", method="GET", instance="localhost:8080"} http_requests_total{status="500", method="POST", instance="localhost:8080"}

    在这个例子中,http_requests_total 是指标名称,status、method 和 instance 是标签。每个标签对给定的指标值都能唯一标识一条时间序列

    标签的作用是使你能够为同一个指标(例如 HTTP 请求总数)创建不同的时间序列,以便更加细粒度地查询和分析数据

    # 样本

    一个样本是一个时间点的数据,它由时间戳和值组成。每次数据抓取时,Prometheus 会存储一个样本,这个样本记录了指标在某个特定时间的值

    一个时间序列包含一系列的 样本(Sample),每个样本由以下部分组成

    时间戳(Timestamp):记录样本值的时间

    值(Value):该时间点的指标值

    对于 http_requests_total 指标,你可能会在 10:00:00 和 10:01:00 这两个时间点分别得到以下两个样本

    http_requests_total{status="200", method="GET", instance="server1"} 1000 1640995200 http_requests_total{status="200", method="GET", instance="server1"} 1025 1640995260

    样本 1:在时间戳 1640995200(例如 10:00:00),server1 上的 GET 请求总数是 1000

    样本 2:在时间戳 1640995260(例如 10:01:00),server1 上的 GET 请求总数是 1025

    Prometheus 会不断地在每个抓取周期内记录这些样本

    样本有时也被成为数据点,是在某个时间点处记录的精确数据

    # 指标

    指标 是用来描述某种度量(如 CPU 使用率、HTTP 请求次数、内存使用量等)的一种数据单位,指标在一段时间维度下,用名称标识了某段时间内的数据,它本身不包含数据,而是一个抽象的度量标准。例如,http_requests_total 可能表示 HTTP 请求的总数

    指标是指监控系统中的某个度量,它可以代表应用、系统、服务等的某个特定性能或状态

    每个指标都有一个唯一的名称,并且可以包含多个标签来区分不同的时间序列

    假设我们要监控网站的请求次数(http_requests_total)和响应时间(http_request_duration_seconds)

    http_requests_total{status="200", method="GET", instance="server1"} http_request_duration_seconds{status="200", method="GET", instance="server1"}

    http_requests_total:表示 HTTP 请求的总数,通常是一个 Counter 类型的指标

    http_request_duration_seconds:表示请求响应的时间,通常是一个 Gauge 或 Histogram 类型的指标

    # Metric 类型(指标的类型)

    Prometheus 支持几种不同类型的指标,每种类型适用于不同类型的数据模型和查询需求。主要的指标类型有:

    Counter(计数器):计数器是单调递增的指标,只能增加,通常用于统计事件发生的次数(如 HTTP 请求数、错误数等)

    这些值是不断累加的,表示服务器接收到的请求总数

    例子:http_requests_total{status="200", method="GET"} 5

    如果你觉得一直增加的数据没有什么用处,了解服务从开始有多少请求有什么价值么,但是请记住,每个指标都是存储了时间戳的,所以你的HTTP请求可能是10万,但是Prometheus也会记录之前某个点的值,我们可以去查询过去一分钟内的请求数,当然我们最想看到的还是请求数量的增加或者减少的速度有多块,因此,通常对于Counter指标我们都是去查看变化率,而不是查看本身的数字,PromQL内置的聚合操作和函数可以让用户对这些数据进行进一步的分析,例如:通过rate()获取HTTP请求的增长率:rate(http_requsts_total[5m]) # 获取前五分钟内的样本数据

    Gauge(仪表):仪表指标可以任意增减,通常用于表示某个度量值的当前状态,如内存使用量、CPU 使用率等

    例子:memory_usage{instance="localhost"} 512.3

    例子:cpu_usage{instance="server1"} 75.5

    这些简单的指标类型都只是为每个样本获取一个数字,但Prometheus的强大这之处在于如何让你跟踪它们,比如说我们绘制了两张图,一个是HTTP请求变化率,另一个是分配Gauge类型的实际内存,直接从图上可以看出这两个之间有一种关联性,当请求出现峰值的时候,内存的使用也会出现峰值,但我们仔细观察也会发现峰值过后,内存的使用量并没有恢复到峰值前的水平,整体它在逐渐增加,这表明程序很有可能存在内存泄漏的问题,通过这些简单的指标可以帮助我们找到这些可能存在的问题

    对于Gauge类型的监控指标,通过PromQL内置函数delta()可以获取样本在一段时间范围内的变化情况,例如:计算CPU在两个小时内的差异:delta(cpu_temp_celsius{host="zeus"}[2h])

    可以直接使用 predict_linear()对数据的变化趋势进行预测,例如,预测系统磁盘在4小时后剩余情况: predict_linear(node_filesystem_free_bytes[1h], 4 * 3600)

    Histogram(历史分布):Histogram 用于记录数据分布情况。它按不同的区间将数据进行统计,例如,HTTP 响应时间分布

    例子:http_request_duration_seconds_bucket{le="0.5", method="GET"} 300

    例子:http_request_duration_seconds_bucket{le="1.0", method="GET"} 450

    例子:http_request_duration_seconds_bucket{le="2.0", method="GET"} 500

    这些值表示在不同响应时间区间内,满足条件的请求数量。比如,在 le="0.5" 区间内的请求数为 300,表示响应时间小于 0.5 秒的请求数量

    Summary(摘要):Summary 用于记录实时的统计信息,通常用于记录请求的响应时间等,它与 Histogram 类似,但支持动态计算百分位数

    例子:http_request_duration_seconds_sum{method="GET"} 1024.3

    例子:http_request_duration_seconds_count{method="GET"} 500

    http_request_duration_seconds_sum 表示所有请求的总响应时间,http_request_duration_seconds_count 表示请求的总数

    #Prometheus
    PromQL 使用
    Exporter

    ← PromQL 使用 Exporter→

    Theme by Vdoing | Copyright © 2025-2025 | 鄂ICP备2024086820号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式