sentry – ознайомлення та встанановлення relay

Опис

Sentry Relay – проміжний та потужний компонент, через який додатки відправляють помилки в Sentry допомагає забезпечити ефективну та надійну передачу данних, зменшує навантаження на сервер Sentry, та покращує безпеку. Має декілька режимів роботи, які розглянемо трішки нижче. Розміщувати релай можемо як поруч з Sentry, так і на окремому сервері, все залежить від потреб (за замовчуванням він розгортається разом з Sentry). 

Релай виконує наступне:

  • Очищує персональну інформацію, перш ніж відправити дані до Sentry;
  • Покращує час відповіді на події, де є проблеми з мережею;
  • Працює як проксі, який може обмежувати HTTP-запити і не тільки;

Ще одна з переваг релаю, сентрі може бути не доступним проте аплікейшен відправлятиме помилки до релаю, релай їх прийматиме. Якщо помилки відправляти на пряму до Сентрі – аплікейшен буде намагатися відправити помилки, відбуватимуться постійні ретраї, що може гальмувати його.

План виконання:

  • розгортати будемо на окремому серверів, який живе в одній мережі з додатками (розташовуємо поближче);
  • завантажити та встановити релай;
  • ознайомитись з конфігураційними файлами;
  • запустити та підключити до сентрі;
  • перевірити доступ до релаю з серверів додатків;
  • тестово відправити повідомлення в сентрі

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

підключаємось до підготовленого серверу по ssh, завантажуємо bin файл:

wget https://github.com/getsentry/relay/releases/download/23.2.0/relay-Linux-x86_64 -O relay

робимо файл виконуючим, переміщаємо в директорію /usr/bin:

chmod +x relay

далі потрібно згенерувати конфігураційні файли, для цього скористаємось командою:

relay config init /etc/sentry-relay
Initializing relay in /etc/sentry-relay
✔ Do you want to create a new config? · Yes, create default config
Generated new credentials
  relay id: e57c319d-****-4ccc-****-*********2
  public key: ************nZ1q***********54***
All done!

де:

  • relay config initкоманда для генерації файлів;
  • /etc/sentry-relayшлях куди генерувати файли (якщо не вказувати шлях, в поточній директорії буде створена окрема директорія .relay);

релай згенерував два файли:

  • config.ymlконфігураційний файл;
  • credentials.jsonфайл з публічним та приватним ключем;

розглянемо детальніше файл config.json:

relay:
  mode: managed
  upstream: https://sentry.example.com
  host: 0.0.0.0
  port: 3000
  tls_port: null
  tls_identity_path: null
  tls_identity_password: null

де:

  • mode – вказуємо режим роботи релаю;
  • upstream – додаємо посилання на сентрі;
  • host –  відповідно хост;
  • port3000 на якому працює ранер;
  • tls_* – налаштування для tls, поки що нам цей параметр не потрібен;

Коротко поговоримо про режими роботи релаю. Існує три основні:

  • managed режим за замовчуванням. В даному режимі відбувається перевірка на актуальність проету, якщо перевірка не пройшла, релай не буде нічого відправляти.
    Релай виконає запит для перевірки та обробки налаштувань проекту, якщо сентрі не зможе обробити та перевірити – дані для даного проекту будуть відхилені.
    Даний режим працює тільки з Enterprise версією Sentry(.
  • statiс у статичному режимі проекти необхідно налаштовувати. Relay оброблятиме події лише для статично налаштованих проектів а події інших проектів відхилятиме. Цей режим корисний, якщо ви знаєте проекти які надсилають події і їх потрібно контролювати.
  • proxyрежим проксі схожий на static, але він пересилає події з як з відомих так і з невідомих проектів. Події з невідомих проектів пересилаються з мінімальним обробленням.

Додаткові опції які можна додати в конфігураційни файл дивимося тут. Тепер структура файлу credentials.json:

{
  "secret_key": "**********sU5vnu60*************************",
  "public_key": "6R***************************************2s",
  "id": "d***628-****-486b-******-************"
}

де:

  • secret_key – таємний ключ;
  • public_key – публічний ключ, який ми додаємо при створенні ранера на sentry;
  • id – відповідно ідентифікатор релаю;

Після короткого ознайомлення з файлами, потрібно додати публічний ключ в налаштування relay, переходимо в Settings > Relay > Register Key:

додаємо скопійований ключ, називаємо релай, натискаємо Register:

запустимо:

relay run -c /etc/sentry-relay/
 INFO relay::setup > launching relay from config folder /etc/sentry-relay/
 INFO relay::setup >   relay mode: managed
 INFO relay::setup >   relay id: d****628-*****-486b-****-***********
 INFO relay::setup >   public key: *******************************************
 INFO relay::setup >   log level: INFO
 INFO relay_server::actors::outcome > Configured to emit outcomes as client reports
 INFO relay_server::actors::upstream > registering with upstream (https://sentry.example.com/)
 INFO relay_server::actors::processor > starting 8 envelope processing workers
 INFO relay_server::actors::outcome   > OutcomeProducer started.
 INFO relay_server::actors::outcome_aggregator > outcome aggregator started
 INFO relay_server::actors::envelopes          > envelope manager started
 INFO relay_server::actors::project_cache      > project cache started
 INFO relay_server::actors::relays             > key cache started
 INFO relay_metrics::aggregation               > aggregator started
 INFO relay_server::service                    > spawning http server
 INFO relay_server::service                    >   listening on: http://0.0.0.0:3000/
 INFO relay_server::actors::project_upstream   > project upstream cache started
 INFO relay_server::actors::project_local      > project local cache started
 INFO actix_net::server::server                > Starting 8 workers
 INFO actix_net::server::server                > Starting server on 0.0.0.0:3000
 INFO relay_system::controller                 > relay server starting
 INFO relay_server::actors::upstream           > relay successfully registered with upstrea

де:

  • /bin/relay run – команда для запуску;
  • -c /etc/sentry-relay – шлях до директорії з конфігураційними файлами (config.yml / credentials.json);

якщо все зробили вірно, отримаємо наступне:

далі спробуємо відправити повідомлення через relay:

> python3
import sentry_sdk
sentry_sdk.init(dsn="http://9a*********************0@localhost:3000/33")
sentry_sdk.capture_message("Hello World from RELAY")

Перевіримо подію в Sentry:

На цьому все.

Корисні посилання

Click to rate this post!
[Total: 1 Average: 5]