Search
Write a publication
Pull to refresh

Сборка sentry и его зависимостей в rpm. Установка sentry из rpm, базовая настройка. Подключение к LDAP

Reading time5 min
Views13K

Сборка 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


https://t.me/sentry_ru


В следующих сериях:


  • Протестировать sentry версию 10.0.X после того как выкатят пару минорных релизов.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 6: ↑6 and ↓0+6
Comments2

Articles