背景
Open-source error tracking that helps developers monitor and fix crashes in real time. Iterate continuously. Boost efficiency. Improve user experience.
總之是一個聽起來非常牛逼的開源的報錯收集服務,目前公司裡有一個比較奇怪的現象,server、app都有對應的監控系統,唯獨H5沒有完美的解決方案。可能是H5詭異的case太多了,而且追查還需要依賴sourcemap,麻煩。但能及時獲取頁面報錯的工具,深受前端開發者的喜愛,對於線上業務的穩定性也有很大幫助。於是重蹈覆轍,踩在巨人肩膀上,搭建一套錯誤監控平臺。後期根據效果評估進行深入二次封裝開發,先從踩坑說起。
踩的比較結實的坑
1. postgresql
> docker exec -it onpremise_postgres_1 bash
root@0c6ca0eb2f54:/# psql -h 127.0.0.1 -d postgres -U postgres
postgres=# SELECT * FROM xxx
複製程式碼
2. 按照步驟安裝完 報錯
第一步
# run sentry shell
docker-compose run --rm web shell
複製程式碼
第二步
3. 沒有提示建立第一個使用者
docker-compose run --rm web upgrade
複製程式碼
理論上upgrade這個步驟會提示建立superuser,但是有的時候不會需要手動建立
docker-compose run --rm web createuser
複製程式碼
4.Root URL
這個坑踩結實了!!一進來就讓設定Root URL這個找了一天,沒找到怎麼修改。最後發現配置連結可以修改
- 另外推薦一個比較好的做法
- 配置1:http://1.2.3.4:9000/
- 配置2:xx.xx.com 然後nginx proxy 到http://1.2.3.4:9000/
- 配置3【強烈推薦】:xx.xx.com/sentry 這樣跟便於配置nginx
5.開啟sourcemap
核心:
- 編譯開啟sourcemap,
- 將編譯完成的sourcemap & 靜態資源 , 傳到sentry伺服器上面
- 建立版本號(可以建立一個,也可以建立n個,可以通過平臺或者sentry-cli管理版本號)
# 組織:sentry
# 專案:internal
# 版本號:xx@1.0.1
sentry-cli releases -o sentry -p internal new xx@1.0.1
複製程式碼
上傳sourcemap
# 組織:sentry
# 專案:internal
# 版本號:xf@1.0.1
# 靜態資源sentry伺服器位置:/root/dist/
# 線上靜態資源訪問位置(除了域名之外的URI,這裡是 https://xxx.xxx.xxx/js/index.js,指的就是 ):~/js/
# --rewrite 是覆蓋之前的版本
sentry-cli releases -o sentry -p internal files xf@1.0.1 upload-sourcemaps /root/dist/ --url-prefix '~/js/' --rewrite
複製程式碼
6.Sentry 基礎安裝對依賴環境的空間要求
答:至少1G 儲存
7.Sentry 資料存在什麼地方
- docker資料庫映象約1G
- 資料庫初始化佔用空間約 20G
- 單條資料約121Kb
- 讀取目前排行前6的表,也是報錯資訊主要儲存的地方(如下表)
- 目前一共28條報錯記錄,以儲存前6個表資料總和*2來估算空間,單條資料,對應PostgreSQL儲存為:121k(1074k * 2 / 28)
表名 | Size | 資料量 | 平均每條記錄大小 |
---|---|---|---|
nodestore_node | 528k | 96 | 5.5k |
sentry_groupedmessage | 328k | 28 | 11.7k |
sentry_eventtag | 280k | 822 | 0.34k |
sentry_messagefiltervalue | 216k | 283 | 1k |
sentry_filtervalue | 192k | 64 | 3k |
sentry_message | 160k | 96 | 1.66K |
// 檢視佔用空間排行前5的表
SELECT
relname AS "relation",
pg_size_pretty (
pg_total_relation_size (C .oid)
) AS "total_size"
FROM
pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C .relnamespace)
WHERE
nspname NOT IN (
'pg_catalog',
'information_schema'
)
AND C .relkind <> 'i'
AND nspname !~ '^pg_toast'
ORDER BY
pg_total_relation_size (C .oid) DESC
LIMIT 5;
複製程式碼
8.一臺物理機如何部署多個例項
- onpremise 多例項
- 程式碼部署服務到不同路徑下面,多次根據git安裝提示進行安裝
- 同一臺機器上報的服務支援多埠?
- 很好,支援多埠配置,互不影響
- 資料儲存儲存存到了哪兒?多個資料庫中 ,仔細看NAMES
- SELECT view FROM sentry_groupedmessage; 檢視具體報錯
- nginx負載均衡?
- 雲本身有負載均衡,但是無法實現一個負載均衡對應一臺機器上的多臺例項
- 單臺上面nginx實現負載均衡,對應到例項