首页 > 其他分享 >三大实例带你搞定 Prometheus API 使用

三大实例带你搞定 Prometheus API 使用

时间:2022-11-30 10:34:16浏览次数:47  
标签:API node 192.168 查询 Prometheus api query 三大

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

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

1. 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 数据格式。

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

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

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


// Only set if status is "error". The data field may still hold
// additional data.
"errorType": "<string>",
"error": "<string>",


// Only if there were warnings while executing the request.
// There will still be data in the data field.
"warnings": ["<string>"]
}

2. API调用

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

1. 即时查询

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

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

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

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

示例:

获取实例”192.168.214.108”的node_load5值。

请求的参数如下:

curl http://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 表达式查询字符串。
  • start=:开始时间戳。
  • end=:结束时间戳。
  • step=:查询分辨率步长。
  • timeout=:查询超时设置,可选参数,默认将使用-query.timeout的全局参数。

示例:

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

请求的参数如下 :

curl http://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"
]
]
}
]
}
}

3. 获取数据

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

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

安装 requests 库,用于 url 访问。

$ pip install requests

编写python脚本 ​​test_api.py​​。​

# -*- coding: utf-8 -*-


import requests


# 定义参数
url = 'http://192.168.214.108:9090'
query_api = '/api/v1/query'
params = 'query=node_load5{instance="192.168.214.108:9100"}'


# 访问 prometheus API 获取数据
res = requests.get(url + query_api, params)
metrics = res.json().get("data").get("result")


# 判断结果是否为空
if metrics:
value = metrics[0].get('value')[1]
print('服务器 192.168.214.108的node_load5值为 %s' % value)
else:
print('无法获取有效数据')

脚本运行结果:

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

结语

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

标签:API,node,192.168,查询,Prometheus,api,query,三大
From: https://blog.51cto.com/u_15576159/5897733

相关文章

  • 跨平台.NET应用UI组件DevExpress XAF v22.1 - 增强Web API Service
    DevExpressXAF是一款强大的现代应用程序框架,允许同时开发ASP.NET和WinForms。DevExpressXAF采用模块化设计,开发人员可以选择内建模块,也可以自行创建,从而以更快的速度和比......
  • 如何用 Prometheus Operator 监控 K8s 集群外服务?
    前言前面系列文章中:PrometheusOperator与kube-prometheus之一-简介-东风微鸣技术博客(ewhisper.cn)监控Kubernetes集群证书过期时间的三种方案-东风微鸣......
  • ISAPI和CGI限制中没有ASP.NET v4.0
    文章来源:http://t.zoukankan.com/heyangyi-p-8515812.html[服务器搭建]ISAPI和CGI限制中没有ASP.NETv4.0解决方式:1.确保安装IIS时确实安装了ASP.NET,如果没有的话,勾上重......
  • 怎么给IIS添加ISAPI和CGI限制功能?
    https://www.aiufida.com/jcufida/616.html在IIS中添加ISAPI和CGI限制功能是非常必要的,因为如果在IIS中不添加添加ISAPI和CGI限制功能可能会引起软件运行过程中报错,或者直......
  • 使用 Hypercorn HTTP/2 ASGI 部署 FastAPI
    AnotherASGIwebserverthatsupportsHTTP/2andHTTP/3specifications我已经介绍了很多关于FastAPI的教程,其中服务器部署了Uvicorn,一个快速的ASGIWeb......
  • css三大特性——层叠性、继承性、优先级
    1.层叠性:就近原则,执行第二个div操作。2.继承性:p标签属于div,在div中写,p标签也会执行。3.优先级:继承 body{  }元素 div{ }、p {  }类选择器  .text{  }......
  • .NET6之MiniAPI(二十四):用Polly重试
    为了保障系统的稳定和安全,在调用三方服务时,可以增加重试和熔断。重试是调用一次失败后再试几试,避免下游服务一次闪断,就把整个链路终止;熔断是为了防止太多的次数的无效访......
  • .NET6之MiniAPI(二十五):Dapper
    注:如果你使用Dapper一段时间了,这篇你可以跳过去了。在第十二篇中,我们聊过官方的ORM——EntityFramework,它可以把SQL细节都隐藏,这对于一些标准化的关系数据库项目非......
  • .NET6之MiniAPI(二十四):用Polly重试
    为了保障系统的稳定和安全,在调用三方服务时,可以增加重试和熔断。重试是调用一次失败后再试几试,避免下游服务一次闪断,就把整个链路终止;熔断是为了防止太多的次数的无效......
  • .NET6之MiniAPI(二十四):用Polly重试
    为了保障系统的稳定和安全,在调用三方服务时,可以增加重试和熔断。重试是调用一次失败后再试几试,避免下游服务一次闪断,就把整个链路终止;熔断是为了防止太多的次数的无效......