Sentry 平台部署及维护
一、环境
单台服务器
https://github.com/getsentry/onpremise
Requirements
Docker 19.03.6+
Compose 1.24.1+
8 GB RAM
Python 3.6.8 (默认安装需要3,指定参数也能装2的)
二、部署步骤
1、安装docker环境
参考:略
2、安装 docker-compose
文档:https://docs.docker.com/compose/install/
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
3、部署sentry
git clone https://github.com/getsentry/onpremise.git
cd onpremise
4、修改配置文件
cd到项目目录,配置文件均在sentry文件夹内,环境变量文件env在项目跟目录下
sentry/config.example.yml
sentry/sentry.conf.example.py
.env #规定了下载哪个版本的sentry,默认是最新开发版
第一次启动时,请在以上三个文件内修改,当执行./install.sh 后,会生成新的配置文件
config.yml
sentry.conf.py
后续就只更改以上两个配置文件
config.yml
设置邮箱,其他配置可酌情设置,默认mailbackend python3 写法如下。2和3的写法不同要注意
mail.backend: 'django_smtp_ssl.SSLEmailBackend' # Use dummy if you want to disable email entirely
mail.host: 'smtp.exmail.qq.com'
mail.port: 465
mail.username: '****@qq.com'
mail.password: '********'
mail.use-tls: true #这个配置注意,如果配置还是不能发送邮件,改为false
The email address to send on behalf of
mail.from: '****@qq.com'
邮箱密码为客户端授权密码!不是登录密码,在企业邮箱中设置
5、安装
./install.sh (不推荐,安装的是最新dev版)
安装指定版本
SENTRY_IMAGE=getsentry/sentry:21.1.0 ./install.sh
中间要求输入邮箱和密码
[root@localhost onpremise]# SENTRY_IMAGE=getsentry/sentry:21.1.0 ./install.sh
…
Created internal Sentry project (slug=internal, id=1)
Would you like to create a user account now? [Y/n]: y
Email: ****@qq.com
Password:
6、启动
启动
docker-compose up -d
重启
docker-compose restart
重启部分,加载配置文件(当修改config.yml或者sentry.conf.py)
docker-compose restart web worker cron sentry-cleanup
6.1 加载配置
第一种方法
进入容器sentry_onpremise_worker_1,直接编辑配置文件,然后重启docker。重启后更改的配置文件会直接拷贝到宿主机当时安装sentry项目根目录下的sentry文件夹
[root@iZ2ze3iupsiy8b90ptvxxmZ containers]# docker exec -it cd77d876d944 bash
root@cd77d876d944:/# cd /etc/sentry/
root@cd77d876d944:/etc/sentry# ls
Dockerfile config.example.yml config.yml config.yml_default requirements.example.txt requirements.txt sentry.conf.example.py sentry.conf.py
[root@iZ2ze3iupsiy8b90ptvxxmZ containers]# docker restart cd77d876d944
第二种方法
更改./install.sh 脚本所在目录下sentry文件夹内的配置文件,使用 docker-compose restart web worker cron sentry-cleanup 加载配置文件
第一种方法不是很推荐,因为更改配置后web页面上还是会显示旧的参数,但不影响使用!使用第二种访问web页面会正常显示
7、访问
http://127.0.0.1:9000
sentry是不带ssl的,需要自行搭建nginx
三、问题
1、SMTPAuthenticationError: (535, b’Error: authentication failed’)
请检查邮箱密码是否正确
2、ModuleNotFoundError: No module named ‘django_smtp_ssl’
缺少模块,安装
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eef28970d99b nginx:1.16 "nginx -g 'daemon of…" 3 weeks ago Up 21 hours 0.0.0.0:9000->80/tcp sentry_onpremise_nginx_1
b402b93d506c sentry-onpremise-local "/bin/sh -c 'exec /d…" 3 weeks ago Up 21 hours 9000/tcp sentry_onpremise_web_1
cd77d876d944 sentry-onpremise-local "/bin/sh -c 'exec /d…" 3 weeks ago Up 21 hours 9000/tcp sentry_onpremise_worker_1
有两个地方需要安装模块
sentry_onpremise_web_1 测试邮件功能在这个容器
sentry_onpremise_worker_1 邮件收发在work节点
docker exec -it b402b93d506c bash
pip install django-smtp-ssl
docker exec -it cd77d876d944 bash
pip install django-smtp-ssl
3、 获取客户端ip
架构上是 nginx —> sentry ,前面加了一个nginx ,而sentry本身是有nginx 的,所以sentry 的自动nginx配置需要修改下
配置再 安装目录 nginx/nginx.conf
更改添加如下配置
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Request-Id $request_id;
set_real_ip_from 172.21.0.1; # br网卡ip
real_ip_header X-Forwarded-For;
real_ip_recursive on;
然后进入sentry nginx容器 reload
四、备份
参考:
https://github.com/getsentry/onpremise/issues/364
https://docs.docker.com/storage/volumes/#backup-restore-or-migrate-data-volumes
由于是通过docker-compose安装的,只需要备份逻辑卷
查看所有逻辑卷 docker volume ls
DRIVER VOLUME NAME
local sentry-clickhouse
local sentry-data
local sentry-kafka
local sentry-postgres
local sentry-redis
local sentry-symbolicator
local sentry-zookeeper
local sentry_onpremise_sentry-clickhouse-log
local sentry_onpremise_sentry-kafka-log
local sentry_onpremise_sentry-secrets
local sentry_onpremise_sentry-smtp
local sentry_onpremise_sentry-smtp-log
local sentry_onpremise_sentry-zookeeper-log
需要备份逻辑卷
local sentry-clickhouse
local sentry-data
local sentry-kafka
local sentry-postgres 大多数数据都在Postgres中
local sentry-redis
local sentry-symbolicator
local sentry-zookeeper
docker exec -t $POSTGRES_CONTAINER_NAME pg_dump -c -U postgres postgres | gzip > $BACKUP_PATH
官方后续会推出 sentry 备份方案