跳到主內容

【Sentry】 自架主機分析

當你要自建 Sentry 並希望個別安裝各個服務(非 all-in-one Docker 方式),需要了解 Sentry 背後實際上是一個 分散式系統,包含多個子服務。以下是簡要說明每個服務的用途,並提供 最小部署需求建議(幾台機器)


🧩 Sentry 核心元件說明

服務 用途 是否必要 說明
Sentry Web Web UI + API ✅ 必要 使用者操作介面與事件接收入口。
Worker 背景任務處理 ✅ 必要 發送通知、儲存事件、標記等。Celery 背後用 Redis 當 broker。
Cron 定期任務排程 ✅ 必要 例如清除舊資料、定期檢查等。
Relay 邊界接收器 ✅ 建議 前端 SDK 最先接觸的入口,可作為 proxy、限流、預處理。
PostgreSQL 資料庫 ✅ 必要 儲存大部分結構化資料(專案、使用者、事件等)。
Redis 訊息佇列、快取 ✅ 必要 Celery 任務排程、快取使用。
Kafka 事件串流 ✅ 必要(新版) 訊息串流 backbone,傳輸異常事件。
Zookeeper Kafka 依賴 ✅ Kafka 必要 Kafka metadata 管理工具。
ClickHouse 高速查詢 ✅ 建議 儲存事件 metadata,提供 Discover/Performance UI。
Symbolicator 原始碼還原符號 🟡 可選 用於原生 crash report(iOS/Android 原始符號對應)。
Snuba 查詢引擎 ✅ 必要 Sentry 的查詢服務,轉發查詢給 ClickHouse。
nginx Proxy ✅ 建議 當作入口,轉發請求給 Sentry、Relay 等。

📦 最小分布式部署建議(分機版本)

節點 安裝項目 說明
Node 1:App Server sentry-web + cron + worker 最好有 2 核以上,主要承擔使用者 UI 與邏輯
Node 2:資料庫 PostgreSQL + Redis 可整合在同台,需穩定,重要資料所在
Node 3:訊息處理 Kafka + Zookeeper Kafka 可與其他服務共用機器(但建議獨立)
Node 4:查詢引擎 Snuba + ClickHouse 查詢速度核心,可以跟 Kafka 共用
Node 5:Symbolicator + Relay 可再分出獨立機器 可選,針對原生應用及 SDK proxy

🧠 最小建議:
最少可以從 3 台機器 起步:

  • 機器 A(App):sentry-web、cron、worker、relay

  • 機器 B(Storage):PostgreSQL、Redis、Symbolicator

  • 機器 C(Streaming):Kafka、Zookeeper、ClickHouse、Snuba

這樣就可以支撐基本功能。當負載上來之後,再做橫向擴展。


✅ 補充:資源建議(單位:最小)

服務 CPU Memory 磁碟
PostgreSQL 2C 4GB+ SSD 儲存,100GB 起跳
ClickHouse 2C 4GB+ SSD 快速查詢,空間依事件量調整
Kafka 2C 4GB 10GB 起
Snuba 1C 2GB
Redis 1C 1GB 幾乎沒磁碟需求
Web / Worker 2C 2~4GB 看使用者數

🧭 小結

想法 建議
只是要「快速玩玩看」 ✅ Docker self-hosted(1 台)
內網 demo、準生產環境 ✅ 拆 3 台機器,參考上表
正式環境、日誌量大 ✅ 至少 5 台,分出 ClickHouse 與 Kafka
已有 K8s 架構 ✅ 用 Helm Chart 部署