Prometheus API 使用介绍

做为一位优秀的人员,往往能通过对的最大化利用来产生更多价值。而数据则是可以为我们所用的重要数据,它并不只能用于日常的监控和告警使用,也可以用于数据分析、成本管理等企业需求。

在这种场景下,需要我们从Prometheus去获取相关的数据,并对其进行处理加工。关于数据的获取方法,通常会使用Prometheus提供的来操作,本文将会对此进行讲解介绍。

01. API格式

目前,Prometheus API 的稳定版本为V1,针对该API的访问路径为 /api/v1。API支持的请求模式有GET和POST两种,当正常响应时,会返回2xx的

反之,当API调用失败时,则可能返回以下几种常见的错误提示码:

400 Bad Request 丢失或不正确时出现。
422 Unprocessable Entity 当表达无法被执行时。
503 Service Unavailiable 查询超时或中止时。

在功能上,Prometheus API 提供了丰富的接口类型,包括表达式查询、元数据查询、配置查询、规则查询等多个功能,甚至还有清理数据的接口。

当API正常响应后,将返回如下的Json数据格式。

{
"status":"success"|"error",


//Onlysetifstatusis"error".Thedatafieldmaystillhold
//additionaldata.



//Onlyiftherewerewarningswhileexecutingtherequest.
//Therewillstillbedatainthedatafield.

}

02. API调用

下面,我们将以两个样例来演示关于API的调用,方便大家理解掌握。

1. 即时查询

说明:该接口属于表达式查询,将根据表达式返回单个时间点的数据。

GET/api/v1/query
POST/api/v1/query

该接口可使用如下参数进行查询,其中time为需要获取值的时间戳,如果不填则默认返回最新的值 。

  • query=:Prometheus 表达式查询字符串。
  • timeout=: 查询超时设置,可选参数,默认将使用-query.timeout的全局参数。

示例:

获取实例”192.168.214.108″的node_load5值。

请求的参数如下:

curlhttp://localhost:9090/api/v1/query?query=node_load5{instance="192.168.214.108:9100"}

返回数据:status 字段为success,表明请求成功;data字段包括了数据的相关参数,其中value为对应的时间戳和数据值 ,也即是node_load5的值。


{
"status":"success",
"data":{
"resultType":"vector",
"result":[
{
"metric":{
"__name__":"node_load5",
"instance":"192.168.214.108:9100",
"job":"node"
},
"value":[
1666865246.993,#时间戳
"0.04"#数据值
]
}
]
}
}

2. 范围查询

说明:接口将根据表达式,返回指定时间范围内的数据。

GET/api/v1/query_range
POST/api/v1/query_range

该接口支持如下参数查询:

  • query=:Prometheus 表达式查询字符串。
  • timeout=:查询超时设置,可选参数,默认将使用-query.timeout的全局参数。

示例:

获取实例”192.168.214.108″在某段时间内node_load5的所有值。

请求的参数如下 :

curlhttp://localhost:9090/api/v1/query_range?query=node_load5{instance="192.168.214.108:9100"}&start=2022-10-28T02:10:10.000Z&end=2022-10-28T02:13:00.000Z&step=60s

返回数据 :

以下示例为3分钟范围内的表达式返回值,查询分辨率为60秒,故返回三次值。

{
"status":"success",
"data":{
"resultType":"matrix",
"result":[
{
"metric":{
"__name__":"node_load5",
"instance":"192.168.214.108:9100",
"job":"node"
},
"values":[
[
1666923010,
"0.04"
],
[
1666923070,
"0.04"
],
[
1666923130,
"0.03"
]
]
}
]
}
}

03. 获取数据

上面的curl访问方式更多是用于测试,在实际应用中,我们通常会用的方式来获取数据并进行处理。

此处以Python为例,演示关于代码调用接口的应用方法。(PS:这里需要具备一点基础)

  1. 安装requests库,用于url访问。
$pipinstallrequests
  1. 编写python脚本test_api.py。
#-*-:utf-8-*-

importrequests

#定义参数
url='http://192.168.214.108:9090'
query_api='/api/v1/query'
params='query=node_load5{instance="192.168.214.108:9100"}'
#访问prometheusAPI获取数据
res=requests.get(url+query_api,params)
metrics=res.json().get("data").get("result")
#判断结果是否为空
ifmetrics:
value=metrics[0].get('value')[1]
print('服务器192.168.214.108的node_load5值为%s'%value)
else:
print('无法获取有效数据')

脚本运行结果:

$pythontest_api.py
服务器192.168.214.108的node_load5值为0.01

结语:

本文仅展示了Prometheus API的简单应用,更多的接口使用可参考官方文献:https://prometheus.io/docs/prometheus/latest/querying/api/。

链接:https://blog.csdn.net/wx17343624830/article/details/127650344

给TA打赏
共{{data.count}}人
人已打赏
运维笔记

1563页Go语言中文文档,涵盖Go语言所有核心知识点,限时免费下载!

2023-10-10 18:32:27

运维笔记

云原生上岸大厂,这份K8s,docker,Jenkins面试核心技术重点详解你不容错过!

2023-10-10 18:32:29

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索