无法从 prometheus-adapter 检索自定义指标

Posted

技术标签:

【中文标题】无法从 prometheus-adapter 检索自定义指标【英文标题】:Unable to retrieve custom metrics from prometheus-adapter 【发布时间】:2020-08-27 04:21:00 【问题描述】:

我正在尝试使用 HPA + 自定义指标扩展在我的树莓派 kubernetes 集群上运行的一个应用程序 pod,但遇到了几个问题,尽管阅读了 https://github.com/DirectXMan12/k8s-prometheus-adapter 上的文档并在过去 2 天进行了故障排除,我我仍然难以理解为什么会发生一些问题。

首先,我构建了一个与 ARM 兼容的 k8s-prometheus-adapter 映像并使用 helm 安装它。我可以通过查看 pod 日志来确认它是否正常运行。

我还设置了一个脚本,将树莓派温度发送到 pushgateway,我可以通过这个 Prometheus 查询node_temp 进行查询,它将返回以下系列

node_tempjob="kube4"  42
node_tempjob="kube1"  44
node_tempjob="kube2"  39
node_tempjob="kube3"  40  

现在我希望能够使用上述温度值作为实验来扩展我的一个应用程序 pod,以更好地了解它是如何工作的。

下面是我的 k8s-prometheus-adapter helm values.yml 文件

image:
  repository: jaanhio/k8s-prometheus-adapter-arm
  tag: latest
logLevel: 7
prometheus:
  url: http://10.17.0.12
rules:
  default: false
  custom:
  - seriesQuery: 'etcd_object_counts'
    resources:
      template: <<.Resource>>
    name:
      as: "etcd_object"
    metricsQuery: count(etcd_object_counts)
  - seriesQuery: 'node_temp'
    resources:
      template: <<.Resource>>
    name:
      as: "node_temp"
    metricsQuery: count(node_temp)

通过 helm 安装后,我运行 kubectl get apiservices 并可以看到 v1beta1.custom.metrics.k8s.io 列出。

然后我运行kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1 | jq 并得到以下结果


  "kind": "APIResourceList",
  "apiVersion": "v1",
  "groupVersion": "custom.metrics.k8s.io/v1beta1",
  "resources": [
    
      "name": "jobs.batch/node_temp",
      "singularName": "",
      "namespaced": true,
      "kind": "MetricValueList",
      "verbs": [
        "get"
      ]
    ,
    
      "name": "jobs.batch/etcd_object",
      "singularName": "",
      "namespaced": true,
      "kind": "MetricValueList",
      "verbs": [
        "get"
      ]
    ,
   ]

然后我尝试使用kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1/jobs/*/node_temp 查询已注册的 node_temp 指标的值,但得到以下响应 Error from server (InternalError): Internal error occurred: unable to list matching resources

问题:

    为什么 node_temp 指标与jobs.batch 资源类型相关联?

    为什么我无法通过kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1/jobs/*/node_temp 检索指标值?

    确定查询路径的明确方法是什么?例如/apis/custom.metrics.k8s.io/v1beta1/jobs/*/node_temp 我有点反复试验,直到我看到一些回应。我还在查询中看到了一些其他带有命名空间的路径,例如/apis/custom.metrics.k8s.io/v1beta1/namespaces/*/metrics/foo_metrics

任何帮助和建议将不胜感激!

【问题讨论】:

你解决了吗? 【参考方案1】:
    为什么 node_temp 指标与 jobs.batch 资源类型相关联?

它选择附加到 prometheus 指标的标签并尝试解释它们,在这种情况下,你显然有“job-kube4”

    为什么我无法通过 kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1/jobs/*/node_temp 检索指标值?

指标是命名空间的,请参阅“namespaced:true”,因此您需要“/apis/custom.metrics.k8s.io/v1beta1/namespaces//jobs//node_temp”

    确定查询路径的明确方法是什么?例如 /apis/custom.metrics.k8s.io/v1beta1/jobs//node_temp 我有点反复试验,直到我看到一些回应。我还在查询中看到了一些其他带有命名空间的路径,例如 /apis/custom.metrics.k8s.io/v1beta1/namespaces//metrics/foo_metrics

查看https://github.com/kubernetes/community/blob/master/contributors/design-proposals/instrumentation/custom-metrics-api.md#api-paths

【讨论】:

以上是关于无法从 prometheus-adapter 检索自定义指标的主要内容,如果未能解决你的问题,请参考以下文章

prometheus-adapter 空项目列表但成功的 HTTP 请求

安装Prometheus-adapter后top pod出错无输出

安装Prometheus-adapter后top pod出错无输出

检索“主”对象列表时,Backand 无法检索“从”对象

无法从 IP 服务器检索 JSONArray 但我可以从普通服务器检索?

无法从 glGetShaderInfoLog 检索错误消息