kubernetes - K8S 集群中 Libvirt 的 Prometheus Adapter 自定义指标
问题描述
我有一个 K8S 集群,它也通过 virtlet 管理虚拟机。这个 K8S 集群运行的是 K8S v1.13.2,带有 prometheus 和 prometheus-adapter,以及一个自定义指标服务器。我已经为 libvirtd 编写了一个自定义指标导出器,它引入了 VM 指标,并配置了 prometheus 来为这些 VM 指标抓取该导出器——这正在运行并且运行良好。
接下来我需要做的是让 prometheus-adapter 将这些指标推送到 K8S 中。我所做的一切都不起作用。有趣的是,我可以在 prometheus 中看到指标,但我无法将它们呈现给自定义指标 API。
普罗米修斯中可见的示例指标:
libvirt_cpu_stats_cpu_time_nanosecs{app="prometheus-lex",domain="virtlet-c91822c8-5e82-beta-deflect",instance="192.168.2.32:9177",job="kubernetes-pods",kubernetes_namespace="default",kubernetes_pod_name="prometheus-lex-866694b884-9z8v6",name="prometheus-lex",pod_template_hash="866694b884"}
此指标的 Prometheus 适配器配置:
- seriesQuery: 'libvirt_cpu_stats_cpu_time_nanosecs{job="kubernetes-pods", app="prometheus-lex"}'
seriesFilters: []
resource:
overrides:
kubernetes_pod_name:
resource: pod
kubernetes_namespace:
resource: namespace
name:
matches: libvirt_cpu_stats_cpu_time_nanosecs
as: libvirt_cpu_stats_cpu_time_rate
metricsQuery: rate(libvirt_cpu_stats_cpu_time_nanosecs{job="kubernetes-pods", app="prometheus-lex", <<.LabelMatchers>>}[5m])
当我查询自定义指标 API 时,我看不到我要查找的内容:
kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1|grep libvirt
returns nothing
此外,我可以看到 prometheus-adapter 能够从 prometheus 查询系列。所以我知道适配器的那一侧正在工作。我只是想弄清楚为什么它没有将它们呈现给自定义指标服务器。
从普罗米修斯适配器
I0220 19:12:58.442937 1 api.go:74] GET http://prometheus-server.default.svc.cluster.local:80/api/v1/series?match%5B%5D=libvirt_cpu_stats_cpu_time_nanosecs%7Bkubernetes_namespace%21%3D%22%22%2Ckubernetes_pod_name%21%3D%22%22%7D&start=1550689948.392 200 OK
有什么想法我在这里想念的吗?
更新::
我也尝试了以下新配置,但仍然无法正常工作。
- seriesQuery: 'libvirt_cpu_stats_cpu_time_nanosecs{kubernetes_namespace!="",kubernetes_pod_name!=""}'
seriesFilters: []
resource:
overrides:
kubernetes_namespace: {resource: "namespace"}
kubernetes_pod_name: {resource: "pod"}
name:
matches: 'libvirt_cpu_stats_cpu_time_nanosecs'
as: 'libvirt_cpu_stats_cpu_time_rate'
metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>}[2m])) by (<<.GroupBy>>)'
解决方案
这实际上取决于您如何安装 Prometheus Adapter。如果您通过 helm 安装并使用 YAML 作为规则的配置。您需要遵循此自述文件https://github.com/helm/charts/blob/master/stable/prometheus-adapter/README.md并声明如下规则
rules:
custom:
- seriesQuery: '{__name__=~"^some_metric_count$"}'
resources:
template: <<.Resource>>
name:
matches: ""
as: "my_custom_metric"
metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>}) by (<<.GroupBy>>)
注意自定义关键字。如果您错过了,则无法通过自定义指标获得该数字。
推荐阅读
- ios - 如何在 SwiftUI 中检测 TextField 的实时变化?
- c# - 尝试添加新产品时,一个或多个实体的验证失败
- c++ - 在 Windows 上使用 MFC 或 ATL 标头和 MinGW 编译代码?
- python-3.x - Python -- While 循环失败
- java - selenium jre1.7 和 1.8 兼容性冲突
- c#-8.0 - 有什么方法可以通过某些确保它不是的属性来使可空引用推断为非空?
- python - 使用 GridSearchCV 测试多个管道
- vue.js - Vuex:如何更新组件数据或从 Store 调用组件方法
- javascript - 错误:找不到资源 youtube#videoListResponse
- spring - 在 Spring Data JPA 中按 * 对多关联的计数对实体进行排序