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

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
简介: 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 同步请求类


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
目录
相关文章
|
1月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
104 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
1月前
|
Java
Java 些许公共工具类
Java 些许公共工具类
14 1
|
3月前
|
缓存 前端开发 Java
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
【8月更文挑战第10天】java基础巩固,工具类的封装
26 1
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
|
3月前
|
Java
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
|
3月前
|
存储 Prometheus Cloud Native
prometheus学习笔记之PromQL
prometheus学习笔记之PromQL
|
3月前
|
Prometheus 监控 Cloud Native
Prometheus 查询语言(PromQL):深入解析
【8月更文第29天】Prometheus 是一款开源的监控系统和时间序列数据库,广泛应用于各种系统的监控和告警。PromQL(Prometheus Query Language)是 Prometheus 用来查询和聚合时间序列数据的一种强大语言。本文将详细介绍 PromQL 的功能和语法,包括基本查询、向量操作、聚合函数等,并提供具体的代码示例。
392 2
|
3月前
|
Prometheus Cloud Native Go
解析Prometheus PromQL
解析Prometheus PromQL
46 1
|
4月前
|
存储 Prometheus Cloud Native
SLS Prometheus存储问题之为什么SLS时序引擎最终选择了使用C++实现PromQL的部分算子
SLS Prometheus存储问题之为什么SLS时序引擎最终选择了使用C++实现PromQL的部分算子
|
3月前
|
存储 设计模式 安全
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
51 0
|
4月前
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
62 1