Sentry是一个开源的实时错误追踪系统,可以帮助开发者实时监控并修复异常问题,支持web前后端移动应用以及游戏,支持 Python、Java、Go、Node.js、Django等主流编程语言和框架 ,还提供了GitHub、Slack、Trello等常见开发工具的集成。Sentry可以实时监控前端的日志,一旦发生异常会第一时间把报错的路由路径、错误所在文件等详细信息以钉钉消息形式通知我们,并且利用错误信息的堆栈跟踪快速定位到需要处理的问题,目前公司的前端一些项目接入了Sentry进行错误日志追踪。根据官方文档推荐,使用docker方式安装,此次安装环境版本如下:
Docker version:19.03.12docker-compose version:1.26.2
服务器配置至少需要2400M内存
1、克隆sentry仓库
$ git clone https://github.com/getsentry/onpremise.git$ cd onpremise
2、添加钉钉通知插件
$ cd sentry && vim requirements.example.txt 加入如下内容# Add plugins here# sentry-dingchat==0.0.1 该插件报警样式不友好,换成下面这个# 钉钉通知插件sentry-10-dingding# 发邮件支持SSL协议django-smtp-ssl~=1.0# 钉钉插件需要的依赖redis-py-cluster==1.3.6
3、修改config.yml,配置邮件发送参数(可选)
# 虽然是使用钉钉消息,但是也把邮件方式的配置说明下cp sentry.conf.example.py sentry.conf.pycp config.example.yml config.ymlcp requirements.example.txt requirements.txt如果Sentry部署是在阿里云,那么只能使用tls来发送,我这里是本地服务器,使用qq邮箱进行配置vim config.ymlmail.backend: 'smtp'mail.host: 'smtp.exmail.qq.com'mail.port: 25mail.username: 'xx.xxxx@xxxx.com'mail.password: 'xxxxxxx'mail.use-tls: false# The email address to send on behalf ofmail.from: 'xx.xxxx@xxxx.com'
4、添加环境变量文件
# 修改 .env (没有可以创建),添加如下配置# 获取sentry key值,生成后的key添加到.env文件里docker-compose run web config generate-secret-keycp ~/onepremise/.env sentry/cat .env # 查看文件内容COMPOSE_PROJECT_NAME=sentry_onpremiseSENTRY_EVENT_RETENTION_DAYS=90SENTRY_IMAGE=getsentry/sentry:latestSNUBA_IMAGE=getsentry/snuba:latestRELAY_IMAGE=getsentry/relay:latestSYMBOLICATOR_IMAGE=getsentry/symbolicator:eac35a6058c7749bdf20ed219a377e49e02d0b76SENTRY_SECRET_KEY='72-(g_!*@1x(*&f*i1c5f&0(-^t3j=hhql8#&_l!i&c_b+p=tu' # 这是第一个命令生成的秘钥
5、安装
过程中会提示创建一个初始用户,根据内容进行输入,如果你需要修改默认运行端口:执行docker-compose down关闭已启动的容器,修改onpremise目录下的docker-compose.yml和sentry.conf.py 里面的对应端口,然后执行 docker-compose build重新编译,完成后docker-compose up -d重新启动。
# 执行 $ sh install.sh 或者$ docker-compose build# 注意:部署Sentry完成后,以后如果添加新的插件支持或者修改参数都得重新build,如下:# Build the services again after updating, and make sure we're up to date on patch version$ docker-compose build --pull# Run new migrations$ docker-compose run --rm web upgrade# Recreate the services$ docker-compose up -d$ docker-compose ps
6、Sentry历史数据清理
此次安装没有安装定时清理的docker镜像,因为一直拉不下来镜像,只能放弃,原因你懂的。删除docker-compose.yml文件里如下几行:
snuba-cleanup:<<: *snuba_defaultsimage: snuba-cleanup-onpremise-localbuild:context: ./cronargs:BASE_IMAGE: '$SNUBA_IMAGE'command: '"*/5 * * * * gosu snuba snuba cleanup --dry-run False"'
没有了清理Sentry数据的镜像,只能通过手动进行清理。
$ docker exec -it sentry_onpremise_worker_1 bash$ sentry cleanup --days 60
7、安装完成,登入账号密码为上一步设置的用户名和密码,点击设置--->项目--->选择一个项目-->Legacy Integrations,找到DingDing插件并开启,如下图:
8、接下来进行配置钉钉机器人,使用钉钉建个群,然后创建钉钉机器人,拿到webhook地址及token,选择一个加密方式,根据上图在sentry中找到钉钉插件,配置钉钉token:
点击测试插件,钉钉收到信息,说明钉钉插件配置成功。
接下来进行前端项目的接入,具体细节参考大勇哥的呕心沥血之作《前端监控Sentry使用手册》,以下为我们前端项目接入后的钉钉消息图:可以看到消息内容有来自xxxx项目,还有简短的错误信息,更详细的错误日志可以点击“详细信息”跳转到sentry查看。