Sentry

【Sentry】安裝 Sentry (docker)

Sentry 是一個開源的錯誤追蹤系統,可用於收集應用程式中的例外與錯誤資訊。你可以透過 Docker 或直接在 Ubuntu 上安裝。以下是兩種方式的詳細步驟。


✅ 使用 Docker 安裝 Sentry

Sentry 官方推薦使用 Docker 來部署,方便快速、維護簡單。

1. 安裝 Docker 與 Docker Compose(若尚未安裝)

sudo apt update
sudo apt install docker.io docker-compose -y
sudo systemctl enable docker
sudo systemctl start docker

2. 下載 Sentry 安裝腳本

git clone https://github.com/getsentry/self-hosted.git sentry-self-hosted
cd sentry-self-hosted

3. 設定環境變數

你可以修改 .env 或使用預設值即可。

4. 啟動安裝腳本

./install.sh

這個腳本會下載相關 images,初始化資料庫與設定等,需要一點時間(約 10–30 分鐘)。

5. 啟動服務

docker-compose up -d

6. 瀏覽器開啟 Sentry UI

打開 http://<your-server-ip>:9000(預設埠號是 9000),開始進行帳號註冊與專案設定。


✅ 在 Ubuntu 上原生安裝 Sentry(不建議,較複雜)

Sentry 的原生安裝比較繁瑣,不建議除非你有特別需求(如不使用 Docker 的環境)。以下是基本流程:

1. 安裝必要套件

sudo apt update
sudo apt install python3 python3-pip python3-venv redis postgresql libpq-dev build-essential -y

2. 建立 PostgreSQL 資料庫

sudo -u postgres psql
CREATE DATABASE sentry;
CREATE USER sentry WITH PASSWORD 'sentry';
GRANT ALL PRIVILEGES ON DATABASE sentry TO sentry;
\q

3. 安裝並設定虛擬環境

python3 -m venv sentry-venv
source sentry-venv/bin/activate
pip install --upgrade pip setuptools wheel

4. 安裝 Sentry

pip install sentry

5. 初始化 Sentry

sentry upgrade

這一步會要求你建立一個帳號。

6. 啟動服務

sentry run web

你可以另開終端機,啟動 worker 與 cron:

sentry run worker
sentry run cron

你可能還需要用 nginxgunicorn 建立完整服務。


✅ 總結比較

方式 優點 缺點
Docker 快速、官方支援、易維護 需安裝 Docker
原生 Ubuntu 更靈活、自行控管細節 安裝繁瑣、難維護、容易踩雷

Sentry CSRF Verification Failed


https://github.com/getsentry/self-hosted/issues/2865

image-1744006079789.png

 

# 出現錯誤,請在以下檔案
sentry/sentry.conf.py
# 填入你機器真實ip:port
CSRF_TRUSTED_ORIGINS = ["sentry.mydomain.com", "127.0.0.1:9000"]
ex.
CSRF_TRUSTED_ORIGINS = ["10.10.0.1:9000"]

 

【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 台機器 起步:

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


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

服務 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 部署