Сборка sentry и его зависимостей в rpm. Установка sentry из rpm, базовая настройка.
Описание
Sentry — инструмент мониторинга исключений (exception), ошибок в ваших приложениях.
Преимущества использования Sentry:
- не нервничать при размещении приложений на боевом сервере,
- быстро находить причины возникших проблем,
- устранять баги раньше, чем о них вам сообщат тестировщики, коллеги из саппорта, пользователи, ПМ или директор,
- выявлять незаметные остальной команде проблемы, которые портят жизнь пользователям и снижают эффективность вашего продукта,
- бесплатен,
- легко интегрируется в проект,
- ловит ошибки и в браузере пользователя, и на вашем сервере.
Основные возможности:
- Список ошибок обновляется в режиме реального времени,
- Если ошибка была помечена как решенная и появилась снова, то она снова создается и учитывается в отдельном потоке,
- Ошибки группируются и отображаются в порядке частоты появления,
- Ошибки можно фильтровать по статусам, источнику логгирования, уровню логгирования, имени сервера и т.д.
Sentry поддерживает большую часть языков программирования. Подробнее здесь.
Запуск Sentry с помощью docker и docker-compose
Вы можете запустить Sentry с помощью docker и docker-compose как описано здесь: https://github.com/getsentry/onpremise. Но скрипт запускает на этом же сервере в single режиме (без отказоустройчивости) дополнительные сервисы (Для версии sentry 10.0.0):
- data
- postgres
- redis
- zookeeper
- kafka
- clickhouse
- symbolicator
Если вам нужна отказоустойчивость, то вам придется либо пользоваться планым облачным продуктом, либо устанавливать Sentry без этого скрипта.
Еще один минус при запуске официального docker-compose — возможно высокая нагрузка, все сервисы запускаются на одном единственном сервере.
У вас возможно будут такие логи:
В этом посте описывается процесс сборки Sentry и его зависимостей в rpm. Если вам нужно установить Sentry там где нет интернета, то из полученных rpm можно сделать yum репозиторий.
Важное уточение по сборке и установке пакетов
Некоторые пакеты зависят друг от друга. Поэтому процесс сборки и установки разделен на несколько этапов.
TODO:
В этом посте рассмотрена сборки и установка Sentry версии 9.1.2. После того как разработчики выпустят пару минорных релизов можно собирать и версию Sentry 10.X.Y. Многие последние коммиты в master — это fix (исправления).
Требования к серверу для сборки rpm
Чем больше ЦПУ будет, тем быстрее будет происходить сборка пакетов semaphore и symbolic
Выключаем Selinux
Сообщество будет только за, если кто-нибудь напишет политики selinux для Sentry.
sudo sed -i s/^SELINUX=.*$/SELINUX=disabled/ /etc/selinux/config
sudo reboot
Подключаем репозиторий epel-release
sudo yum install -y epel-release git
Скачиваем репозиторий со скриптами
git clone https://github.com/patsevanton/sentry-rpm.git
cd sentry-rpm
Собираем в rpm pip зависимости и устанавливаем их. Файл 1general_dependencies.sh
./1general_dependencies.sh
Устанавливаем и запускаем PostgreSQL для сборки python-psycopg2-binary. Файл 2psycopg2-binary.sh
Версию PostgreSQL вы можете поменять в скрипте.
./2psycopg2-binary.sh
Собираем и устанавливаем python-dateutil rpm. Файл 3dateutil.sh
./3dateutil.sh
Собираем и устанавливаем python-urllib3 rpm. Файл 4urllib3.sh
./4urllib3.sh
Собираем в rpm остальные pip зависимости и устанавливаем их. Файл 5other_dependencies.sh
./5other_dependencies.sh
Собираем в rpm sentry и устанавливаем его. Файл 6sentry.sh
./6sentry.sh
Собираем в rpm LDAP зависимости. Файл 7sentry-ldap-auth.sh
./7sentry-ldap-auth.sh
Устанавливаем и запускаем PostgreSQL 9.6. Файл 8postgresql.sh
./8postgresql.sh
Запуск тестового LDAP или подключение к рабочему LDAP (Active Directory)
Если вы хотите протестировать LDAP, то запускаем тестовый openldap в docker.
sudo docker run -p 389:389 -p 636:636 --name test-ldap --detach gitea/test-openldap
Добавляем тестовые или рабочие настройки LDAP в файл sentry.conf.py (пример ниже).
#############
# LDAP auth #
#############
import ldap
from django_auth_ldap.config import LDAPSearch, GroupOfUniqueNamesType
AUTH_LDAP_SERVER_URI = 'ldap://192.168.88.244:389'
#AUTH_LDAP_BIND_DN = 'admin'
#AUTH_LDAP_BIND_PASSWORD = 'GoodNewsEveryone'
AUTH_LDAP_BIND_DN = 'cn=admin,dc=planetexpress,dc=com'
AUTH_LDAP_BIND_PASSWORD = 'GoodNewsEveryone'
AUTH_LDAP_USER_SEARCH = LDAPSearch(
'dc=planetexpress,dc=com',
ldap.SCOPE_SUBTREE,
'(uid=%(user)s)',
)
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
'',
ldap.SCOPE_SUBTREE,
'(objectClass=groupOfUniqueNames)'
)
AUTH_LDAP_GROUP_TYPE = GroupOfUniqueNamesType()
AUTH_LDAP_REQUIRE_GROUP = None
AUTH_LDAP_DENY_GROUP = None
AUTH_LDAP_USER_ATTR_MAP = {
'name': 'cn',
'email': 'mail'
}
AUTH_LDAP_FIND_GROUP_PERMS = False
AUTH_LDAP_CACHE_GROUPS = True
AUTH_LDAP_GROUP_CACHE_TIMEOUT = 3600
AUTH_LDAP_DEFAULT_SENTRY_ORGANIZATION = u'Sentry'
AUTH_LDAP_SENTRY_ORGANIZATION_ROLE_TYPE = 'member'
AUTH_LDAP_SENTRY_ORGANIZATION_GLOBAL_ACCESS = True
AUTH_LDAP_SENTRY_SUBSCRIBE_BY_DEFAULT = True
SENTRY_MANAGED_USER_FIELDS = ('email', 'first_name', 'last_name', 'password', )
AUTHENTICATION_BACKENDS = AUTHENTICATION_BACKENDS + (
'sentry_ldap_auth.backend.SentryLdapBackend',
)
Убеждаемся в вебе под административной учётной записью по адресу, например http://ip-где-установлен-sentry:9000/manage/status/packages/, что новые пакеты с некоторыми зафиксированными версиями установлены.
Присутствует в AUTHENTICATION_BACKENDS новая запись: sentry_ldap_auth.backend.SentryLdapBackend по адресу http://ip-где-установлен-sentry:9000/manage/status/environment/
Запускаем миграцию (создание схемы БД) и запускаем сервисы. Файл 9start_sentry.sh
sudo systemctl start redis
sudo -i -u sentry /usr/bin/sentry --config /etc/sentry/ upgrade
sudo systemctl start sentry-worker
sudo systemctl start sentry-cron
sudo systemctl start sentry-web
Создаем внутреннего администратора Sentry (Если вы не создали админа при запуске 9start_sentry.sh)
https://forum.sentry.io/t/noninteractive-first-time-setup-of-user-via-upgrade/164
sudo -i -u sentry /usr/bin/sentry --config /etc/sentry/ createuser
Тестирование LDAP
Пробуем ввести связку логин-пароль из базы LDAP, например professor professor.
Убеждаемся, что уже пользователь в организация Sentry, и соответственно смог залогиниться.
Создаем внутреннего администратора Sentry
https://forum.sentry.io/t/noninteractive-first-time-setup-of-user-via-upgrade/164
sudo -i -u sentry /usr/bin/sentry --config /etc/sentry/ createuser
Тестирование отправки exception
Тестировать будем на java проекте. Скачиваем java и maven.
sudo yum install -y java-1.8.0-openjdk-devel git
sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
sudo yum -y install apache-maven
git clone https://github.com/getsentry/examples.git
cd examples/java/basic
mvn compile exec:java
Теперь нам нужно запустить java передав ему SENTRY_DSN
SENTRY_DSN=https://public:private@host:port/1 mvn exec:java
Теперь нужно найти сгенерированный по умолчанию SENTRY_DSN.
Заходим в Sentry. Идем в проект по умолчанию internal.
или
Переходим в настройки проекта.
Переходим в Client Keys (DSN).
Копируем DSN. Это и есть SENTRY_DSN.
Запускаем java с этим параметром.
SENTRY_DSN=http://633e7361061d4dcaaca53877c4c0e80a@172.26.9.34:9000/1 mvn exec:java
Видим такую картину.
Если перейдем в UnsupportedOperationException
, то увидем расширенную информацию.
Создал Telegram чат по Sentry
В следующих сериях:
- Протестировать sentry версию 10.0.X после того как выкатят пару минорных релизов.