写点什么

Prometheus HTTP API 查询(三)查询元数据

用户头像
耳东@Erdong
关注
发布于: 2 小时前

本文已经收录在 Prometheus 合集 你真的会 Prometheus 查询吗?--PromQL 合集 中。


Prometheus 提供了一组 API 接口来查询关于 series 及其 label 的元数据。

通过 Label 查找 Series

个人理解,不一定对。Label 是 Metric 的一个标签,一个 Metric 的所有 Label 构成了这个 Metric 的 Series。


下面的接口会返回匹配 Label 的时间序列列表


GET /api/v1/seriesPOST /api/v1/series
复制代码


URL 查询参数如下:


  • match[]=<series_selector> : 要查询的指标的 Series,要至少提供一个match[] 参数。

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

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


在请求 API 接口时可以使用 POST 方法 并且 header 头可以使用 Content-Type: application/x-www-form-urlencoded , 当大查询中包含违反服务端 URL 字符限制时比较有用。


查询结果的数据部分由一个对象列表组成,其中包含标识每个 series 的 label 名称和 label 值,以成对的方式出现。


下面的例子会返回 upprocess_start_time_seconds{job="prometheus"} 所有匹配的 Series :


$ curl -g 'http://localhost:9090/api/v1/series?' --data-urlencode 'match[]=up' --data-urlencode 'match[]=process_start_time_seconds{job="prometheus"}'{   "status" : "success",   "data" : [      {         "__name__" : "up",         "job" : "prometheus",         "instance" : "localhost:9090"      },      {         "__name__" : "up",         "job" : "node",         "instance" : "localhost:9091"      },      {         "__name__" : "process_start_time_seconds",         "job" : "prometheus",         "instance" : "localhost:9090"      }   ]}
复制代码

获取 label 名称

这个接口会返回一个 Label 名称的列表:


GET /api/v1/labelsPOST /api/v1/labels
复制代码


URL 查询参数如下:


  • match[]=<series_selector> : 要查询的指标的 Series,可选。

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

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


这个接口最后返回的是一个 JSON 格式,是一个字符类型的 Label 名称列表。


我们来看一个例子:


$ curl 'localhost:9090/api/v1/labels'{    "status": "success",    "data": [        "__name__",        "call",        "code",        "config",        "dialer_name",        "endpoint",        "event",        "goversion",        "handler",        "instance",        "interval",        "job",        "le",        "listener_name",        "name",        "quantile",        "reason",        "role",        "scrape_job",        "slice",        "version"    ]}
复制代码

获取 label 的值

这个接口可以获取指定 Label 名称的值:


GET /api/v1/label/<label_name>/values
复制代码


URL 查询参数如下:


  • match[]=<series_selector> : 要查询的指标的 Series,可选。

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

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


这个接口最后返回的是一个 JSON 格式,是一个字符类型的 Label 名称列表。


我们来看一个例子,我们指定一个 Label 名称 job


$ curl http://localhost:9090/api/v1/label/job/values{   "status" : "success",   "data" : [      "node",      "prometheus"   ]}
复制代码

查询 Exemplar

这是一个实验性的接口,未来可能会改变,当前版本是 v2.31.0。 这个接口需要使用 --enable-feature=exemplar-storage 来进行开启,不开启是无法使用的。


Exemplars 这个接口包含 seriesLabelsexemplars 两个字段,


seriesLabels 是一个 Label 键值对的列表,列举了当前 Metric 的所有 Label。


exemplars 是列举了存储的 traceID=<jaeger-trace-id> 和他的值。


后边我们专门找个时间聊聊这些实验特性。


以下接口返回特定时间范围内有效 PromQL 查询的示例列表:


GET /api/v1/query_exemplarsPOST /api/v1/query_exemplars
复制代码


URL 查询参数如下:


  • query=<string> : Prometheus 表达式查询语句。

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

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


我们来看个例子,指定 test_exemplar_metric_total 这个 Metric 去查询


$ curl -g 'http://localhost:9090/api/v1/query_exemplars?query=test_exemplar_metric_total&start=2020-09-14T15:22:25.479Z&end=2020-09-14T15:23:25.479Z'{    "status": "success",    "data": [        {            "seriesLabels": {                "__name__": "test_exemplar_metric_total",                "instance": "localhost:8090",                "job": "prometheus",                "service": "bar"            },            "exemplars": [                {                    "labels": {                        "traceID": "EpTxMJ40fUus7aGY"                    },                    "value": "6",                    "timestamp": 1600096945.479,                }            ]        },        {            "seriesLabels": {                "__name__": "test_exemplar_metric_total",                "instance": "localhost:8090",                "job": "prometheus",                "service": "foo"            },            "exemplars": [                {                    "labels": {                        "traceID": "Olp9XHlq763ccsfa"                    },                    "value": "19",                    "timestamp": 1600096955.479,                },                {                    "labels": {                        "traceID": "hCtjygkIHwAN9vs4"                    },                    "value": "20",                    "timestamp": 1600096965.489,                },            ]        }    ]}
复制代码


发布于: 2 小时前阅读数: 4
用户头像

耳东@Erdong

关注

还未添加个人签名 2020.05.24 加入

主要研究分享运维技术,专注于监控、CICD、操作系统、云原生领域,公众号【耳东学堂】,知识星球同名,坚持原创,希望能和大家在运维路上结伴而行 邮箱:erdong@mail.erdong.site

评论

发布
暂无评论
Prometheus HTTP API 查询(三)查询元数据