Prometheus:Java调用PromQL工具类(瞬时数据查询)

目录

PostMan瞬时数据查询:Windows主机空闲内存量

请求

响应数据

Java:调用PromQL工具类(瞬时数据查询)

Prometheus返回结果反序列化

Prometheus常用PromQL常量

Java调用Prometheus  API


PostMan瞬时数据查询:Windows主机空闲内存量

请求

curl -X GET \
  'http://10.0.50.225:9090/api/v1/query?query= windows_os_physical_memory_free_bytes' \
  -H 'Postman-Token: a01350a7-d0a2-46cb-a356-ae57926d81e9' \
  -H 'cache-control: no-cache'

响应数据

{
    "status": "success",
    "data": {
        "resultType": "vector",
        "result": [
            {
                "metric": {
                    "__name__": "windows_os_physical_memory_free_bytes",
                    "instance": "10.0.50.225:9182",
                    "job": "Win-225"
                },
                "value": [
                    1599698348.272,
                    "7697670144"
                ]
            },
            {
                "metric": {
                    "__name__": "windows_os_physical_memory_free_bytes",
                    "instance": "10.0.50.236:9182",
                    "job": "Win-236"
                },
                "value": [
                    1599698348.272,
                    "14977138688"
                ]
            }
        ]
    }
}

Java:调用PromQL工具类(瞬时数据查询)

Prometheus返回结果反序列化

import lombok.Data;

/**
 * @Title: prometheus返回信息
 * @Description:
 *
 * @Copyright 2020-2021  - Powered By 研发中心
 * @author: 王延飞
 * @date: 2020/9/8 0008 17:00
 * @version V1.0
 */
@Data
public class PromResponceInfo {

    /**
     * 状态
     * 成功-- success
     */
    private String status;

    /**
     * prometheus指标属性和值
     */
    private PromDataInfo data;


}
import lombok.Data;

import java.util.List;

/**
 * @Title: prometheus指标属性和值
 * @Description:
 *
 * @Copyright 2020-2021 - Powered By 研发中心
 * @author: 王延飞
 * @date: 2020/9/8 0008 17:00
 * @version V1.0
 */
@Data
public class PromDataInfo {

    /**
     * prometheus结果类型
     * vector--瞬时向量
     * matrix--区间向量
     * scalar--标量
     * string--字符串
     */
    private String resultType;

    /**
     * prometheus指标属性和值
     */
    private List<PromResultInfo> result;
}
import lombok.Data;

/**
 * @Title: prometheus指标值
 * @Description:
 *
 * @Copyright 2020-2021 捷安高科 - Powered By 研发中心
 * @author: 王延飞
 * @date: 2020/9/8 0008 16:53
 * @version V1.0
 */
@Data
public class PromResultInfo {


    /**
     * prometheus指标属性
     */
    private PromMetricInfo metric;

    /**
     * prometheus指标值
     */
    private String[] value;

}
import lombok.Data;

/**
 * @Title: prometheus指标属性(这里只反序列化了需要的属性,用户可根据需要做增减)
 * @Description:
 *
 * @Copyright 2020-2021 - Powered By 研发中心
 * @author: 王延飞
 * @date: 2020/9/8 0008 16:53
 * @version V1.0
 */
@Data
public class PromMetricInfo {

    /**
     * prometheus指标名称
     */
    private String __name__;

    /**
     * prometheus实例名称
     */
    private String instance;

    /**
     * prometheus任务名称
     */
    private String job;

}

Prometheus常用PromQL常量

/**
 * @Title: prometheus常量信息
 * @Description:
 *
 * @Copyright 2020-2021  - Powered By 研发中心
 * @author: 王延飞
 * @date: 2020/9/9 0009 9:50
 * @version V1.0
 */
public class PromConstants {
    /**
     * prometheus-查询SUCCESS
     */
    public static final String SUCCESS = "success";


    /**
     * prometheus-查询参数
     */
    public static final String QUERY = "query";

    /**
     *  Windows主机操作系统信息
     */
    public static final String WINDOWS_OS_INFO = "windows_os_info";

    /**
     *  Windows主机空闲内存量(单位:字节,1GB=1024*1024*1024Bytes)
     */
    public static final String WINDOWS_OS_PHYSICAL_MEMORY_FREE_BYTES = "windows_os_physical_memory_free_bytes";

    /**
     *  Windows主机空闲CPU量(单位:GHZ)
     */
    public static final String WINDOWS_CPU_TIME_TOTAL_IDLE = "sum by (instance) (irate(windows_cpu_time_total{mode=\"idle\"}[1m]))";

    /**
     * Windows主机CPU量--按模式(单位:GHZ)
     */
    // public static final String WINDOWS_CPU_TIME_TOTAL_MODE = "sum by (mode) (irate(windows_cpu_time_total[1m]))";


    /**
     * Windows主机空闲GPU量(单位:GB)
     */
    public static final String WINDOWS_GPU_MEMORY_FREE = "memory_free";


}

Java调用Prometheus  API

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.Objects;

/**
 * @Title: prometheus工具类
 * @Description:
 *
 * @Copyright 2020-2021 捷安高科 - Powered By 研发中心
 * @author: 王延飞
 * @date: 2020/9/9 0009 11:20
 * @version V1.0
 */
public class PromInfoUtils {
    private static final Logger log = LoggerFactory.getLogger(PromInfoUtils.class);

    /**
     * @Title: Windows主机操信息
     * @MethodName: getWindowsOsInfo
     * @param promURL
     * @param promQL
     * @Exception
     * @Description:
     *
     * @author: 王延飞
     * @date: 2020/9/9 0009 11:21
     */
    public static List<PromResultInfo> getWindowsInfo(String promURL, String promQL) {

        log.info("【Windows主机信息】,请求地址:{},请求QL:{}", promURL, promQL);
        JSONObject param = new JSONObject();
        param.put(PromConstants.QUERY, promQL);
        String http = null;
        try {
            http = RestTemplateUtils.getHttp(promURL, param, 10000, 10000, 1);
        } catch (Exception e) {
            log.error("【Windows主机信息】异常,请求地址:{},请求QL:{},异常信息:{}", promURL, promQL, e);
        }
        PromResponceInfo responceInfo = JSON.parseObject(http, PromResponceInfo.class);
        log.info("【Windows主机信息】,请求地址:{},请求QL:{},返回信息:{}", promURL, promQL, responceInfo);
        if (Objects.isNull(responceInfo)) {
            return null;
        }
        String status = responceInfo.getStatus();
        if (StringUtils.isBlank(status)
                || !PromConstants.SUCCESS.equals(status)
        ) {
            return null;
        }
        List<PromResultInfo> result = responceInfo.getData().getResult();
        return result;
    }


    public static void main(String[] args) {
      //  List<PromResultInfo> windowsOsInfo = getWindowsInfo("http://10.0.50.225:9090/api/v1/query", PromConstants.WINDOWS_OS_INFO);
     List<PromResultInfo> windowsOsInfo = getWindowsInfo("http://10.0.50.225:9090/api/v1/query", PromConstants.WINDOWS_GPU_MEMORY_FREE);

     System.out.println(windowsOsInfo);

    }

}

其中RestTemplateUtils,参考

RestTemplate:Spring 封装的 HTTP 同步请求类

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

琦彦

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值