【问题标题】:Prometheus Adapter Custom Metrics for Libvirt in a K8S ClusterK8S 集群中 Libvirt 的 Prometheus Adapter 自定义指标
【发布时间】:2019-07-13 12:19:36
【问题描述】:

我有一个 K8S 集群,它也通过 virtlet 管理虚拟机。这个 K8S 集群运行 K8S v1.13.2,带有 prometheus 和 prometheus-adapter,以及一个自定义指标服务器。我为 libvirtd 编写了一个自定义指标导出器,它提取 VM 指标并配置 prometheus 为这些 VM 指标抓取该导出器——这运行良好。

接下来我需要做的是让 prometheus-adapter 将这些指标推送到 K8S。我所做的一切都不起作用。有趣的是,我可以在 prometheus 中看到指标,但我无法将它们呈现给自定义指标 API。

prometheus 中可见的示例指标:

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>>)'

【问题讨论】:

    标签: kubernetes prometheus libvirt


    【解决方案1】:

    这实际上取决于您如何安装 Prometheus 适配器。如果您通过 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>>)
    

    注意自定义关键字。如果您错过了,则无法通过自定义指标获得该数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-27
      • 2021-10-11
      • 2021-03-03
      • 2020-11-26
      • 2019-06-28
      • 2018-10-28
      • 1970-01-01
      • 2020-02-20
      相关资源
      最近更新 更多