HPA 无法从 Prometheus / Stackdriver 适配器找到“非类型化”自定义指标

问题描述 投票:0回答:1

我们将 HPA 与 GKE 中 Java 应用程序的自定义指标结合使用。不过,我们想使用

untyped
指标。

我们做了什么

到目前为止,我们做到了:

  1. 启用托管 Prometheus
  2. 在 JVM 上安装 JMX Exporter 并将其配置为导出所需的指标
  3. 部署了用于自定义指标的 Stackdriver 适配器

然后我们创建了一些 HPA 来响应 JVM 堆使用的总内存。它起作用了,豆荚被放大和缩小:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: my-autoscale
  namespace: somenamespace
spec:
  maxReplicas: 3
  metrics:
  - pods:
      metric:
        name: prometheus.googleapis.com|jvm_memory_bytes_used|gauge
        selector:
           matchLabels:
             metric.labels.area: heap
      target:
        averageValue: 2G
        type: AverageValue
  type: Pods
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-java-app

我们想做什么

现在,我们想让它响应

java_lang_threading_threadcount
指标。根据它的描述,是
untyped
:

# HELP java_lang_threading_threadcount java.lang:name=null,type=Threading,attribute=ThreadCount
# TYPE java_lang_threading_threadcount untyped
java_lang_threading_threadcount 123.0

我们如何进行

按照 Stackdriver adatper 的文档说明,我转到 Metrics Explorer 并获取指标的全名:

因此,完全限定的指标名称是

prometheus.googleapis.com/java_lang_threading_threadcount/unknown

我将其添加到 HPA 规范并应用它:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: my-autoscale
  namespace: somenamespace
spec:
  maxReplicas: 3
  metrics:
  - pods:
      metric:
        name: prometheus.googleapis.com|java_lang_threading_threadcount|unknown
        selector:
           matchLabels:
             metric.labels.area: heap
      target:
        averageValue: 200
        type: AverageValue
    type: Pods
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-java-app

我们有什么

但是没有用:我收到了这条消息:

$ k get hpa -o yaml my-autoscale  | grep unable -A7
    message: 'the HPA was unable to compute the replica count: unable to get metric
      prometheus.googleapis.com|java_lang_threading_threadcount|unknown: unable to
      fetch metrics from custom metrics API: googleapi: Error 404: Cannot find metric(s)
      that match type = "prometheus.googleapis.com/java_lang_threading_threadcount/unknown"
      label = area label = pod. If a metric was created recently, it could take up
      to 10 minutes to become available. Please try again soon., notFound'
    reason: FailedGetPodsMetric
    status: "False"
    type: ScalingActive

问题

如果不是的话,指标的名称应该是什么

prometheus.googleapis.com/java_lang_threading_threadcount/unknown

kubernetes google-kubernetes-engine prometheus google-cloud-stackdriver hpa
1个回答
0
投票

指标的名称实际上是正确的。问题是我们忘记了在斑点中与之前的指标一起使用的指标标签!

  - pods:
      metric:
        name: prometheus.googleapis.com|java_lang_threading_threadcount|unknown
        selector:
           matchLabels:
             metric.labels.area: heap
      target:

通过删除度量标签,我们让 HPA 发挥作用。

© www.soinside.com 2019 - 2024. All rights reserved.