Пользовательские метрики адаптера Prometheus для Libvirt в кластере K8S - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть кластер K8S, который также управляет виртуальными машинами через virtlet.Этот кластер K8S работает под управлением K8S v1.13.2, с Prometheus, Prometheus-адаптером и сервером пользовательских метрик.Я написал собственный экспортер метрик для libvirtd, который извлекает метрики ВМ и настроил прометей для очистки этого экспортера для этих метрик ВМ - это работает и работает хорошо.

Что мне нужно сделать дальше, это заставить Prometheus-адаптер выдвинуть эти показатели в K8S.Ничто из того, что я сделал, не работает.Забавно, я вижу метрики в Прометее, но не могу представить их в 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-адаптер может запрашивать серию у 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>>)'

1 Ответ

0 голосов
/ 10 июля 2019

Это на самом деле зависит от того, как вы устанавливаете адаптер Prometheus.Если вы устанавливаете через helm и используете YAML в качестве конфигурации к правилам.Вам необходимо следовать этому README 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>>)

Обратите внимание на пользовательское ключевое слово.Если вы пропустите это, номер не будет доступен через пользовательские метрики.

...