【问题标题】:How to query the kubelet metrics API in Java?如何在 Java 中查询 kubelet 指标 API?
【发布时间】:2021-08-20 11:46:59
【问题描述】:

使用 Java 查询 prometheus kubelet 指标 API 的正确方法是什么,特别是 PVC 使用指标?我可以看到有一个 API 可以通过自动缩放器获取一些指标,但是我的集群没有自动缩放器,所以这会返回一个空列表:

AutoscalingV2beta2Api autoscalingV2beta2Api = new AutoscalingV2beta2Api(apiClient);
var autoscalers = autoscalingV2beta2Api
    .listHorizontalPodAutoscalerForAllNamespaces(null, null, null, null, null, null, null, null, null)
    .getItems();

作为参考,我认为这是我需要获取的:https://stackoverflow.com/a/56870054/18437 我不热衷于使用 kubectl -n <namespace> exec <pod-name> df 方法,因为那样我需要将 pod 卷挂载回我已经通过 K8s API 获取的卷声明列表。

谢谢!

【问题讨论】:

    标签: java kubernetes prometheus


    【解决方案1】:

    我最终只是使用 Spring 的 RestTemplate 直接查询 prometheus。我只针对开发集群工作,所以我只是利用 Len 安装的 prometheus,这意味着端点类似于:http://prometheus.lens-metrics:9090

    这是他们的查询,我在下面重复使用:https://github.com/lensapp/lens/blob/652319ac89cd30ace570539cb74be081da24781d/src/main/prometheus/lens.ts#L122

    String query = String
        .format(
            "sum(kubelet_volume_stats_used_bytes{persistentvolumeclaim=\"%s\",namespace=\"%s\"}) by (persistentvolumeclaim, namespace)",
            pvc.getMetadata().getName(),
            pvc.getMetadata().getNamespace());
    
    var response = restTemplateBuilder.build().getForEntity(prometheusEndpoint + "/api/v1/query?query={query}", String.class, query);
    String json = response.getBody();
    
    // E.g. {"status":"success","data":{"resultType":"vector","result":[{"metric":{"namespace":"luke",
    //       "persistentvolumeclaim":"elasticsearch-data-es-ap-southeast-2c-0"},"value":[1622781271.612,"76865536"]}]}}
    long bytesUsed = JsonPath.parse(json).read("data.result[0].value[1]", Long.class);
    

    【讨论】:

      猜你喜欢
      • 2020-09-25
      • 2017-10-24
      • 2022-01-02
      • 2022-10-24
      • 2023-03-27
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      相关资源
      最近更新 更多