sentry – огляд та встановлення self-hosted версії на Amazon Linux

Загальна інформація

Прилетів 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 до необхідних проєктів:

Встановлення

Клонуємо репозиторій:

[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:

Зроблено.

Посилання по темі

Click to rate this post!
[Total: 0 Average: 0]