点击上方蓝色“方志朋”,选择“设为星标”

回复“666”获取独家整理的学习资料!

对很多人来说,未知、不确定、不在掌控的东西,会有潜意识的逃避。当我第一次接触 Prometheus 的时候也有类似的感觉。对初学者来说, Prometheus 包含的概念太多了,门槛也太高了。

概念:Instance、Job、Metric、Metric Name、Metric Label、Metric Value、Metric Type(Counter、Gauge、Histogram、Summary)、DataType(Instant Vector、Range Vector、Scalar、String)、Operator、Function

马云说:“虽然阿里巴巴是全球最大的零售平台,但阿里不是零售公司,是一家数据公司”。Prometheus 也是一样,本质来说是一个基于数据的监控系统。

日常监控

假设需要监控 WebServerA 每个API的请求量为例,需要监控的维度包括:服务名(job)、实例IP(instance)、API名(handler)、方法(method)、返回码(code)、请求量(value)。

如果以SQL为例,演示常见的查询操作:

查询 method=put 且 code=200 的请求量(红框)

SELECT * from http_requests_total WHERE code=”200” AND method=”put” AND created_at BETWEEN 1495435700 AND 1495435710;

查询 handler=prometheus 且 method=post 的请求量(绿框)

SELECT * from http_requests_total WHERE handler=”prometheus” AND method=”post” AND created_at BETWEEN 1495435700 AND 1495435710;

查询 instance=10.59.8.110 且 handler 以 query 开头 的请求量(绿框)

SELECT * from http_requests_total WHERE handler=”query” AND instance=”10.59.8.110” AND created_at BETWEEN 1495435700 AND 1495435710;

通过以上示例可以看出,在常用查询和统计方面,日常监控多用于根据监控的维度进行查询与时间进行组合查询。如果监控100个服务,平均每个服务部署10个实例,每个服务有20个API,4个方法,30秒收集一次数据,保留60天。那么总数据条数为:100(服务) 10(实例) 20(API) 4(方法) 86400(1天秒数)* 60(天) / 30(秒)= 138.24 亿条数据,写入、存储、查询如此量级的数据是不可能在Mysql类的关系数据库上完成的。因此 Prometheus 使用 TSDB 作为 存储引擎

存储引擎

TSDB 作为 Prometheus 的存储引擎完美契合了监控数据的应用场景

  • 存储的数据量级十分庞大

  • 大部分时间都是写入操作

  • 写入操作几乎是顺序添加,大多数时候数据到达后都以时间排序

  • 写操作很少写入很久之前的数据,也很少更新数据。大多数情况在数据被采集到数秒或者数分钟后就会被写入数据库

  • 删除操作一般为区块删除,选定开始的历史时间并指定后续的区块。很少单独删除某个时间或者分开的随机时间的数据

  • 基本数据大,一般超过内存大小。一般选取的只是其一小部分且没有规律,缓存几乎不起任何作用

  • 读操作是十分典型的升序或者降序的顺序读

  • 高并发的读操作十分常见

那么 TSDB 是怎么实现以上功能的呢?


"labels": [{"latency":        "500"
}]
"samples":[{"timestamp": 1473305798,"value": 0.9
}]

原始数据分为两部分 label, samples。前者记录监控的维度(标签:标签值),指标名称和标签的可选键值对唯一确定一条时间序列(使用 series_id 代表);后者包含包含了时间戳(timestamp)和指标值(value)。

series
^
│. . . . . . . . . . . .   server{latency="500"}
│. . . . . . . . . . . .   server{latency="300"}
│. . . . . . . . . .   .   server{}
│. . . . . . . . . . . .
v
<-------- time ---------->

TSDB 使用 timeseries:doc:: 为 key 存储 value。为了加速常见查询查询操作:label 和 时间范围结合。TSDB 额外构建了三种索引:Series, Label Index 和 Time Index。

以标签 latency 为例:

Series

存储两部分数据。一部分是按照字典序的排列的所有标签键值对序列(series);另外一部分是时间线到数据文件的索引,按照时间窗口切割存储数据块记录的具体位置信息,因此在查询时可以快速跳过大量非查询窗口的记录数据

Label Index

每对 label 为会以 index:label: 为 key,存储该标签所有值的列表,并通过引用指向 Series 该值的起始位置。

Time Index

数据会以 index:timeseries:: 为 key,指向对应时间段的数据文件

数据计算

强大的存储引擎为数据计算提供了完美的助力,使得 Prometheus 与其他监控服务完全不同。Prometheus 可以查询出不同的数据序列,然后再加上基础的运算符,以及强大的函数,就可以执行 metric series 的矩阵运算(见下图)。

如此,Promtheus体系的能力不弱于监控界的“数据仓库”+“计算平台”。因此,在大数据的开始在业界得到应用,就能明白,这就是监控未来的方向。

一次计算,处处查询

当然,如此强大的计算能力,消耗的资源也是挺恐怖的。因此,查询预计算结果通常比每次需要原始表达式都要快得多,尤其是在仪表盘和告警规则的适用场景中,仪表盘每次刷新都需要重复查询相同的表达式,告警规则每次运算也是如此。

因此,Prometheus提供了 Recoding rules,可以预先计算经常需要或者计算量大的表达式,并将其结果保存为一组新的时间序列, 达到一次计算,多次查询的目的。

来源 | https://www.cyningsun.com/02-22-2020/hidden-secret-to-understanding-prometheus.html

热门内容:
  • 聊聊订单系统的设计?

  • 讨论:Service层需要接口吗?

  • 你还在认为 count(1) 比 count(*) 效率高?

  • 写了个牛逼的日志切面,甩锅更方便了!

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡

自从上线了 Prometheus 监控告警,真香!相关推荐

  1. 服务器运维监控指标,运维体系~指标监控~Prometheus监控告警与日志

    一 Prometheus 入门 1.1 入门介绍 运维体系~指标监控 先来一张图,说明一下Prometheus监控相关的软件和知识点. 1: 首先要安装:Prometheus, 负责收集各种监控指标, ...

  2. prometheus监控+告警

    1 开始安装前的准备 1.1 修改主机名 1.2 关闭防火墙 1.3 关闭seliunx 1.4 关闭防火墙 1.5 下载阿里云的yum源 2 下载所用到的包 2.1 安装 node_porter 2 ...

  3. prometheus监控告警功能

    prometheus监控K8S 监控告警功能 alertmanager邮箱告警配置 首先开通SMTP服务,QQ邮箱:设置–帐号–开通POP3/SMTP服务,记住生成的密码(其它邮箱同理) 编辑prom ...

  4. Prometheus监控告警

    监控告警-Prometheus 第一章:概述 本章将介绍监控告警的一些基本概念. 1.1 什么是监控告警? 监控是什么? 说白了就是用一种形式去盯着.观察服务器,把服务器的各种行为表现都显示出来,用以 ...

  5. Prometheus监控告警规则

    Prometheus监控MongoDB报警规则.MySQL报警规则.Nginx报警规则.Redis报警规则. MongoDB报警规则 报警名称 表达式 采集数据时间(分钟) 报警触发条件 Mongod ...

  6. Prometheus监控告警搭建(一)

    一.监控组件 监控需要的组件 alertmanager-0.21.0.linux-amd64.tar.gzgrafana-7.4.0.linux-amd64.tar.gzmysqld_exporter ...

  7. prometheus 监控告警安装与设置

    1.什么是Prometheus? Prometheus (普罗米修斯)是由 SoundCloud开发的开源监控报警系统和时序列数据库 . 2.Prometheus的特点 多维度数据模型. 灵活的查询语 ...

  8. 监控神器:Prometheus 轻松入门,真香!

    点击关注公众号,实用技术文章及时了解 导语 :Prometheus是一个开源的完整监控解决方案,本文将从指标抓取到查询及可视化展示,以及最后的监控告警,对Prometheus做一个基本的认识. 一.简 ...

  9. gpio引脚介绍 树莓派3b_使用微创联合M5S空气检测仪、树莓派3b+、prometheus、grafana实现空气质量持续监控告警WEB可视化...

    1.简介 使用微创联合M5S空气检测仪.树莓派3b+.prometheus.grafana实现空气质量持续监控告警WEB可视化 grafana dashboard效果: 2.背景 2.1 需求: 1. ...

最新文章

  1. 刘知远:近年来开源的算法代码、工具包列表
  2. lnmp的搭建及php加速
  3. python鸢尾花数据集聚类_R语言鸢尾花iris数据集的层次聚类分析
  4. windows10设置开机自启动
  5. AngularJs中,如何在ng-repeat完成之后,执行Js脚本
  6. 东财网络学校计算机统考真题,东北财经大学网络教育学院高中起点计算机基础入学测试模拟题(一)...
  7. mysql 超时_为MySQL设置查询超时
  8. WebComponent魔法堂:深究Custom Element 之 从过去看现在
  9. 智慧城市数字孪生IOC系统
  10. 蝶式套利(butterfly spread)
  11. 解决方案:Win C++ mingw编译器出现 不支持的16位程序问题
  12. Rockchip RK3588 kernel dts解析之regulator-fixed
  13. java中使用poi导出ppt(图片和表格)
  14. iOS常用功能 - 根据链接生成二维码图片
  15. 门店私域流量运营怎么做?
  16. 三极管概念工作原理及其应用
  17. python 学习笔记18 GFPGAN人脸(图片)修复
  18. CIC 滤波器——不同长度的5级CIC滤波器的频谱特性
  19. 新手引导功能的四种姿势
  20. 【阿里云】解析与配置CNAME

热门文章

  1. Linux环境下命令行截图【转】
  2. java-方法。(新手)
  3. Hadoop虚拟机的jdk版本和本地eclipse的版本不一致怎么办
  4. objectdatasource中delete的尴尬。
  5. 青少年编程竞赛交流群周报(第041周)
  6. 数据结构与算法:15 树
  7. 年仅 16 岁的黑客少年,竟是搅乱 IT 巨头的幕后主使?
  8. 数字时代企业迎变局,如何让增长变简单?
  9. 10年IT老兵给新人程序员的几点建议
  10. 一张图,看编程语言十年热度变化