prometheus api调用(代码+curl)

只有干货哦!

目录

支持的api列表

代码调用

k8s集群下的prom

非容器部署的prom调用

curl调用

示例1:查询数据

示例2:热加载配置

示例3:主动删除数据


支持的api列表

源码位置:github.com\prometheus\client_golang@v1.11.0\api\prometheus\v1\api.go

代码调用

	"github.com/prometheus/client_golang/api"
	Pro "github.com/prometheus/client_golang/api/prometheus/v1"

go get  -t github.com/prometheus/client_golang/prometheus

k8s集群下的prom

获取平台已部署的prometheus的client

var systemPublicEndpoint api.Client

// 连接prometheus,无多集群管理时无需传入集群ID
func ConnectPro(clusterID string) api.Client {
	ns := "System"     //部署在哪个命名空间
	name := "prometheus:prometheus-server"    //prometheus-server 组件地址(对应k8s集群中prometheus应用组件的id)
	if nil != systemPublicEndpoint {
		return systemPublicEndpoint
	}
	cli, _ := GetPrometheusPublicCli(clusterID, ns, name)
	systemPublicEndpoint = cli
	return cli
}


func GetPrometheusPublicCli(clusterID, namespace, name string) (api.Client, error) {
    //省略获取普罗米修斯server暴露的访问地址逻辑,获取地址addr后组成Config传入
        cfg := api.Config{Address: "http://" + addr}    //地址示例:http://192.168.104.65:30870
	c, err := api.NewClient(cfg)
	return c, err
}

以节点cpu的平均使用率为例调api查询:

    c1 := ConnectPro(s.Get(consts.KeyCluster).(string))
        //mon.Start与mon.End为起始、终止时间,mon为前端传入的对象
	sta, _ := strconv.Atoi(mon.Start)
	en, _ := strconv.Atoi(mon.End)
	rat := en - sta
	rat = rat + 60
	if rat < 120 {
		rat = 120
	}
    //分子/分母=比率,mon.Node为节点名称
	q1 := "sum(rate (container_cpu_usage_seconds_total{id='/',kubernetes_io_hostname=~'" + mon.Node + "$'" + "}[" + strconv.Itoa(rat) + "s]))"
	q2 := "/sum (machine_cpu_cores{kubernetes_io_hostname=~'" + mon.Node + "$'})*100"
	q := q1 + q2
	c, err := pro.NewAPI(c1).Query(context.Background(), q, mon.End)
	if err != nil {
		errMsg := fmt.Sprint("failed to Query NodeCpuRate:", err.Error())
		logError(errMsg)
		return c,err
	}
	return c,nil

返回的数据:

{"message":"","code":200,"data":[{"metric":{},"value":[1572431847,"15.910989253603638"]}]}

[{"metric":{},"value":[1572431847,"15.910989253603638"]}]

即15.9%

非容器部署的prom调用

获取client:

func GetPromCli() (api.Client, error) {
	addr := "172.18.1.118:9090"
	cfg := api.Config{Address: "http://" + addr}
	c, err := api.NewClient(cfg) 
	return c, err
}

筛选全部实例,以节点cpu使用率查询:

func NodeCpuUseAllNode() (model.Value, error) { //
	client, err := GetPromCli()
	if err != nil {
		fmt.Println("get prom cli err:", err.Error())
		return nil, err
	}
	fmt.Println("get prom server success!")
	q := "(1 - avg(rate(node_cpu_seconds_total{instance=~\".*\",mode=\"idle\"}[2m])) by (instance)) * 100"
	fmt.Println("now:", time.Now().Unix())
	v, warnings, err := pro.NewAPI(client).Query(context.Background(), q, time.Unix(time.Now().Unix(), 0)) // time.Unix(time.Now().Unix(), 0)
	if err != nil {
		fmt.Println(fmt.Sprintf("exec NodeCpuUse err:%v, warnings:%v", err.Error(), warnings))
		return nil, err
	}
	fmt.Println(fmt.Sprintf("NodeCpuUseAllNode result :%+v", v.String())) //
	fmt.Println("NodeCpuUseAllNode type :", v.Type())
	fmt.Println("NodeCpuUseAllNode warnings :", warnings)
	return v, nil
}

返回数据:

[
    {
        "metric": {
            "instance": "172.18.1.110:9100"
        },
        "value": [
            1572449707,
            "8.597826086916028"
        ]
    },
    {
        "metric": {
            "instance": "172.18.1.118:9100"
        },
        "value": [
            1572449707,
            "1.801086956452902"
        ]
    }
]

更多api都有方法支持:

curl调用

示例1:查询数据

curl  'http://localhost:9090/api/v1/query_range?query=up&start=2021-07-21T09:37:30.781Z&end=2021-07-21T09:38:00.781Z&step=15s'

返回:

{
    "status": "success",
    "data": {
        "resultType": "matrix",
        "result": [
            {
                "metric": {
                    "__name__": "up",
                    "instance": "172.18.1.110:9100",
                    "job": "nodes_list",
                    "node_group": "nodes_exporter_02"
                },
                "values": [
                    [
                        1626860250.781,
                        "0"
                    ],
                    [
                        1626860265.781,
                        "0"
                    ]
                ]
            },
            {
                "metric": {
                    "__name__": "up",
                    "instance": "172.18.1.118:9100",
                    "job": "nodes_list",
                    "node_group": "nodes_exporter_02"
                },
                "values": [
                    [
                        1626860250.781,
                        "1"
                    ],
                    [
                        1626860265.781,
                        "1"
                    ]
                ]
            }
        ]
    }
}

1就是active,0就是down掉了

示例2:热加载配置

curl -X POST http://localhost:9090/-/reload
// 该方式需要启动server时增加--web.enable-lifecycle参数

执行后在不重启server的情况下自动使用最新配置:

示例3:主动删除数据

curl -X POST -g 'http://127.0.0.1:9090/api/v1/admin/tsdb/delete_series?match[]=node_cpu_seconds_total{mode="idle"}&start=2021-07-10T16:10:00Z&end=2021-07-12T16:20:00Z'

 delete_series删除并不会立即释放空间,如果要立即释放空间则需要使用clean_tombstones:

curl -XPOST http://localhost:9090/api/v1/admin/tsdb/clean_tombstones

更多api可见官网:HTTP API | Prometheus

注意:大多数api的调用都需要开启--web.enable-admin-api参数(启动时加上)

要从Prometheus API导出监控数据,可以使用Python中的Prometheus客户端库。这些库使得调用Prometheus API变得更加简单。 以下是使用Python调用Prometheus API导出监控数据的基本步骤: 1. 安装Prometheus客户端库:使用pip安装Prometheus客户端库。例如,如果使用的是Prometheus Python客户端库,则可以使用以下命令进行安装: ``` pip install prometheus_client ``` 2. 导入所需的库:导入所需的库(例如,prometheus_client和requests)。 ```python from prometheus_client import CollectorRegistry, Gauge, push_to_gateway import requests ``` 3. 创建一个CollectorRegistry对象:创建一个CollectorRegistry对象,用于存储指标。 ```python registry = CollectorRegistry() ``` 4. 创建一个Gauge对象:使用Gauge对象创建一个指标(例如,cpu_usage)。 ```python cpu_usage = Gauge('cpu_usage', 'CPU usage percentage', registry=registry) ``` 5. 从Prometheus API获取数据:使用requests库从Prometheus API获取指标数据。 ```python response = requests.get('http://prometheus-server/api/v1/query', params={'query': 'cpu_usage'}) data = response.json() cpu_usage_value = data['data']['result'][0]['value'][1] ``` 6. 将数据推送到Prometheus Pushgateway:使用push_to_gateway方法将指标数据推送到Prometheus Pushgateway。 ```python push_to_gateway('prometheus-pushgateway:9091', job='my_job', registry=registry) ``` 这些步骤可以根据特定的需求进行修改和调整,以获取所需的监控数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ProblemTerminator

您的鼓励将是作者最大的动力哦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值