Как выглядит типичная архитектура системы мониторинга?

«Как выглядит типичная архитектура системы мониторинга?» — вопрос из категории Мониторинг и логирование, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Типичная архитектура современной системы мониторинга, которую я настраиваю, основана на стеке Prometheus и включает несколько ключевых компонентов.

Основные компоненты:

  1. Сбор метрик (Agents/Exporters): На целевых серверах и сервисах запускаются экспортеры, которые преобразуют внутренние метрики в формат, понятный Prometheus.

    • Node Exporter — метрики ОС (CPU, память, диск, сеть).
    • cAdvisor / kube-state-metrics — метрики контейнеров и Kubernetes.
    • Специфичные экспортеры для PostgreSQL, Nginx, RabbitMQ и т.д.
  2. Хранилище временных рядов (Time-Series Database - TSDB): Prometheus выступает в роли основного сервера. Он периодически "скрабит" (опрашивает) эндпоинты экспортеров по HTTP, собирает и хранит метрики в своей эффективной локальной TSDB.

    Пример конфигурации Prometheus (prometheus.yml):

    global:
      scrape_interval: 15s
      evaluation_interval: 15s
    
    scrape_configs:
      - job_name: 'kubernetes-nodes'
        kubernetes_sd_configs:
          - role: node
        relabel_configs:
          - source_labels: [__address__]
            regex: '(.*):10250'
            replacement: '${1}:9100'
            target_label: __address__
      - job_name: 'application'
        static_configs:
          - targets: ['app:8080']
  3. Визуализация и дашборды: Grafana подключается к Prometheus (и другим источникам) как к datasource. В ней создаются дашборды с графиками, которые помогают визуализировать состояние системы, например, график latency 95-го перцентиля или потребления памяти.

  4. Система алертинга: Alertmanager (часть экосистемы Prometheus) получает алерты от Prometheus по правилам, определенным в *.rules файлах. Он занимается группировкой, подавлением дубликатов и маршрутизацией уведомлений в нужные каналы: Slack, email, PagerDuty.

  5. Сбор логов (опционально, но часто сопутствует): Отдельный, но связанный стек, например Loki (для логов) + Promtail (агент), который также интегрируется с Grafana для корреляции логов и метрик.

Принцип работы: Экспортеры предоставляют метрики → Prometheus собирает и хранит их → Grafana запрашивает данные для визуализации → При нарушении правил Prometheus шлет алерт в Alertmanager → Команда получает уведомление.