Sentry 企業級資料安全解決方案 - Relay 操作指南

為少發表於2022-01-10

內容整理自官方文件

本篇回顧了我們在自託管外部使用 Relay 時的操作指南,即在您的硬體上執行的 Relay 並將事件轉發到 sentry.io

系列

注意事項

系統要求和建議

以下建議假設 RelayDocker 中執行。

資源 建議
CPU
  • 必需: x86-64 (amd64) CPU 架構
  • 多核 CPU
記憶體
  • 建議每個 Relay 容器至少有 2GB 的 RAM。
網路
  • 頻寬:確保您有足夠的容量來接收和轉發計劃的資料量。 預設情況下,Relay 會將所有上游請求壓縮到 sentry.io,但壓縮率可能會因提交事件的型別和形狀而異。
  • 延遲:Relay 可以容忍網路延遲達到某個點。但是建議確保到上游的往返時間保持低於 5 秒。
儲存
  • Relay 當前不需要磁碟儲存。

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/

相關文章