В предыдущих уроках рассказали базу мониторинга — что такое метрики, логи, трейсы, как применять золотые сигналы и формулировать SLI/SLO. Теперь пришло время разобраться с инструментами, которые позволяют собирать, хранить и анализировать эти данные.
Выбор инструментов мониторинга — это компромисс между функциональностью, сложностью настройки и стоимостью поддержки.
Стандартная система мониторинга состоит из компонентов:
- Агенты/Экспортеры — для сборки данных из приложений и инфраструктуры.
- Хранилища — для метрик, логов и трейсов
- Визуализация — для отображения данных в виде графиков и дашбордов
- Алертинг — для уведомления о проблемах
Как правило, система мониторинга начинается со сбора метрик, однако для 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 — фокус на мобильных приложениях, но поддерживает и веб