Sentry 为一套开源的应用监控和错误追踪的解决方案。这套解决方案由对应各种语言的 SDK 和一套庞大的数据后台服务组成。应用需要通过与之绑定的 token 接入 Sentry SDK 完成数据上报的配置。通过 Sentry SDK 的配置,还可以上报错误关联的版本信息、发布环境。同时 Sentry SDK 会自动捕捉异常发生前的相关操作,便于后续异常追踪。异常数据上报到数据服务之后,会通过过滤、关键信息提取、归纳展示在数据后台的 Web 界面中。
转转使用 Sentry 监控前端错误已经有好几年了。我们在 SDK 端封装的统一的 @zz-common/sentry
库。从而实现了 vue、react、小程序、node、ssr 的统一接入和错误分级管理。可以参考文章:转转商业前端错误监控系统(Sentry)策略升级。之前我们使用的 Sentry 是源码安装的老版本。后来客户端需要接入 Sentry 并上传 mapping 文件。但是老版本的 Sentry 总是上传失败。所以我们就准备升级一下 Sentry。本文就是用来记录 Sentry 升级部署和遇到的问题。
部署 Sentry 服务
快速的部署 Sentry 服务,官方提供了基于 Docker 的 Compose。Docker 用来构建和容器化应用的开源容器化技术。Compose 是用于配置和运行多 Docker 应用的工具,可以通过一个配置文件配置应用的所有服务,并一键创建和运行这些服务。
部署配置要求:
Docker 19.03.6+ Compose 1.24.1+ 4 CPU Cores 8 GB RAM 20 GB Free Disk Space
安装 docker
yum install docker -y
# 查看版本信息
docker info
或者
docker -v
docker 镜像加速:
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com", //国内官方镜像
"https://mirrors.tuna.tsinghua.edu.cn", //清华镜像
"http://hub-mirror.c.163.com", //网易163镜像
"https://docker.mirrors.ustc.edu.cn", //中科大镜像
]
}
# 重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
安装 docker-compose
wget -O /usr/local/bin/docker-compose https://github.com/docker/compose/releases/download/1.27.3/docker-compose-Linux-x86_64
chmod 777 /usr/local/bin/docker-compose
# 查看docker-compose 版本
docker-compose version
克隆源代码到安装目录:
git clone https://github.com/getsentry/onpremise.git
# 切换需要安装的分支
git checkout 21.4.1
运行部署脚本:
cd onpremise
./install.sh
启动服务
docker-compose up -d
Sentry 服务作用
通过 docker ps 命令,我们可以看到 Sentry 启动的很多服务
redis kafka clickhouse zookeeper postgres memcached stmp sentry-cron sentry-worker sentry-web nginx
Sentry 的整体的运行流程如下图:

配置文件
onpremise 部署之后的主要配置文件
config.yml:配置文件 sentry.conf.py:为 python 代码,覆盖或合并至 sentry 服务中,从而影响 sentry 运行。 .env:镜像版本、数据保留天数、端口等配置
升级 Sentry 服务
新的服务已经安装完成,现在需要把旧的数据迁移到新的服务上面来。之前的服务是使用的单独的 postgres 集群。
修改数据库配置
通过修改 sentry.conf.py 文件,把数据库配置到独立的集群
DATABASES = {
'default': {
'ENGINE': 'sentry.db.postgres',
'NAME': 'sentry',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'HOST',
'PORT': '7001',
'AUTOCOMMIT': True,
'ATOMIC_REQUESTS': False,
}
}
运行升级命令
sentry 提供了升级命令,一键升级数据库到对应的新版本,但是需要注意之前的版本需要是 9.1.2 之上。如果小于 9.1.2 是不兼容的。只能通过命令把用户和项目数据导出。放弃之前的错误信息。
docker-compose run --rm web upgrade
升级遇到的问题
磁盘占用过大的问题
随着数据的上报,服务器本地的磁盘占用会越来越大, Sentry 默认的配置保留 90 天来说,全量接入后磁盘占用会维持在一个比较大的值,同时这么大的数据量对数据的查询也是一个负担。为了减轻负担,需要从服务端和业务应用端同时入手。综合考虑我们将数据保留时长改为 7 天。修改 .env 文件即可:
SENTRY_EVENT_RETENTION_DAYS=7
同时需要修改 docker 数据存储位置修改。docker volume 默认挂载在 /var 目录下,我们的 /var 目录容量只有 100G,随着服务的运行会很快占满,需要对 docker volume 挂载目录进行修改。
# 在容量最大的目录下创建文件夹
mkdir -p /opt/var/lib
# 停止 docker 服务
systemctl stop docker
# 迁移数据
/bin/cp -a /var/lib/docker /opt/var/lib/docker && rm -rf /var/lib/docker && ln -s /opt/var/lib/docker /var/lib/docker
# 重启 docker 服务
systemctl start docker
用户数量丢失
升级之后用户数量获取失败,也就是 Sentry 服务获取不到真实的 IP。
在 Sentry 的管理后台中默认会关闭获取 IP,需要手动的打开。

来源: 大转转FE