Назад | Перейти на главную страницу

Что значит иметь более одного экземпляра Prometheus в Kubernetes

Предположим, я использую том для хранения данных Prometheus, мне интересно, могу ли я иметь более одного его экземпляра для обеспечения высокой доступности.

Я считаю, что только один экземпляр Prometheus должен отвечать за запись в серию tsdb, а наличие более одного экземпляра может вызвать состояние гонки и повредить данные (и я думаю, что причина, по которой его tsdb имеет файл блокировки, должна быть в этом).

Итак, вопрос в том, могу ли я запустить несколько экземпляров Prometheus, и оба они будут указывать на одни и те же данные и использовать их в качестве варианта высокой доступности? Или есть другой способ сохранить доступность Prometheus во время непрерывного перезапуска, вызванного изменениями конфигурации?

Ответ на ваш вопрос о наличии нескольких экземпляров Prometheus, которые указывают на одни и те же данные и используют их, не является вариантом высокой доступности. Во время перезапуска модуля / узла данные недоступны для других экземпляров, что бесполезно. Если вы планируете создать несколько экземпляров Prometheus и сделать их HA. Советую использовать федерацию Прометея. Это также решение для простого масштабирования, когда один главный сервер собирает метрики с разных серверов в разных центрах обработки данных.

Настроить эту архитектуру довольно просто. Главный сервер развертывается с «целями», которые содержат список URL-адресов подчиненных серверов Prometheus, например:

scrape_configs:
      - job_name: federated_prometheus
        honor_labels: true
        metrics_path: /federate
        params:
          match[]:
          - '{job="the-prom-job"}'
        static_configs:
          - targets:
            - prometheus-slave1:9090
            - prometheus-slave2:9090

Параметр match [] в конфигурации указывает Prometheus накапливать и хранить все ведомые метрики для определенного задания. Вы также можете установить его как регулярное выражение: {__name__=~”^job:.*”}. Это соберет метрики из нескольких разных заданий, которые соответствуют определению выражения.

Подчиненные устройства Prometheus должны иметь следующую конфигурацию:

global:
  external_labels:
    slave: 1
  relabel_configs:
  - source_labels: [_prometheus_slave]
    action: keep
    regex: slave1

Когда размер данных постоянно увеличивается, драйверы хранилища должны быть способны справляться с ростом, чтобы предоставлять надежные исторические данные. Простым решением для этого является использование сервисов облачного эластичного хранилища, таких как AWS S3 или Google Storage, в качестве серверных частей хранилища. Эти службы обеспечивают неограниченную емкость для серверов Prometheus, которым необходимо поддерживать большие объемы данных, например серверов, подключенных к большому кластеру Kubernetes или нескольким кластерам с одной конечной точкой мониторинга.

Сам Prometheus предоставляет решение для расширенного управления хранилищем - масштабируемость хранилища с помощью моментальных снимков. Создавая моментальные снимки данных Prometheus и удаляя данные с помощью конфигурации хранения в хранилище, пользователи могут иметь данные старше X дней или месяцев или больше определенного размера, доступные в режиме реального времени. Затем они также могут хранить старые данные на отдельном диске и предоставлять их по запросу.

Взгляни, пожалуйста: Промет-федерация, Kubernetes-Scaling-Prometheus.