一、Sentry简介
不知道大家有没有遇到这样的情况:我们的代码在本地测试时是没有问题得,不过一在线上运行就遇到各种奇奇怪怪的问题。既然不能完全避免线上的问题,那么就需要尽可能地减少线上问题对用户的影响,因此在进行系统设计时,线上监控系统是必不可少的。
但是,从头搭建和一个监控系统的成本非常高,如果你有线上错误和性能的监控需求,但公司内部没有现成的监控系统,那我的建议是直接使用一些开源的监控平台,比如Sentry。
Sentry具有有如下优点:
- 开源
- 前后端都支持
- 广泛的语言和框架支持
- 支持 SourceMap,这在前端打包压缩混淆代码的时候很方便我们定位问题
Sentry译为哨兵,是一个能够实时监控生产环境上的监控系统,一旦线上版本发生异常回立刻会把报错的路由路径、错误所在文件等详细信息通知给相关人员,然后开发人员就可以利用错误信息的堆栈跟踪快速定位到需要处理的问题。Sentry 提供了一个演示 Demo,你可以直接打开看看它具体都有哪些功能。
而且,Sentry 的代码是开源的,它既支持开发者自己搭建,也支持付费直接使用。如果你愿意付费使用,那就省去了自己搭建和维护 Python 服务的麻烦事了。如果想自己搭建的话,Sentry 后端服务是基于 Python 和 ClickHouse 创建的,需要自己使用物理机进行搭建。
二、环境搭建
2.1 服务器环境要求
- Docker 19.03.6+
- Compose 1.28.1+
- Python 3
环境搭建步骤参考:
官网说明:develop.sentry.dev/self-hosted…
Linux搭建教程zhuanlan.zhihu.com/p/340937905
2.2 Mac搭建
2.2.1 安装Docker
首先,下载Docker并进行安装,下载链接如下:mirrors.aliyun.com/docker-tool…。安装完成之后,系统会提示登录输入dockerid,可以去Docker官网申请一个账号即可。
安装成功之后,可以正确的获取版本信息:
>docker --version
Docker version 20.10.13, build a224086
>docker-compose --version
docker-compose version 1.29.2, build 5becea4c
2.2.2 获取sentry
接下来,将Sentry源码克隆到本地,Sentry源码链接,然后执行如下命令:
git clone https://github.com/getsentry/onpremise.git
当然,也可以直接下载源码,然后解压到对应的目录即可。然后执行如下命令:
./install.sh
此时,我们可能遇到问题如下。
问题一
./install/_lib.sh: line 22: realpath: command not found
解决的办法是,添加链接描述,直接使用下面的命令:
brew install coreutils
问题二
▶ Parsing command line ...
▶ Setting up error handling ...
▶ Checking minimum requirements ...
WARN: Recommended minimum CPU cores available to Docker is 4, found 2
FAIL: Required minimum RAM available to Docker is 3800 MB, found 1988 MB
解决方法可以参考:Required minimum RAM available to Docker错误。
问题三
Found Docker version 20.10.13
Found Docker Compose version 2.3.3
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
e9bbb3cc217f: Pulling fs layer
e9bbb3cc217f: Verifying Checksum
e9bbb3cc217f: Download complete
e9bbb3cc217f: Pull complete
Digest: sha256:ebadf81a7f2146e95f8c850ad7af8cf9755d31cdba380a8ffd5930fba5996095
Status: Downloaded newer image for busybox:latest
FAIL: The CPU your machine is running on does not support the SSE 4.2 instruction set, which is required for one of the services Sentry uses (Clickhouse). See https://github.com/getsentry/self-hosted/issues/340 for more info.
问题原因是机器运行的 CPU 不支持 SSE 4.2 指令集,这是 Sentry 使用的服务之一 (Clickhouse) 所必需的。
2.2.3 修改sentry配置
接下来,还需要修改docker-compose.yml配置来适应环境。首先,创建一个名为volname的数据卷,通过-v参数可以进行创建,如下。
docker volume create --name=sentry-data && docker volume create --name=sentry-postgres
当然,也可以使用docker volume create命令来进行创建。接着,创建一个虚拟环境的配置文件。
cp -n .env.example .env
接着,编译和标记Docker服务。
docker-compose build
如果编译成功,会输出如下信息:
Successfully built b29d9522511a
Successfully tagged onpremise_worker:latest
接着,生成密钥,并将它添加到.env作为SENTRY_SECRET_KEY。
docker-compose run --rm web config generate-secret-key
将生成的秘密串字符复制到docker-compose.yml文件对应中并保存,然后再将生成的key复制到docker-compose.yml文件中。
environment:
SENTRY_MEMCACHED_HOST: memcached
SENTRY_REDIS_HOST: redis
SENTRY_POSTGRES_HOST: postgres
SENTRY_EMAIL_HOST: smtp
#下面就是我加的
SENTRY_SECRET_KEY : 'dvw9w+4^%+ypj1z^#e%nt#h8w1i)@it84j+&m1npujr'
然后执行如下的命令更新配置:
docker-compose run --rm web upgrade
安装期间会弹出输入邮箱和密码的页面,在后面登陆sentry页面的时候回用到,邮箱一个可用邮箱就行,密码随意。
2.2.4 启动服务
最后,使用下面的命令启动所有的服务。
docker-compose up -d
然后在浏览器中输入http: //localhost:9000即可看到效果。