Sentry 部署踩坑记

4,781 阅读3分钟

背景

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这个找了一天,没找到怎么修改。最后发现配置链接可以修改

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实现负载均衡,对应到实例