內容整理自官方文件
本篇回顧了我們在自託管外部使用 Relay
時的操作指南,即在您的硬體上執行的 Relay
並將事件轉發到 sentry.io
。
系列
- Sentry 企業級資料安全解決方案 - Relay 入門
- Sentry 企業級資料安全解決方案 - Relay 執行模式
- Sentry 企業級資料安全解決方案 - Relay 配置選項
- Sentry 企業級資料安全解決方案 - Relay 監控 & 指標收集
- Sentry 企業級資料安全解決方案 - Relay 專案配置
注意事項
-
我們建議使用官方提供的
Docker
映象(getsentry/Relay
)執行 Relay,該映象位於 DockerHub 上,並帶有Git
修訂識別符號,而不是從原始碼構建。 -
我們建議至少執行兩個
Relay
例項(容器),並在它們前面使用反向代理(例如 HAProxy 或 Nginx),以提高可用性並簡化Relay
更新。
系統要求和建議
以下建議假設 Relay
在 Docker
中執行。
資源 | 建議 |
---|---|
CPU |
|
記憶體 |
|
網路 |
|
儲存 |
|
Relay 是一個多執行緒應用程式,它試圖利用所有可用的 CPU 核心。 因此,Sentry 強烈建議在多核 CPU 上執行 Relay。如果您的設定預計每秒處理 100 個以上的請求,我們建議在至少四 (4) 個 CPU 核心上執行 Relay。
預設情況下,每個 Relay 例項將使用可用核心的總數來調整其執行緒池的大小。通過配置 limits.max_thread_count
來調整此行為。
示例配置
此示例配置設定基本日誌記錄和指標設定,以及更改預設併發級別。
---
relay:
# The upstream hostname is taken from any of your DSNs.
# Go to your Project Settings, and then to "Client Keys (DSN)" to see them.
upstream: https://___ORG_INGEST_DOMAIN___.
host: 0.0.0.0
port: 3000
logging:
level: info
format: json
metrics:
statsd: 127.0.0.1:8126
prefix: relay
limits:
# Base size of various internal thread pools. Defaults to the number of logical CPU cores
max_thread_count: 8
有關所有可用選項的詳細說明,請參閱配置選項頁面。
效能調優
Relay 提供了多種配置選項。與其他選項相比,更改某些選項對 Relay 的行為的影響更大。 以下列表列出了當您想要根據組織的環境和工作負載調整 Relay 時應首先檢查的幾個選項:
-
limits.max_concurrent_requests
(default: 100)您的 Relay 例項可以傳送到上游 (Sentry) 的併發請求數。如果您的事件量或 Sentry 的連線延遲很高,您可以增加此值以獲得額外的吞吐量,儘管增加的代價是額外的網路連線。
-
cache.event_buffer_size
(default: 1000)在開始拒絕新事件之前,Relay 可以在其本地佇列中緩衝多少事件。例如,當網路問題阻止 Relay 將接收到的訊息轉發到 Sentry 時,增加此值也會增加 Relay 的潛在記憶體消耗。
-
cache.event_expiry
(in seconds, default: 600)在丟棄事件之前,Relay 可以將緩衝的事件保留在記憶體中的時間。如果您預計 Relay 可能需要在記憶體中保留事件的時間比預設值長,則可以增加此值。
-
cache.project_expiry
(in seconds, default: 300)為了保持正常執行,Relay 會定期從 Sentry 上游獲取專案配置。此設定控制 Relay 獲取該配置的頻率。您可以減小此值以使配置傳播更加頻繁。例如,如果您稍後在 Sentry 的專案設定中更改資料清理選項,您的 Relay 例項將更快地意識到這些更改。
-
cache.project_grace_period
(in seconds, default: 0)專案配置過期後仍可使用多長時間。當上遊無法訪問時,增加此值可能會有所幫助;例如,由於網路問題。
請求路由
SDK 在一組端點上與 Sentry 通訊。 Relay 提供相同的 API 以成為無縫替代品。 這需要一組端點可以訪問:
/api/<project-id>/envelope/
/api/<project-id>/minidump/
/api/<project-id>/security/
/api/<project-id>/store/
/api/<project-id>/unreal/
根據 SDK 或客戶端,對這些端點的請求使用壓縮內容編碼(compressed content-encoding)
或分塊傳輸編碼(chunked transfer-encoding)
執行。 根據 Relay 前面的基礎設施,請檢查以下 HTTP 頭設定是否正確:
Host
: 到此 Relay 的公共主機名X-Forwarded-For
: 到客戶端 IP 地址X-Sentry-Auth
: 客戶端提供的值
代理通常為請求設定預設的最大 body 大小。尤其是原生崩潰報告和附件可能會超出這些限制。我們建議將最大客戶端 body 大小配置為 100MB。
在內部,Relay
向已配置的上游發出請求以轉發資料並檢索專案配置。我們 強烈建議 不要限制這些請求。 目前,Relay
向以下端點發出請求以進行基本操作:
以上所有端點:
/api/0/relays/projectconfigs/
/api/0/relays/publickeys/
/api/0/relays/register/challenge/
/api/0/relays/register/response/