Опис
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 – відповідно хост;
- port – 3000 на якому працює ранер;
- 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:
На цьому все.