Prometheus для мультикластеров k8s

#kubernetes #prometheus

#kubernetes #prometheus

Вопрос:

У меня есть 3 кластера kubernetes (prod, test, monitoring). Я новичок в prometheus, поэтому я протестировал его, установив в свою тестовую среду с диаграммой руля:

 # https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack
helm install [RELEASE_NAME] prometheus-community/kube-prometheus-stack
 

Но если я хочу получить показатели из кластеров prod и test, мне придется повторить ту же установку helm, и каждый «куб-прометей-стек» будет автономным в своем собственном кластере. Это совсем не идеально. Я пытаюсь найти способ создать единый prometheus / grafana, который объединял бы / объединял метрики с сервера prometheus каждого кластера.

Я нашел эту ссылку, в которой говорится о федерации prometheus:

 https://prometheus.io/docs/prometheus/latest/federation/
 

Если установить диаграмму управления «куб-прометей-стек» и избавиться от grafana в 2 других кластерах, как я могу сделать так, чтобы 3-й «куб-прометей-стек» в 3-м кластере очищал метрики от 2 других?
Спасибо

Ответ №1:

Необходимо изменить конфигурацию для prometheus federate, чтобы он мог извлекать метрики из других кластеров, как описано в документации:

 scrape_configs:
  - job_name: 'federate'
    scrape_interval: 15s

    honor_labels: true
    metrics_path: '/federate'

    params:
      'match[]':
        - '{job="prometheus"}'
        - '{__name__=~"job:.*"}'

    static_configs:
      - targets:
        - 'source-prometheus-1:9090'
        - 'source-prometheus-2:9090'
        - 'source-prometheus-3:9090'
 

params проверка полей на наличие заданий для извлечения метрик. В этом конкретном примере

Он очистит любую серию с меткой job=»prometheus» или именем метрики, начинающимся с job: с серверов Prometheus в источнике-prometheus-{1,2,3}:9090

Вы можете ознакомиться со следующими статьями, чтобы получить более полное представление о федерации prometheus:

  1. Мониторинг Kubernetes с помощью Prometheus — вне кластера!
  2. Федерация Prometheus в Kubernetes
  3. Мониторинг нескольких объединенных кластеров с помощью Prometheus — безопасный способ
  4. Мониторинг мультикластерной среды с использованием федерации Prometheus и Grafana

Ответ №2:

Здесь у вас есть несколько вариантов:

Вариант 1:

Вы можете добиться этого, купив vmagent или grafana-agent в кластерах prod и test и настроив удаленную запись на них в свой кластер мониторинга.

Но в этом случае вам нужно будет установить kube-state-metrics и node-exporter отдельно в prod и тестовый кластер.

Также важно добавить дополнительную метку для имени кластера (или любого уникального идентификатора) перед отправкой метрик на удаленную запись, чтобы убедиться, что правила записи из «kube-prometheus-stack» работают правильно

схема

Вариант 2:

Вы можете установить victoria-metrics-k8s-stack chart. Он имеет ту же функциональность, что и kube-prometheus-stack — также устанавливает набор компонентов, записывающих правила и панели мониторинга.

В этом случае вы устанавливаете victoria-metrics-k8s-stack в каждый кластер, но с разными значениями. Для мониторинга кластера вы можете использовать значения по умолчанию, с

 grafana:
  sidecar:
    dashboards:
      multicluster: true
 

и правильно настроенный вход для vmsingle

Для prod и тестового кластера вам необходимо отключить кучу компонентов

 defaultRules:
  create: false

vmsingle:
  enabled: false
alertmanager:
  enabled: false
vmalert:
  enabled: false
vmagent:
  spec:
    remoteWrite:
      - url: "<vmsingle-ingress>/api/v1/write"
    externalLabels:
      cluster: <cluster-name>

grafana:
  enabled: false
  defaultDashboardsEnabled: false
 

в этом случае chart развернет vmagent, kube-state-metrics, node-exporter и очистит конфигурации для vmagent.

схема

Ответ №3:

Вы могли бы попробовать посмотреть на волновой фронт. Сейчас это коммерческий инструмент, но вы можете получить бесплатную 30-дневную пробную версию — кроме того, он понимает PromQL. Таким образом, по сути, вы могли бы использовать одни и те же правила и конфигурации prometheus для всех кластеров, а затем использовать wavefront для простого подключения ко всем этим экземплярам prom.

Другим вариантом может быть Thanos, но я никогда не использовал его лично.

Комментарии:

1. К сожалению, это для клиента, я не могу использовать Wavefront.