背景
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 bashroot@0c6ca0eb2f54:/# psql -h 127.0.0.1 -d postgres -U postgrespostgres=# SELECT * FROM xxx复制代码
2. 按照步骤安装完 报错
第一步
# run sentry shelldocker-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:
- 配置2: 然后nginx proxy 到http://1.2.3.4:9000/
- 配置3【强烈推荐】: 这样跟便于配置nginx
5.开启sourcemap
核心:
- 编译打开sourcemap,
- 将编译完成的sourcemap & 静态资源 , 传到sentry服务器上面
- 创建版本号(可以创建一个,也可以创建n个,可以通过平台或者sentry-cli管理版本号)
# 组织:sentry# 项目:internal# 版本号:xx@1.0.1sentry-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 CLEFT 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) DESCLIMIT 5;复制代码
8.一台物理机如何部署多个实例
- onpremise 多实例
- 代码部署服务到不同路径下面,多次根据git安装提示进行安装
- 同一台机器上报的服务支持多端口?
- 很好,支持多端口配置,互不影响
- 数据存储存储存到了哪儿?多个数据库中 ,仔细看NAMES
- SELECT view FROM sentry_groupedmessage; 查看具体报错
- nginx负载均衡?
- 云本身有负载均衡,但是无法实现一个负载均衡对应一台机器上的多台实例
- 单台上面nginx实现负载均衡,对应到实例