В предыдущих уроках рассказали базу мониторинга — что такое метрики, логи, трейсы, как применять золотые сигналы и формулировать SLI/SLO. Теперь пришло время разобраться с инструментами, которые позволяют собирать, хранить и анализировать эти данные.

Выбор инструментов мониторинга — это компромисс между функциональностью, сложностью настройки и стоимостью поддержки.

Стандартная система мониторинга состоит из компонентов:

  1. Агенты/Экспортеры — для сборки данных из приложений и инфраструктуры.
  2. Хранилища — для метрик, логов и трейсов
  3. Визуализация — для отображения данных в виде графиков и дашбордов
  4. Алертинг — для уведомления о проблемах

Как правило, система мониторинга начинается со сбора метрик, однако для Python и множества других технологий лучше начинать со сбора ошибок.

Сбор ошибок. Sentry — 80% пользы за 20% затрат

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

Основные возможности:

  • Автоматический сбор исключений — собирает весь путь до появления ошибки
  • Контекст ошибки — стек-трейс, переменные окружения, пользовательские данные
  • Группировка ошибок — похожие ошибки группируются вместе
  • Производительность — отслеживание медленных запросов и транзакций
  • Интеграции — с GitHub, Slack, Jira для автоматизации процессов
  • Окружения — возможность собирать ошибки отдельно по dev/staging/production
  • Возможность связи разных данных через общий id

Технически, Sentry когда-то было Django приложением, в которое внесли ооооочень много доработок (разобраться с нуля будет сложно).

Хоть и Sentry умеет многое, есть важные рекомендации по использованию:

  • Не использовать как инструмент логгирования (обойдется дорого и для этого есть спец. инструменты)
  • Не использовать как мониторинг системы (не обладает возможностями Prometheus)
  • Не использовать как полноценный монитор производительности (дает общее представление, детали не всегда)

Настройка занимает несколько строк:

# poetry add sentry-dsk

# settings.py
import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration

sentry_sdk.init(
    dsn="https://your-dsn@sentry.io/project-id",
    integrations=[DjangoIntegration()],
    traces_sample_rate=0.1,  # Отправляем 10% трейсов
    send_default_pii=True    # Включаем персональные данные
)

Все остальное Sentry сделает сам и интегрируясь с middleware и начнет собирать контекст запросов.

В ряде случаев облачный Sentry может быть недоступен, а разворачивание self-hosted требует усилий. Поэтому можно рассмотреть альтернативы:

  • SigNoz — берет на себя задачи Sentry и даже больше
  • Rollbar — похож на Sentry, но с более простым API
  • Bugsnag — фокус на мобильных приложениях, но поддерживает и веб

Сбор метрик. Prometheus — стандарт де-факто

Получить доступ к полному материалу
Полный текст доступен в курсе