48小时系统班试听入口

Prometheus入门终极指南(四)别再说不会用Prometheus了!(长文更新,速速关注)

发布作者:新盟教育 发布日期:2022-01-27 浏览人数:55421人

运维实战课程

8b5a695f13e48cb3678ac10b95e06e4.png



举例




查询例子




简单的时间序列选择


返回度量指标名称是http_requests_total的所有时间序列样本数据:


http_requests_total



返回度量指标名称是http_requests_total, 标签分别是job=“apiserverhandler=”/api/comments的所有时间序列样本数据:


http_requests_total{job=“apiserver”, hanlder="/api/comments"}



返回度量指标名称是http_requests_total, 标签分别是job=“apiserverhandler=”/api/comments,且是5分钟内的所有时间序列样本数据:


http_requests_total{job=“apiserver”, handler="/api/comments"}[5m]



注意:一个范围向量表达式结果不能直接在Graph图表中,但是可以在"console"视图中展示。


使用正则表达式,你可以通过特定模式匹配标签为job的特定任务名,获取这些任务的时间序列。在下面这个例子中, 所有任务名称以server结尾。


http_requests_total{job=~“server$”}



返回度量指标名称是http_requests_total, 且http返回码不以4开头的所有时间序列数据:


http_requests_total{status!~"^4…$"}



使用函数,操作符等


返回度量指标名称http_requests_total,且过去5分钟的所有时间序列数据值速率:


rate(http_requests_total[5m])



假设度量名称是http_requests_total,且过去5分钟的所有时间序列数据的速率和,速率的维度是job


sum(rate(http_requests_total)[5m]) by (job)



如果我们有相同维度标签,我们可以使用二元操作符计算样本数据,返回值:key: value=标签列表:计算样本值


例如,下面这个表达式返回每一个实例剩余内存,单位是M, 如果不同,则需要使用ignoring(label_lists),如果多对一,则采用group_left, 如果是一对多,则采用group_right


(instance_memory_limit_byte - instant_memory_usage_bytes) / 1024 / 1024



相同表达式,求和可以采用下面表达式:


sum( instance_memory_limit_bytes - instance_memory_usage_bytes) by (app, proc) / 1024 / 1024



如果相同集群调度器任务,显示CPU使用率度量指标的话,如下所示:



instance_cpu_time_ns{app=“lion”, pro=“web”, rev=“34d0f99”, env=“prod”, job=“cluster-manager”}instance_cpu_time_ns{app=“elephant”, proc=“worker”, rev=“34d0f99”, env=“prod”, job=“cluster-manager”}instance_cpu_time_ns{app=“turtle”, proc=“api”, rev=“4d3a513”, env=“prod”, job=“cluster-manager”}
…



我们可以获取最高的3个CPU使用率,按照标签列表appproc分组:


topk(3, sum(rate(instance_cpu_time_ns[5m])) by(app, proc))



假设一个服务实例只有一个时间序列数据,那么我们通过下面表达式,可以统计出每个应用的实例数量:


count(instance_cpu_time_ns) by (app)





记录规则



定义recording rules



配置规则




Prometheus支持可以配置,然后定期执行的两种规则: recording rules(记录规则)alerting rules警告规则)。

为了在Prometheus系统中包括规则,我们需要创建一个包含规则语句的文件,并通过在Prometheus配置的rule_fields字段加载这个记录规则文件。

这些规则文件可以通过像Prometheus服务发送SIGNUP信号量,实时重载记录规则。如果所有的记录规则有正确的格式和语法,则这些变化能够生效。


语法检查规则

在没有启动Prometheus服务之前,想快速知道一个规则文件是否正确,可以通过安装和运行Prometheus的promtool命令行工具检验:


image.png



当记录规则文件是有效的,则这个检查会打印出解析到规则的文本表示,并以返回值0退出程序。


如果有任何语法错误的话,则这个命令行会打印出一个错误信息到标准输出,并以返回值1退出程序。无效的输入参数,则以返回值2退出程序。




记录规则





记录规则允许你预先计算经常需要的,或者计算复杂度高的表达式,并将结果保存为一组新的时间序列数据。


查询预计算结果通常比需要时进行计算表达式快得多。对于dashboard是非常有用的,因为dashboard需要实时刷新查询表达式的结果。


为了增加一个新记录规则,增加下面的记录规则到你的规则文件中:



[{}] =



例子:


计算每个jobhttp请求总数,保存到新的度量指标中:



job:http_inprogree_requests:sum = sum(http_inprogress_requests) by (job)



放弃老标签,写入新标签的结果时间序列数据:



new_time_series{label_to_change=“new_value”, label_to_drop=""} = old_time_series



记录规则的执行周期有Prometheus的配置文件中的evaluate_interval指定。


规则语句的右侧表达式一旦被执行,则新的时间戳key为当前时间,value为右边表达式的样本值,新的度量指标名称和标签列表为左边名称。




HTTP API访问




在Prometheus服务上/api/v1版本api是稳定版。




格式概述





这个API返回是JSON格式。每个请求成功的返回值都是以2xx开头的编码。


到达API处理的无效请求,返回一个JSON错误对象,并返回下面的错误码:


  • 400 Bad Request。当参数错误或者丢失时。


  • 422 Unprocessable Entity。当一个表达式不能被执行时。


  • 503 Service Unavailable。当查询超时或者中断时。


  • 在请求到达API之前,其他非2xx的错误码可能会被返回。


JSON返回格式如下所示:



"status": "success" | "error","data": <data>,

// 如果status是"error", 这个数据字段还会包括下面的数据"errorType": ","error": "}



输入时间戳可以被RFC3339格式或者Unix时间戳提供。输出时间戳以Unix时间戳的方式呈现。


查询参数名称可以用[]中括号重复次数。


占位符提供像http_requests_total或者http_requests_total{method=~"^GET|POST$"}的Prometheus时间序列选择器,并需要在URL中编码传输。


占位符涉及到[0-9]-[smhdwy]。例如:5m表示5分钟的持续时间。


表达式查询


查询语言表达式可以在瞬时向量或者范围向量中执行。


Instant queries(即时查询)


瞬时向量的http restful api查询:



GET /api/v1/query



URL查询参数:


  • query=: Prometheus表达式查询字符串。


  • time=:执行时间戳,可选项。


  • timeout=:执行超时时间设置,默认由-query.timeout标志设置。


如果time缺省,则用当前服务器时间表示执行时刻。


这个查询结果的data部分有下面格式:



image.png



是一个查询结果数据,依赖于这个resultType格式, 不同的结果类型,则会有不同的结果数据格式。见表达式查询结果格式。


下面例子执行了在时刻是2015-07-01T20:10:51.781Zup表达式:



image.png



范围查询


下面评估了一个范围时间的查询表达式:



GET /api/v1/query_range



URL查询参数


  • query=: Prometheus表达式查询字符串。


  • start=<rfc3339 | unix_timestamp>:开始时间戳。


  • end=:结束时间戳。


  • step=:查询时间步长,范围时间内每step秒执行一次。


下面查询结果格式的data部分:


image.png



对于占位符的格式,下面例子执行了在时刻是2015-07-01T20:10:51.781Zup表达式:


image.png



范围查询


下面评估了一个范围时间的查询表达式:



GET /api/v1/query_range



URL查询参数


  • query=: Prometheus表达式查询字符串。


  • start=:开始时间戳。


  • end=<rfc3339 | unix_timestamp>:结束时间戳。


  • step=:查询时间步长,范围时间内每step秒执行一次。


下面查询结果格式的data部分:



image.png



对于占位符的格式,下面例子评估的查询条件up,且30s范围的查询,步长是15s。



image.png



查询元数据


通过标签匹配器找到度量指标列表。


下面例子返回了度量指标列表,且不返回时间序列数据值:



GET /api/v1/series



URL查询参数:


  • match[]=:选择器是series_selector。这个参数个数必须大于等于1。


  • start=:开始时间戳。


  • end=:结束时间戳。


返回结果的data部分,是由key-value键值对的对象列表组成的。


下面这个例子返回时间序列数据,选择器是up或者process_start_time_seconds{job=“prometheus”}



image.png



查询标签值


下面这个例子,返回了带有指定标签的标签值列表。



GET /api/v1/label//values



这个返回JSON结果的data部分是带有label_name=job的值列表:



image.png



删除时间序列


下面的例子,是从Prometheus服务中删除匹配的度量指标和标签列表:



DELETE /api/v1/series



URL查询参数


match[]=删除符合series_selector匹配器的时间序列数据。参数个数必须大于等于1。


返回JSON数据中的data部分有以下的格式:



{
“numDeleted”:
}



下面的例子删除符合度量指标名称是up或者时间序列为process_start_time_seconds{job=“prometheus”}

image.png



表达式查询结果格式





表达式查询结果,在data部分的result部分中,返回下面的数据。占位符有数值样本值。


JSON不支持特殊浮点值,例如:NaN, Inf-Inf。因此样本值返回结果是字符串,不是原生的数值。


范围向量


范围向量返回的result类型是一个matrix矩阵。下面返回的结果result部分的数据格式:



image.png



瞬时向量


瞬时向量的result类型是vector。下面是result部分的数据格式:


image.png



Scalars标量


标量查询返回result类型是scalar。下面是result部分的数据格式:



[ , “” ]



字符串


字符串的result类型是string。下面是result部分的数据格式:



[ , “” ]




 推荐阅读 

>>>Linux运维零基础入门第一课 - 云计算是什么,如何定义

>>>Docker容器使用-Linux运维红帽RHCE零基础入门课

>>>Linux运维工程师年薪30w?为什么他可以我不行?行业概述

>>>红帽RHCE认证教程之shell脚本基础入门


 运维界升职加薪必备的云计算技术,你学了吗?


学完高级运维云计算课程之后,你可以:


  • 跨越90%企业的招聘硬门槛

  • 增加70%就业机会

  • 拿下BAT全国TOP100大厂敲门砖

  • 体系化得到运维技术硬实力

  • 技术大佬年薪可达30w+


 资源放送 

2021新版Linux运维高级云计算-红帽RHCE实战课程合集,扫描下方二维码即可领取!

图片4.png