Sentry 企業(yè)級(jí)數(shù)據(jù)安全解決方案 - Relay 操作指南
本篇回顧了我們?cè)谧酝泄芡獠渴褂?Relay 時(shí)的操作指南,即在您的硬件上運(yùn)行的 Relay 并將事件轉(zhuǎn)發(fā)到 sentry.io。
注意事項(xiàng)
- 我們建議使用官方提供的 Docker 鏡像(getsentry/Relay)運(yùn)行 Relay,該鏡像位于 DockerHub 上,并帶有 Git 修訂標(biāo)識(shí)符,而不是從源代碼構(gòu)建。
- https://hub.docker.com/r/getsentry/relay/
- 我們建議至少運(yùn)行兩個(gè) Relay 實(shí)例(容器),并在它們前面使用反向代理(例如 HAProxy 或 Nginx),以提高可用性并簡(jiǎn)化 Relay 更新。
- https://www.haproxy.org/
- https://nginx.org
- 要監(jiān)控您的 Relay 設(shè)置,請(qǐng)配置 日志記錄, 指標(biāo), 和 健康檢查。
- https://docs.sentry.io/product/relay/monitoring/#logging
- https://docs.sentry.io/product/relay/monitoring/#metrics
- https://docs.sentry.io/product/relay/monitoring/#health-checks
系統(tǒng)要求和建議
以下建議假設(shè) Relay 在 Docker 中運(yùn)行。
資源 | 建議 |
---|---|
CPU |
|
內(nèi)存 |
|
網(wǎng)絡(luò) |
|
存儲(chǔ) |
|
Relay 是一個(gè)多線程應(yīng)用程序,它試圖利用所有可用的 CPU 內(nèi)核。因此,Sentry 強(qiáng)烈建議在多核 CPU 上運(yùn)行 Relay。如果您的設(shè)置預(yù)計(jì)每秒處理 100 個(gè)以上的請(qǐng)求,我們建議在至少四 (4) 個(gè) CPU 內(nèi)核上運(yùn)行 Relay。默認(rèn)情況下,每個(gè) Relay 實(shí)例將使用可用內(nèi)核的總數(shù)來調(diào)整其線程池的大小。通過配置 limits.max_thread_count 來調(diào)整此行為。
示例配置
此示例配置設(shè)置基本日志記錄和指標(biāo)設(shè)置,以及更改默認(rèn)并發(fā)級(jí)別。
- ---
- 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
有關(guān)所有可用選項(xiàng)的詳細(xì)說明,請(qǐng)參閱配置選項(xiàng)頁(yè)面。
性能調(diào)優(yōu)
Relay 提供了多種配置選項(xiàng)。與其他選項(xiàng)相比,更改某些選項(xiàng)對(duì) Relay 的行為的影響更大。以下列表列出了當(dāng)您想要根據(jù)組織的環(huán)境和工作負(fù)載調(diào)整 Relay 時(shí)應(yīng)首先檢查的幾個(gè)選項(xiàng):
- limits.max_concurrent_requests (default: 100)
您的 Relay 實(shí)例可以發(fā)送到上游 (Sentry) 的并發(fā)請(qǐng)求數(shù)。如果您的事件量或 Sentry 的連接延遲很高,您可以增加此值以獲得額外的吞吐量,盡管增加的代價(jià)是額外的網(wǎng)絡(luò)連接。
- cache.event_buffer_size (default: 1000)
在開始拒絕新事件之前,Relay 可以在其本地隊(duì)列中緩沖多少事件。例如,當(dāng)網(wǎng)絡(luò)問題阻止 Relay 將接收到的消息轉(zhuǎn)發(fā)到 Sentry 時(shí),增加此值也會(huì)增加 Relay 的潛在內(nèi)存消耗。
- cache.event_expiry (in seconds, default: 600)
在丟棄事件之前,Relay 可以將緩沖的事件保留在內(nèi)存中的時(shí)間。如果您預(yù)計(jì) Relay 可能需要在內(nèi)存中保留事件的時(shí)間比默認(rèn)值長(zhǎng),則可以增加此值。
- cache.project_expiry (in seconds, default: 300)
為了保持正常運(yùn)行,Relay 會(huì)定期從 Sentry 上游獲取項(xiàng)目配置。此設(shè)置控制 Relay 獲取該配置的頻率。您可以減小此值以使配置傳播更加頻繁。例如,如果您稍后在 Sentry 的項(xiàng)目設(shè)置中更改數(shù)據(jù)清理選項(xiàng),您的 Relay 實(shí)例將更快地意識(shí)到這些更改。
- cache.project_grace_period (in seconds, default: 0)
項(xiàng)目配置過期后仍可使用多長(zhǎng)時(shí)間。當(dāng)上游無(wú)法訪問時(shí),增加此值可能會(huì)有所幫助;例如,由于網(wǎng)絡(luò)問題。
請(qǐng)求路由
SDK 在一組端點(diǎn)上與 Sentry 通信。Relay 提供相同的 API 以成為無(wú)縫替代品。這需要一組端點(diǎn)可以訪問:
- /api//envelope/
- /api//minidump/
- /api//security/
- /api//store/
- /api//unreal/
根據(jù) SDK 或客戶端,對(duì)這些端點(diǎn)的請(qǐng)求使用壓縮內(nèi)容編碼(compressed content-encoding)或分塊傳輸編碼(chunked transfer-encoding)執(zhí)行。根據(jù) Relay 前面的基礎(chǔ)設(shè)施,請(qǐng)檢查以下 HTTP 頭設(shè)置是否正確:
- Host: 到此 Relay 的公共主機(jī)名
- X-Forwarded-For: 到客戶端 IP 地址
- X-Sentry-Auth: 客戶端提供的值
代理通常為請(qǐng)求設(shè)置默認(rèn)的最大 body 大小。尤其是原生崩潰報(bào)告和附件可能會(huì)超出這些限制。我們建議將最大客戶端 body 大小配置為 100MB。
在內(nèi)部,Relay 向已配置的上游發(fā)出請(qǐng)求以轉(zhuǎn)發(fā)數(shù)據(jù)并檢索項(xiàng)目配置。我們 強(qiáng)烈建議 不要限制這些請(qǐng)求。目前,Relay 向以下端點(diǎn)發(fā)出請(qǐng)求以進(jìn)行基本操作:
以上所有端點(diǎn):
- /api/0/relays/projectconfigs/
- /api/0/relays/publickeys/
- /api/0/relays/register/challenge/
- /api/0/relays/register/response/
- 【責(zé)任編輯:武曉燕 TEL:(010)68476606】