Sentry 部署踩坑記

背景

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,麻煩。但能及時獲取頁面報錯的工具,深受前端開發者的喜好,對於線上業務的穩定性也有很大幫助。因而重蹈覆轍,踩在巨人肩膀上,搭建一套錯誤監控平臺。後期根據效果評估進行深刻二次封裝開發,先從踩坑提及。node

踩的比較結實的坑

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,可是有的時候不會須要手動建立nginx

docker-compose run --rm web createuser
複製代碼

4.Root URL

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

5.開啓sourcemap

核心:github

  • 編譯打開sourcemap,
  • 將編譯完成的sourcemap & 靜態資源 , 傳到sentry服務器上面
  • 建立版本號(能夠建立一個,也能夠建立n個,能夠經過平臺或者sentry-cli管理版本號)
# 組織:sentry
# 項目:internal
# 版本號:xx@1.0.1

sentry-cli releases -o sentry -p internal new xx@1.0.1
複製代碼

上傳sourcemapweb

# 組織: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 存儲sql

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實現負載均衡,對應到實例

相關文章
相關標籤/搜索