一、Sentry 介绍
Sentry 是一个开源的实时错误报告工具,支持 web 前后端、移动应用以及游戏,支持 Python、OC、Java、Go、Node.js、Django、RoR 等主流编程语言和框架 ,还提供了 GitHub、Slack、Trello 等常见开发工具的集成。
二、Sentry 基本概念
Sentry 是什么
通常我们所说的 Sentry 是指 Sentry 的后端服务,由 Django 编写。8.0 版本使用了 React.js 构建前端 UI。使用 Sentry 前还需要在自己的应用中配置 Sentry 的 SDK —— 通常在各语言的包管理工具中叫做 Raven。
当然,Sentry 还可以是其公司所提供的 Sentry SaaS 服务。
DSN(Data Source Name)
Sentry 服务支持多用户、多团队、多应用管理,每个应用都对应一个 PROJECT_ID,以及用于身份认证的 PUBLIC_KEY 和 SECRET_KEY。由此组成一个这样的 DSN:
'{PROTOCOL}://{PUBLIC_KEY}:{SECRET_KEY}@{HOST}/{PATH}{PROJECT_ID}'
PROTOCOL 通常会是 http 或者 https,HOST 为 Sentry 服务的主机名和端口,PATH 通常为空。
三、Docker部署Sentry服务
官方提供Docker部署配置
环境要求
- Docker 17.05.0+
- Docker-Compose 1.17.0+
- 服务器配置只少需要3G内存
修改配置文件
1.拉取官方配置 git pull https://github.com/getsentry/onpremise
2.修改 config.yml
邮箱设置和system.url-prefix1
2
3
4
5
6
7
8
9
10mail.backend: 'smtp' # Use dummy if you want to disable email entirely
mail.host: 'localhost'
mail.port: 25
mail.username: ''
mail.password: ''
mail.use-tls: false
mail.from: 'root@localhost'
mail.subject-prefix: '[Sentry] '
system.url-prefix: 'https://sentry.example.com'
3.修改docker-compose.yml
配置,本人直接挂载宿主机目录上,没有使用docker volumes1
2
3
4
5#volumes:
# sentry-data:
# external: true
# sentry-postgres:
# external: true
4.修改sentry.conf.py
配置1
2
3
4
5
6
7
8
9
10
11
12
13
14# 在配置文件中 # General # 下面添加
SENTRY_DEFAULT_TIME_ZONE = 'Asia/Shanghai'
# 修改 workers 参数根据机器cpu核心来设置,添加 buffer-size 参数
SENTRY_WEB_OPTIONS = {
'http': '%s:%s' % (SENTRY_WEB_HOST, SENTRY_WEB_PORT),
'protocol': 'uwsgi',
# This is need to prevent https://git.io/fj7Lw
'uwsgi-socket': None,
'http-keepalive': True,
'memory-report': False,
'workers': 3, # the number of web workers
'buffer-size': 32768,
}
5.设置 SENTRY_SECRET_KEY
1
2
3
4$ cp .env.example .env
$ docker-compose run web config generate-secret-key # 获取 sentry key 值
$ cp .env.example .env # copy
$ vim .env # 把刚才生成的sentry key 配置到 SENTRY_SECRET_KEY='**************'
添加钉钉通知支持
vim requirements.txt
1
2
3
4# Add plugins here
sentry-dingding~=0.0.2 # 钉钉通知插件
django-smtp-ssl~=1.0 # 发邮件支持SSL协议
redis-py-cluster==1.3.4
四、构建
Docker build
注意:
部署Sentry,以后如果添加新的插件支持或者修改参数都得重新build
docker-compose build --pull
# Build the services again after updating, and make sure we’re up to date on patch version
docker-compose run --rm web upgrade
# Run new migrations
docker-compose up -d
# Recreate the services
启动后docker-compose ps
看到的结果1
2
3
4
5
6
7
8
9 Name Command State Ports
------------------------------------------------------------------------------------
sentry_cron_1 /entrypoint.sh run cron Up 9000/tcp
sentry_memcached_1 docker-entrypoint.sh memcached Up 11211/tcp
sentry_postgres_1 docker-entrypoint.sh postgres Up 5432/tcp
sentry_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp
sentry_smtp_1 docker-entrypoint.sh exim ... Up 25/tcp
sentry_web_1 /entrypoint.sh run web Up 0.0.0.0:9000->9000/tcp
sentry_worker_1 /entrypoint.sh run worker Up 9000/tcp
构建后镜像名描述
名称 | 描述 |
---|---|
sentry_cron | 定时任务,使用的是celery-beat |
sentry_memcached | memcached |
sentry_postgres | pgsql数据库 |
sentry_redis | 运行celery需要的服务 |
sentry_smtp | 邮件服务 |
sentry_web | 使用django+drf写的一套Sentry Web界面 |
sentry_worker | celery的worker服务,用来跑异步任务的 |
配置钉钉通知
Sentry服务启动后,任意选择一个项目
–> 点击设置
–> 点击Legacy Integrations
–> 搜索到DingDing
开启并配置钉钉机器人Access Token
五、配置外部反向代理
配置Nginx Sentry虚拟主机配置
1 | upstream sentry { |
六、Sentry历史数据清理
Sentry数据软清理 (清理完不会释放磁盘,如果很长时间没有运行,清理时间会很长)
1.保留60天数据。cleanup的使用delete命令删除postgresql数据,但postgrdsql对于delete, update等操作,只是将对应行标志为DEAD,并没有真正释放磁盘空间1
2$ docker exec -it sentry_worker_1 bash
$ sentry cleanup --days 60
2.postgres数据清理 (清理完后会释放磁盘空间)1
2$ docker exec -it sentry_postgres_1 bash
$ vacuumdb -U postgres -d postgres -v -f --analyze
3.定时清理脚本1
2
3
docker exec -i sentry_worker_1 sentry cleanup --days 60 && docker exec -i -u postgres sentry_postgres_1 vacuumdb -U postgres -d postgres -v -f --analyze
---本文结束感谢您的阅读。微信扫描二维码,关注我的公众号---
本文链接: https://www.yp14.cn/2019/11/05/sentry9-1-2部署/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!