Как организован процесс мониторинга инфраструктуры?

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

Ответ

В моей практике процесс мониторинга строится на стеке, который включает сбор, хранение, визуализацию и алертинг.

1. Сбор метрик: Использую Prometheus как основу для сбора временных рядов. Для системных метрик с серверов запускаю node-exporter. Конфигурация Prometheus для этого выглядит так:

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['node-exporter-1:9100', 'node-exporter-2:9100']

Для прикладных метрик добавляю в код приложения инструментацию с помощью клиентских библиотек Prometheus.

2. Хранение: Для долгосрочного хранения и работы с большими объемами данных использую VictoriaMetrics или Thanos, что решает проблему масштабируемости и долговременного хранения Prometheus.

3. Визуализация и дашборды: Все метрики визуализирую в Grafana. Создаю дашборды для разных команд: общий обзор инфраструктуры (CPU, память, диск, сеть), дашборды по конкретным сервисам (латентность, ошибки, RPS) и бизнес-метрики.

4. Логирование: Для логов применяю архитектуру ELK (Elasticsearch, Logstash, Kibana) или более легкий стек Loki с Promtail. Loki удобен тем, что использует те же метки, что и Prometheus, и позволяет коррелировать логи с метриками.

5. Алертинг: Настраиваю правила алертинга в Alertmanager. Правила пишу в PromQL. Например, алерт на высокую загрузку CPU:

- alert: HighCpuUsage
  expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
  for: 5m
  labels:
    severity: warning
  annotations:
    summary: "High CPU usage on {{ $labels.instance }}"

Уведомления настраиваю в Slack, Telegram или PagerDuty. Ключевой принцип — алерты должны быть actionable, то есть указывать на конкретную проблему и требовать действия, а не просто информировать о состоянии.