Sentry 部署踩坑記

Keelvin發表於2019-04-02

背景

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
複製程式碼

解決方案1

第二步

解決方案2

3. 沒有提示建立第一個使用者

docker-compose run --rm web upgrade
複製程式碼

理論上upgrade這個步驟會提示建立superuser,但是有的時候不會需要手動建立

docker-compose run --rm web createuser
複製程式碼

4.Root URL

這個坑踩結實了!!一進來就讓設定Root URL這個找了一天,沒找到怎麼修改。最後發現配置連結可以修改

Sentry 部署踩坑記
Sentry 部署踩坑記

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
複製程式碼

Sentry 部署踩坑記

6.Sentry 基礎安裝對依賴環境的空間要求

答:至少1G 儲存

Sentry 部署踩坑記

Sentry 部署踩坑記

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

Sentry 部署踩坑記

Sentry 部署踩坑記

// 檢視佔用空間排行前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實現負載均衡,對應到例項

Sentry 部署踩坑記