Загальна інформація
Прилетів task інсталювати self-hosted версію sentry для розробників. Якщо даний сетап їхнім потребам підійде, будемо відмовлятися від Cloud-based і користуватися self-hosted, адмініструвати, оновлювати й обслуговувати самостійно.
Сам процес встановлення доволі простий. Завантажується репозиторій, запускається bash скрипт, який проводить магію підготовки, встановлення, а після завершення запропонує просто запустити docker-compose up. Підбивши підсумки з короткого опису, весь сетап описаний в docker-compose з підключенням volume для зберігання даних та конфігураційних файлів, які можемо редагувати. Те як вони організували інсталяцію — сподобалося, проте коли задумався перенести все в ansible… Поговоримо про це пізніше.. Наразі додам декілька основних нюансів й перейдемо до практики.
Рекомендовані параметри:
- Docker 19.03.6+
- Compose 1.28.0+
- 4 CPU Cores
- 8 GB RAM
- 20 GB Free Disk Space
Перед початком встановлення потрібно підготувати сервер, встановити необхідні компоненти docker, docker-compose, etc nginx, ssl та інше. В моєму випадку підготував alb, aws cert, створив target-group на 9000 порт, через нього будемо потрапляти до sentry. Сам сервер піднятий в aws з типом інстансу c5.xlarge.
За замовчуванням sentry self-hosted практикує нічні збірки, які автоматично збираються з тегом night з головної гілки self-hosted sentry для кожного нового коміту, як для sentry, так і додаткових проєктів snuba, relay, symbolicator. Як самі розробники повідомляють, що ці збірки зазвичай стабільні, але є вірогідність що трапиться зламана версія яка може призвести до втрати даних. Тому використовувати тег night тільки на власний розсуд.
Тому після стягування репозиторію в файлі .env варто змінити версію образів, нижче додам посилання на docker hub до необхідних проєктів:
- https://hub.docker.com/r/getsentry/sentry
- https://hub.docker.com/r/getsentry/snuba
- https://hub.docker.com/r/getsentry/relay
- https://hub.docker.com/r/getsentry/symbolicator
Встановлення
Клонуємо репозиторій:
[root@sentry-1a ~]# git clone https://github.com/getsentry/self-hosted.git Cloning into 'self-hosted'... remote: Enumerating objects: 2359, done. remote: Counting objects: 100% (721/721), done. remote: Compressing objects: 100% (444/444), done. remote: Total 2359 (delta 401), reused 537 (delta 273), pack-reused 1638 Receiving objects: 100% (2359/2359), 617.96 KiB | 13.73 MiB/s, done. Resolving deltas: 100% (1306/1306), done.
далі, заходимо в директорію /root/self-hosted/ та редагуємо файл .env, в ньому потрібно змінити image_tag з nightly на стабільну останню версію для всіх образів, звісно можна цього не робити, проте ми чудово знаємо погану практику використовувати теги latest:
[root@sentry: self-hosted]# vim .env COMPOSE_PROJECT_NAME=sentry-self-hosted SENTRY_EVENT_RETENTION_DAYS=90 # You can either use a port number or an IP:PORT combo for SENTRY_BIND # See https://docs.docker.com/compose/compose-file/#ports for more SENTRY_BIND=9000 # Set SENTRY_MAIL_HOST to a valid FQDN (host/domain name) to be able to send emails! # SENTRY_MAIL_HOST=example.com SENTRY_IMAGE=getsentry/sentry:3b40f8f SNUBA_IMAGE=getsentry/snuba:d9a44ce RELAY_IMAGE=getsentry/relay:639f5e9 SYMBOLICATOR_IMAGE=getsentry/symbolicator:43258fa WAL2JSON_VERSION=latest HEALTHCHECK_INTERVAL=30s HEALTHCHECK_TIMEOUT=60s HEALTHCHECK_RETRIES=5
для запуску процесу встановлення запускаємо ./install.sh –skip-user-prompt скрипт який знаходиться в корні репозиторію. Після запуску він послідовно запускатиме додаткові скрипти з директорії install (підготовка, міграції, збірка додаткових образів, створення volumes), запускаємо файл:
[root@sentry: self-hosted]# ./install.sh --skip-user-prompt ▶ Parsing command line ... ▶ Initializing Docker Compose ... ▶ Setting up error handling ... ▶ Checking for latest commit ... ▶ Checking minimum requirements ... Found Docker version 20.10.7 Found Docker Compose version 2.4.1 WARN: Recommended minimum RAM available to Docker is 7800 MB, found 7679 MB ▶ Creating volumes for persistent storage ... ▶ Ensuring files from examples ... ▶ Ensuring Relay credentials ... ▶ Generating secret key ... ▶ Replacing TSDB ... ▶ Fetching and updating Docker images ... ▶ Building and tagging Docker images ... ▶ Setting up Zookeeper ... ▶ Downloading and installing wal2json ... ▶ Bootstrapping and migrating Snuba ... ▶ Creating additional Kafka topics ... ▶ Ensuring proper PostgreSQL version ... ▶ Setting up / migrating database ... .... Did not prompt for user creation due to non-interactive shell. Run the following command to create one yourself (recommended): docker-compose run --rm web createuser ▶ Migrating file storage ... ▶ Setting up GeoIP integration ... ----------------------------------------------------------------- You're all done! Run the following command to get Sentry running: docker-compose up -d -----------------------------------------------------------------
далі необхідно створити адмін користувача:
[root@sentry-1a sentry]# docker-compose run --rm web createuser [+] Running 16/0 ⠿ Container sentry-self-hosted-redis-1 Running 0.0s ⠿ Container sentry-self-hosted-clickhouse-1 Running 0.0s ⠿ Container sentry-self-hosted-zookeeper-1 Running 0.0s ⠿ Container sentry-self-hosted-symbolicator-1 Running 0.0s ⠿ Container sentry-self-hosted-memcached-1 Running 0.0s ⠿ Container sentry-self-hosted-smtp-1 Running 0.0s ⠿ Container sentry-self-hosted-postgres-1 Running 0.0s ⠿ Container sentry-self-hosted-kafka-1 Running 0.0s .... 0.0s [+] Running 7/7 ⠿ Container sentry-self-hosted-geoipupdate-1 Started 0.9s ⠿ Container sentry-self-hosted-zookeeper-1 Healthy 0.5s ⠿ Container sentry-self-hosted-clickhouse-1 Healthy 0.5s .... 0.5s Updating certificates in /etc/ssl/certs... 0 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... done. 14:13:04 [INFO] sentry.plugins.github: apps-not-configured Email: [email protected] Password: Repeat for confirmation: Should this user be a superuser? [y/N]: y Should this user have Super Admin role? (This grants them all permissions available) [y/N]: y User created: [email protected]
запускаємо сам sentry:
[root@sentry-1a self-hosted]# docker-compose up -d [+] Running 16/0 [+] Running 28/28ry-self-hosted-symbolicator-cleanup-1 Creating 0.1s ⠿ Container sentry-self-hosted-symbolicator-cleanup-1 Created 0.1s [+] Running 30/29ry-self-hosted-geoipupdate-1 Created 0.1s ⠿ Container sentry-self-hosted-symbolicator-cleanup-1 Created 0.1s ⠿ Container sentry-self-hosted-geoipupdate-1 Created 0.1s ⠿ Container sentry-self-hosted-smtp-1 Created 0.0s ⠿ Container sentry-self-hosted-symbolicator-1 Created 0.0s ⠿ Container sentry-self-hosted-zookeeper-1 Created 0.0s ⠿ Container sentry-self-hosted-memcached-1 Created 0.0s ....
чудово, контейнери запустилися, перевіримо їх, виведемо список контейнерів:
[root@sentry-1a self-hosted]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 467cf729c68b nginx:1.21.6-alpine "/docker-entrypoint.…" 2 minutes ago Up 9 seconds 0.0.0.0:9000->80/tcp, :::9000->80/tcp sentry-self-hosted-nginx-1 2145955eb7f7 getsentry/relay:639f5e9 "/bin/bash /docker-e…" 2 minutes ago Up 9 seconds 3000/tcp sentry-self-hosted-relay-1 0cec18f194ce getsentry/sentry:3b40f8f "/etc/sentry/entrypo…" 2 minutes ago Up 39 seconds 9000/tcp sentry-self-hosted-cron-1 ada39d8f20b1 getsentry/sentry:3b40f8f "/etc/sentry/entrypo…" 2 minutes ago Up 39 seconds 9000/tcp sentry-self-hosted-post-process-forwarder-1 e5e8acb1f9e3 snuba-cleanup-self-hosted-local "/entrypoint.sh '*/5…" 2 minutes ago Up 46 seconds 1218/tcp sentry-self-hosted-snuba-cleanup-1 bc253a7fd50b getsentry/sentry:3b40f8f "/etc/sentry/entrypo…" 2 minutes ago Up 39 seconds 9000/tcp sentry-self-hosted-subscription-consumer-transactions-1 ab5ef5d6869c symbolicator-cleanup-self-hosted-local "/entrypoint.sh '55 …" 2 minutes ago Up About a minute 3021/tcp sentry-self-hosted-symbolicator-cleanup-1 68d2caf9ae46 getsentry/sentry:3b40f8f "/etc/sentry/entrypo…" 2 minutes ago Up 39 seconds 9000/tcp sentry-self-hosted-subscription-consumer-events-1 2d2af828b736 sentry-cleanup-self-hosted-local "/entrypoint.sh '0 0…" 2 minutes ago Up 39 seconds 9000/tcp sentry-self-hosted-sentry-cleanup-1 046437d585de getsentry/sentry:3b40f8f "/etc/sentry/entrypo…" 2 minutes ago Up 41 seconds (healthy) 9000/tcp sentry-self-hosted-web-1 d1a43b02bfcf getsentry/sentry:3b40f8f "/etc/sentry/entrypo…" 2 minutes ago Up 39 seconds 9000/tcp sentry-self-hosted-ingest-consumer-1 a729a4ec5ba1 getsentry/sentry:3b40f8f "/etc/sentry/entrypo…" 2 minutes ago Up 39 seconds 9000/tcp sentry-self-hosted-worker-1 ed8b7349d0e2 snuba-cleanup-self-hosted-local "/entrypoint.sh '*/5…" 2 minutes ago Up 46 seconds 1218/tcp sentry-self-hosted-snuba-transactions-cleanup-1 ae51edd6bd23 getsentry/snuba:d9a44ce "./docker_entrypoint…" 16 minutes ago Up 46 seconds 1218/tcp sentry-self-hosted-snuba-subscription-consumer-events-1 8d6d9e8a0af2 getsentry/snuba:d9a44ce "./docker_entrypoint…" 16 minutes ago Up 46 seconds 1218/tcp sentry-self-hosted-snuba-consumer-1 28a19bc0de64 getsentry/snuba:d9a44ce "./docker_entrypoint…" 16 minutes ago Up 47 seconds 1218/tcp sentry-self-hosted-snuba-sessions-consumer-1 6951ed71e990 postgres:9.6 "/opt/sentry/postgre…" 16 minutes ago Up About a minute (healthy) 5432/tcp sentry-self-hosted-postgres-1 7449e75f5605 getsentry/snuba:d9a44ce "./docker_entrypoint…" 16 minutes ago Up 48 seconds 1218/tcp sentry-self-hosted-snuba-outcomes-consumer-1 04d7535eab90 getsentry/snuba:d9a44ce "./docker_entrypoint…" 16 minutes ago Up 48 seconds 1218/tcp sentry-self-hosted-snuba-api-1 eaab8e4157e6 getsentry/snuba:d9a44ce "./docker_entrypoint…" 16 minutes ago Up 46 seconds 1218/tcp sentry-self-hosted-snuba-replacer-1 49b91baf6895 memcached:1.6.9-alpine "docker-entrypoint.s…" 16 minutes ago Up About a minute (healthy) 11211/tcp sentry-self-hosted-memcached-1 ad06e5f90547 getsentry/snuba:d9a44ce "./docker_entrypoint…" 16 minutes ago Up 46 seconds 1218/tcp sentry-self-hosted-snuba-transactions-consumer-1 5a44368d1c27 getsentry/snuba:d9a44ce "./docker_entrypoint…" 16 minutes ago Up 46 seconds 1218/tcp sentry-self-hosted-snuba-subscription-consumer-transactions-1 74927584370b tianon/exim4 "docker-entrypoint.s…" 16 minutes ago Up About a minute 25/tcp sentry-self-hosted-smtp-1 505afd8e1c79 getsentry/symbolicator:43258fa "/bin/bash /docker-e…" 16 minutes ago Up About a minute 3021/tcp sentry-self-hosted-symbolicator-1 6e7f33e64aae confluentinc/cp-kafka:5.5.0 "/etc/confluent/dock…" 17 minutes ago Up About a minute (healthy) 9092/tcp sentry-self-hosted-kafka-1 23310e9903a8 yandex/clickhouse-server:20.3.9.70 "/entrypoint.sh" 17 minutes ago Up About a minute (healthy) 8123/tcp, 9000/tcp, 9009/tcp sentry-self-hosted-clickhouse-1 8fcb99b8c1f2 confluentinc/cp-zookeeper:5.5.0 "/etc/confluent/dock…" 17 minutes ago Up About a minute (healthy) 2181/tcp, 2888/tcp, 3888/tcp sentry-self-hosted-zookeeper-1 a4efb887af2b redis:6.2.4-alpine "docker-entrypoint.s…" 17 minutes ago Up About a minute (healthy) 6379/tcp sentry-self-hosted-redis-1
як бачимо, багато добра запустилося, що ж спробуємо відкрити тепер в браузері:
Далі можна змінити деякі параметри, додати налаштування пошти й т.д., після завершення потрапляємо на головну сторінку:
Перевірка
Python Sentry
Створюємо тестовий Python проєкт в Sentry, тиснемо Create Project:
обираємо мову Python, змінюємо ім’я проєкту і тиснемо Create Project:
користуємось підказками й продовжуємо налаштовувати:
встановлюємо на робочу станцію sentry-python:
❯ pip install --upgrade sentry-sdk
далі робимо все як в прикладі:
❯ python3 Python 3.9.12 (main, Mar 26 2022, 15:44:31) [Clang 13.1.6 (clang-1316.0.21.2)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import sentry_sdk >>> sentry_sdk.init("https://******************[email protected]/4") <sentry_sdk.hub._InitGuard object at 0x10169ea00> >>> sentry_sdk.capture_message("Hello World from Python") 'e2cfd5ff8b3c4ff086679fedd73f42d8'
і переглянемо події в Sentry:
Зроблено.
Посилання по темі
- https://develop.sentry.dev/self-hosted/
- https://sentry-docs-o2paie5ivq-uc.a.run.app/server/installation/
- https://www.c-sharpcorner.com/article/setting-up-your-own-on-premises-sentry-server-via-docker-compose/