Привет, хабр! Меня зовут Алексей, я — системный инженер в компании Constanta. Мы с командой занимаемся практиками DevOps, развиваем процессы ci/cd и мониторинга.
Представьте, что у вас есть 10 серверов и 20 микросервисов на них, а релизы проходят каждую неделю. Вы уже мониторите жизнеспособность сервисов и докера с помощью zabbix или prometheus, а с помощью ELK или grailog собираете логи. Кажется, что всё хорошо, но в таком потоке релизов, хотфиксов и строчек кода нужно быстро ориентироваться и вылавливать ошибки внутри приложения, которые не влияют на жизнеспособность сервиса, но мешают его правильной работе.
Стоп! Есть же Sentry, скажете вы. И будете правы. Он удобен, хорошо описан, есть документация, комьюнити и поддержка. Однако, есть одно "но".
Облачный мы не рассматривали сразу по нескольким причинам:
он платный;
один непроверенный пятничный релиз может потратить все ивенты за выходные;
в случае блокировки с одной или с другой стороны можно потерять все.
Если рассматривать Sentry self-hosted с точки зрения инженера по DevOps, становится понятно, что для него требуется много ресурсов, вместе разворачивается много сущностей, что значительно усложняет поддержку и требует постоянный мониторинг потребления ресурсов и отслеживание живости компонентов. Соответственно, вероятность отказа в самый ненужный момент возрастает.
Посмотрите скриншоты (под спойлером)
![GlitchTip. Контейнеры GlitchTip. Контейнеры](https://habrastorage.org/getpro/habr/upload_files/48c/b16/10d/48cb1610d8cd79564ee81d2b4d4c5017.png)
![GlitchTip. Контейнеры. Потребление ресурсов GlitchTip. Контейнеры. Потребление ресурсов](https://habrastorage.org/getpro/habr/upload_files/9a4/243/040/9a424304083292b4dd02a666de3e0fca.png)
![Sentry. Контейнеры Sentry. Контейнеры](https://habrastorage.org/getpro/habr/upload_files/f5c/09c/912/f5c09c9126874a0dc3047cf31a7357fa.png)
![Sentry. Контейнеры.Потребление ресурсов на пустом сентри, запущенном локально Sentry. Контейнеры.Потребление ресурсов на пустом сентри, запущенном локально](https://habrastorage.org/getpro/habr/upload_files/479/68d/d1a/47968dd1acd48b9a4402a368357de05b.png)
По этим причинам во время поиска аналогов облачного Sentry наш выбор пал на Glitchtip.
Что такое GlitchTip?
GlitchTip — это приложение для мониторинга ошибок, поддерживающее api Sentry. Оно предоставляет возможность отслеживать ошибки, производительность, доступность эндпоинта, а также интегрироваться с различными сервисами (например, авторизацию через gitlab или keycloak, отправку уведомлений в slack).
Так выглядит GlitchTip
![Окно входа, с подключенным Gitlab для сквозной авторизации Окно входа, с подключенным Gitlab для сквозной авторизации](https://habrastorage.org/getpro/habr/upload_files/3fc/6ee/9fc/3fc6ee9fcf3f47cd9e20e3a84e3ecbde.png)
![Поключенные проекты Поключенные проекты](https://habrastorage.org/getpro/habr/upload_files/189/514/167/189514167d1cd10d3a55a2130da7a192.png)
![Ошибки всех проектов Ошибки всех проектов](https://habrastorage.org/getpro/habr/upload_files/29a/611/849/29a611849765bd258379604c974165a4.png)
Сравнение Sentry c GlitchTip
Может быть, вы могли подумать, что GlitchTip — это полный клон Sentry, но это не так. В нем отсутствуют некоторые фичи Sentry, например, дашборды. В таблице ниже я сравнил основные фичи и интеграции.
Feature | Sentry | Gitchtip |
RAM (по документации) | 8GB | 1GB |
Free Disk Space (по документации) | 20GB | 30GB |
Error Tracking | + | + |
Uptime Monitoring | + | + |
Performance | + | + |
Dashboards | + | - |
Discover Trends | + | - |
В этой таблице привел в пример только самые популярные сервисы.
Integrations | Sentry | Gitchtip |
Slack | + | - |
Gitlab | + | + |
Githab | + | Только авторизация |
Jira | + | - |
Webhooks | + | + |
Благодаря поддержке api с точки зрения взаимодействия с приложением Gitchtip ничем не отличается от Sentry: при регистрации проекта вы получаете DSN (Data Source Name), который прописываете в настройках подключения своего приложения.
Пример под спойлером.
![Регистрируем приложение, получаем подсказку Регистрируем приложение, получаем подсказку](https://habrastorage.org/getpro/habr/upload_files/928/6fd/f0d/9286fdf0d06029a849a1d653d464b7e3.png)
![Копируем DSN Копируем DSN](https://habrastorage.org/getpro/habr/upload_files/4a5/58a/545/4a558a545927c9880ad4c23e58a56f7d.png)
Далее для перехвата ошибок:
добавить sentry-sdk==1.6.0 в зависимости проекта;
добавить в докерфайл приложения переменную окружения с DSN, чтобы не показывать ее в коде:
ENV SENTRY_DSN='https://4b6a3d54e8904e5698ffbab8f5f55fc4@<URL GlitchTip>/1'
импортировать в проект нужные библиотеки, например:
import sentry_sdk from sentry_sdk import capture_exception
добавить инициализацию:
sentry_sdk.init(dsn=os.getenv('SENTRY_DSN'))
подставить перехватчик к ошибке:
def get_json(url): try: url = url get_metrics_api = urlopen(url).read() get_metrics_api_json = json.loads(get_metrics_api) except HTTPError as e: capture_exception(e) if e.code == 403: get_metrics_api_json = {'Code': 403}
После этого в проекте можно посмотреть, что ошибка появилась
![Ошибка в новом проекте Ошибка в новом проекте](https://habrastorage.org/getpro/habr/upload_files/5b0/b17/449/5b0b17449f30dc26c4f257b119c88fef.png)
![Расширенная информация об ошибке Расширенная информация об ошибке](https://habrastorage.org/getpro/habr/upload_files/a90/075/d77/a90075d77d836f23d1140fc58975ee54.png)
C точки зрения администрирования у GlitchTip поднимается всего 4 контейнера (web, worker, redis и postrgresql), также для работы вам понадобится nginx. Помимо этого у вас есть стандандартная джанго-админка, где вы можете завести организацию и добавлять в нее пользователей. Еще вам может понадобится smtp (если вы хотите отправлять email о событиях), но нам данный функционал показался излишним и мы его не настраивали.
Установка и настройка
Установка и настройка описаны в документации, поэтому в статье мы не будем затрагивать этот процесс; если вкратце, то нужно забрать себе docker-compose.yml, поправить его под свои нужды и запустить на сервере.
Хотелось бы только отметить некоторые переменные для docker-compose, без которых не обойтись (спрятаны под спойлер).
Переменные:
SECRET_KEY – поменять на любую рандомную строку
PORT – если вы хотите переопределить порт, на котором поднимается GlitchTip
SOCIALACCOUNT_PROVIDERS_gitlab_GITLAB_URL – в переменную передается URL Gitlab для интеграции
GLITCHTIP_DOMAIN – домен, по которому будет доступен GlitchTip в браузере
CELERY_WORKER_CONCURRENCY - количество одновременных рабочих celery. По умолчанию количество ядер процессора.
GLITCHTIP_MAX_EVENT_LIFE_DAYS – количество дней, в течение которых хранятся события (по умолчанию 90).
Для автоматизированного заведения пользователей можно использовать Social Accounts. Мы выбрали для себя Gitlab. Подробнее можно посмотреть в документации. Под спойлером показано, как это выглядит в GlitchTip и Gitlab.
Настройка авторизации через Gitlab
![Регистрируем новое приложение в Gitlab, получаем id и secret_key. Вписываем Redirect_URL и scopes, выбираем read_users. Регистрируем новое приложение в Gitlab, получаем id и secret_key. Вписываем Redirect_URL и scopes, выбираем read_users.](https://habrastorage.org/getpro/habr/upload_files/18d/eac/b4a/18deacb4aaad56b69701de75834dc528.png)
![В админке выбираем social_account, далее провайдер, даем имя, вписываем id и secret_key, полученные из гитлаба и добавляем URL Gitlab В админке выбираем social_account, далее провайдер, даем имя, вписываем id и secret_key, полученные из гитлаба и добавляем URL Gitlab](https://habrastorage.org/getpro/habr/upload_files/c3f/8ad/83f/c3f8ad83fcbec525d69af116cdf67890.png)
Где и кому может пригодиться
GlitchTip легко поднять как локально для какого-нибудь пет-проекта, так и в компании для отслеживания ошибок с продуктовой среды. Он не требует больших усилий для установки и поддержки, поэтому его использование может пригодиться при разработке любого проекта любой сложности и на любом этапе. Стоит отметить, что за 5 месяцев использования GlitchTip ни разу нас не подвел и с ним не было никаких проблем.
Резюмируя, хочется отметить, что GlitchTip — это Sentry на минималках. Вы смело можете рассматривать его в качестве основного инструмента, если вам дороги ваше время и ресурсы и при этом не требуется полный функционал Sentry.
Если же вам крайне важно интегрироваться с такими сервисами, как Github, Jira, Bitbacked и другими, вы активно пользуетесь дашбордами или другими фичами, которых нет в GlitchTip, то лучше выбрать Sentry.
На этом у меня все, надеюсь, моя статья помогла принять решение в этом нелегком выборе :) Спасибо за внимание.