• Prometheus API 使用介绍|收藏


    在这里插入图片描述

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

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

    01 API格式

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

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

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

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

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

    {
      "status": "success" | "error",
      "data": <data>,
    
      // Only set if status is "error". The data field may still hold
      // additional data.
      "errorType": "",
      "error": "",
    
      // Only if there were warnings while executing the request.
      // There will still be data in the data field.
      "warnings": [""]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    02 API调用

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

    即时查询

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

    GET /api/v1/query
    POST /api/v1/query
    
    • 1
    • 2

    该接口可使用如下参数进行查询,其中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"}
    
    • 1

    返回数据:

    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"            # 数据值 
                    ]
                }
            ]
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    1. 范围查询

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

    GET /api/v1/query_range
    POST /api/v1/query_range
    
    • 1
    • 2

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

    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
    
    • 1

    返回数据 :

    以下示例为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"
                        ]
                    ]
                }
            ]
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    03 获取数据

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

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

    1.安装requests库,用于url访问。

    $ pip install requests
    
    • 1
    1. 编写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('无法获取有效数据')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    脚本运行结果:

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

    结语:

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


    资源分享

    下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    GO语言框架中如何快速集成日志模块
    太速科技-基于Xilinx Kintex-7 FPGA K7 XC7K325T PCIeX8 四路光纤卡
    Mysql中事务是什么?有什么用?
    (2)达梦数据库匹配
    python 随机数生成
    JetPack--Navigation实现页面跳转
    单片机中的 _nop_() 延时以及其相关的基础扩展
    kubectl系列(三)-节点标签操作
    NOI2022 游记
    Day24_8 Java学习之线程池、网络编程及TCP通信程序
  • 原文地址:https://blog.csdn.net/wx17343624830/article/details/127650344