博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自从上了 Prometheus 监控,睡觉真香!
阅读量:1958 次
发布时间:2019-04-27

本文共 2395 字,大约阅读时间需要 7 分钟。

点击关注公众号,Java干货及时送达

对很多人来说,未知、不确定、不在掌控的东西,会有潜意识的逃避。

马云说:“虽然阿里巴巴是全球最大的零售平台,但阿里不是零售公司,是一家数据公司”。

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;

通过以上示例可以看出,在常用查询和统计方面,日常监控多用于根据监控的维度进行查询与时间进行组合查询。另外,关注公众号Java技术栈,在后台回复:面试,可以获取我整理的最新Java系列面试题和答案。

如果监控100个服务,平均每个服务部署10个实例,每个服务有20个API,4个方法,30秒收集一次数据,保留60天。那么总数据条数为:100(服务) 10(实例) 20(API) 4(方法) 86400(1天秒数)* 60(天) / 30(秒)= 138.24 亿条数据,写入、存储、查询如此量级的数据是不可能在Mysql类的关系数据库上完成的。

因此 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

关注Java技术栈看更多干货

戳原文,获取精选面试题!

转载地址:http://atjsf.baihongyu.com/

你可能感兴趣的文章
如何在MAC机器中实现移动设备WiFI上网(没有专门的无线路由器的情况)
查看>>
一款非常实用的在线代码分享站点
查看>>
教你一分钟制作自己的电子书(视频)
查看>>
iPad用户使用Mac和Windows应用软件-记Parallels Access使用体验
查看>>
用ipad维护Linux服务器
查看>>
如何用手机维护Mysql数据库
查看>>
完成《Java编程入门》初稿
查看>>
Windows Server 2012下安装Hyper-V虚拟机
查看>>
MacOSX和Windows 8的完美融合
查看>>
Iphone5S 体验(视频+截图)
查看>>
python 多进程之进程池的操作
查看>>
flask学习之 pipenv 虚拟环境配置 在配置中出现错误“cmd“不是内部或外部命令,也不是可运行的程序或批处理文件””的解决方案
查看>>
flask整理之 flask程序中的debug模式
查看>>
如何和大妈解释区块链,让他们理解区块链
查看>>
比特币,山寨币,到底谁占有主导地位
查看>>
比特币,父母这一辈能接受吗?
查看>>
解释区块链钱包的意思
查看>>
让老百姓知道什么是比特币,只需要10分钟
查看>>
为什么要反对比特币,这不代表是空气币
查看>>
5G技术如何运用在数字资产方面
查看>>