Prometheus的HTTP API的Go语言封装client_golang的使用

作者:李佶澳  更新时间:2019-04-30 16:30:37 +0800

  编程    prometheus    刷新

目录

说明

Prometheus/client_golang是Prometheus的一个子项目,是Prometheus的Go client library,HTTP API的实现位于子目录/api/prometheus。这里简单记录一下它的用法。

下载

用go get下载:

go get  github.com/prometheus/client_golang/api/prometheus

或者用使用Go语言项目的依赖代码管理工具下载,譬如dep:

dep init
# 执行dep ensure的时候,当前目录需要有一个.go文件,不然会提示:no dirs contained any Go code
dep ensure -add   github.com/prometheus/client_golang/api/prometheus

HTTP API

Prometheus HTTP API中介绍了Prometheus的Query接口,可以使用GET/POST的方法。

Instant queries:查询指定时间点的数值,uri为/api/v1/query,参数有三个:

query:   查询表达式(指标名等)
time:    目标时间,不指定默认为当前时间
timeout: 查询等待时间

$ curl 'http://localhost:9090/api/v1/query?query=up&time=2015-07-01T20:10:51.781Z'

Range queries: 查询指定时间范围的数值,uri为/api/v1/query_range,参数有五个:

query:   查询表达式(指标名等)
start:   开始时间
end:     结束时间
step:    间距
timeout: 查询等待时间

$ curl 'http://localhost:9090/api/v1/query_range?query=up&start=2015-07-01T20:10:30.781Z&end=2015-07-01T20:11:00.781Z&step=15s'

Querying metadata: 查询匹配label的指标在指定时间范围的数值,uri为/api/v1/series,参数有三个:

match[]: 指标筛选条件,可以设置多个,多个match是或的关系
start:   开始时间
end:     结束时间

$ curl -g 'http://localhost:9090/api/v1/series?' --data-urlencode='match[]=up' --data-urlencode='match[]=process_start_time_seconds{job="prometheus"}'

Getting label names: 获取指标名称,uri为/api/v1/labels,无参数:

$ curl 'localhost:9090/api/v1/labels'

Querying label values: 查询指定label对应的数值,无参数:

$ curl http://localhost:9090/api/v1/label/job/values

返回的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>"]
}

其中data格式因查询类型的不同而不同,有Range vectorsInstant vectorsScalarsStrings四种,见Prometheus Expression query result formats

使用

接口很简单,一个Client,一个QueryAPI,对应有两个创建函数:

▼+Client : interface
    [methods]
   -do(context.Context, *http.Request) : *http.Response, []byte, error
   -url(ep string, args map[string]string) : *url.URL

▼+QueryAPI : interface
    [methods]
   +Query(ctx context.Context, query string, ts time.Time) : model.Value, error
   +QueryRange(ctx context.Context, query string, r Range) : model.Value, error

▼ functions
   +New(cfg Config) : Client, error
   +NewQueryAPI(c Client) : QueryAPI

使用代码见:github.com/introclass/prometheus_example/client_golang

参考

  1. prometheus/client_golang
  2. Go语言项目的依赖代码管理
  3. Prometheus HTTP API
  4. Prometheus Expression query result formats

关注加微信,一般不闲聊(直接说事)

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作

友情链接:  微信公众号精选文章  发现知识星球