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

简介: 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 同步请求类


相关文章
|
8月前
|
存储 Prometheus 监控
Prometheus 深度指南:设计理念 · PromQL · Exporter · Thanos
Prometheus 是一款开源的系统监控与报警工具,专为云原生环境设计。它采用拉取模型采集数据,内置高效的本地时序数据库(TSDB),支持丰富的指标类型和四个黄金指标(延迟、流量、错误、饱和度)。其查询语言 PromQL 功能强大,可灵活聚合和分析时间序列数据。此外,通过 Exporter 机制,Prometheus 能轻松扩展到各种系统和服务。针对大规模场景,Thanos 提供高可用解决方案,整合多 Prometheus 实例,实现全局视图和长期存储。整体架构简洁可靠,适用于动态分布式环境。
1144 10
Prometheus 深度指南:设计理念 · PromQL · Exporter · Thanos
|
9月前
|
人工智能 JSON Java
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
314 0
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
898 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
Java
Java 些许公共工具类
Java 些许公共工具类
99 1
|
缓存 前端开发 Java
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
【8月更文挑战第10天】java基础巩固,工具类的封装
109 1
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
242 8
|
存储 Prometheus Cloud Native
prometheus学习笔记之PromQL
prometheus学习笔记之PromQL
|
Prometheus 监控 Cloud Native
Prometheus 查询语言(PromQL):深入解析
【8月更文第29天】Prometheus 是一款开源的监控系统和时间序列数据库,广泛应用于各种系统的监控和告警。PromQL(Prometheus Query Language)是 Prometheus 用来查询和聚合时间序列数据的一种强大语言。本文将详细介绍 PromQL 的功能和语法,包括基本查询、向量操作、聚合函数等,并提供具体的代码示例。
1842 2
|
存储 Prometheus Cloud Native
SLS Prometheus存储问题之为什么SLS时序引擎最终选择了使用C++实现PromQL的部分算子
SLS Prometheus存储问题之为什么SLS时序引擎最终选择了使用C++实现PromQL的部分算子
|
Prometheus Cloud Native Go
解析Prometheus PromQL
解析Prometheus PromQL
192 1