ITPub博客

首页 > 云计算 > 开源云工具 > 三大实例带你搞定 Prometheus API 使用

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

开源云工具 作者:Linksla 时间:2022-11-30 10:17:00 0 删除 编辑

作为一位优秀的技术人员,往往能通过对数据的最大化利用来产生更多价值。而 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/queryPOST /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_rangePOST /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/。


        来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70013542/viewspace-2925848/ ,如需转载,请注明出处,否则将追究法律责任。

        请登录后发表评论 登录
        全部评论

        注册时间:2022-02-09

        • 博文量
          416
        • 访问量
          280260