安装、迁移基于 Sentry 9 的错误跟踪系统

我给公司搭建错误跟踪系统,方便排查问题,技术选型为 Sentry
9,因为其开源、轻量、能满足业务需求,相比最新版 Sentry,其搭建、维护也更容易,最新版 Sentry 在我们业务中有点杀鸡用牛刀了

安装与配置

使用 Docker Compose 安装 Sentry 9

docker-compose.yml

version: '2'

volumes:
pgdb:

services:
redis:
image: redis
container_name: sentry-redis

postgres:
image: postgres
container_name: sentry-postgres
ports:
- 5432:5432
environment:
POSTGRES_USER: sentry
POSTGRES_PASSWORD: sentry
POSTGRES_DB: sentry
TZ: Asia/Shanghai
volumes:
- pgdb:/var/lib/postgresql/data

sentry:
image: sentry
container_name: sentry
links:
- redis
- postgres
ports:
- 9090:9000
environment:
SENTRY_SECRET_KEY: '[email protected]!^1r3%5fx7wdncq4a3)[email protected](dt%7eqiu8!87'
SENTRY_POSTGRES_HOST: postgres
SENTRY_DB_USER: sentry
SENTRY_DB_PASSWORD: sentry
SENTRY_REDIS_HOST: redis
TZ: Asia/Shanghai

cron:
image: sentry
container_name: sentry-cron
links:
- redis
- postgres
command: "sentry run cron"
environment:
SENTRY_SECRET_KEY: '[email protected]!^1r3%5fx7wdncq4a3)[email protected](dt%7eqiu8!87'
SENTRY_POSTGRES_HOST: postgres
SENTRY_DB_USER: sentry
SENTRY_DB_PASSWORD: sentry
SENTRY_REDIS_HOST: redis
TZ: Asia/Shanghai

worker:
image: sentry
container_name: sentry-work-1
links:
- redis
- postgres
command: "sentry run worker"
environment:
SENTRY_SECRET_KEY: '[email protected]!^1r3%5fx7wdncq4a3)[email protected](dt%7eqiu8!87'
SENTRY_POSTGRES_HOST: postgres
SENTRY_DB_USER: sentry
SENTRY_DB_PASSWORD: sentry
SENTRY_REDIS_HOST: redis
TZ: Asia/Shanghai

启动:

docker comopse up

Nginx 配置 Sentry 域名

server {
server_name [your_domain];
listen 80;
location / {
proxy_pass [your_host_ip]:9090;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}

初始化数据库数据

使用 Django 迁移初始化数据库数据

docker exec -it sentry sentry upgrade

创建超级用户

docker-compose exec sentry sentry createuser --email [email protected] --password your_password --superuser

配置 Sentry

域名配置

https://your-sentry-domain/manage/settings/ 中修改

image.png

邮件配置

修改 /etc/sentry/config.yml 中邮件的配置

# mail.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
# The email address to send on behalf of
# mail.from: '[email protected]'

修改后:

image.png

使用 webhook 将警报接入飞书

在飞书群中接入机器人,项目配置机器人 webhook 后,当出现指定错误时,在群里告警

image.png

用户密码修改

image.png

几个问题

1、可能的坑:日志报错 relation “sentry_projectkey” does not exist

ProgrammingError('relation "sentry_projectkey" does not exist\nLINE 1: ...te_limit_window", "sentry_projectkey"."data" FROM "sentry_pr...\n                                                             ^\n',)
SQL: SELECT "sentry_projectkey"."id", "sentry_projectkey"."project_id", "sentry_project

原因:没有初始化数据库数据

解决方式:初始化数据库数据

docker exec -it sentry sentry upgrade

2、页面报错

NotFoundError: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.

#### Uhhhh

Something went horribly wrong rendering this page. We use a decent error reporting service so this will probably be fixed soon. Unless our error reporting service is also broken. That would be awkward. Anyway, we apologize for the inconvenience.

原因:浏览器前端静态资源缓存的问题

解决方式:清浏览器缓存

3、通知发送问题

希望配置每个 Alert 都能通过告警机器人中发送到飞书群中,但出现有的可以发送,有的不可以发送,还没有找到原因

迁移 Sentry

为提供稳定性和访问速度,我将 Sentry 从物理机到腾讯云上

迁移用户、项目数据命令:

# 导出 Sentry 现有数据到 backup.json 中
docker exec -it sentry sentry export backup.json

# 将 backup.json 中数据导入到新 Sentry 中
docker exec -it sentry sentry import backup.json
  • 可使用 Another Redis Desktop Manager APP 连接 Redis

可能的坑

迁移后出现新用户注册报错的情况

image.png

image.png

原因:用户主键重复

解决方式:使用 pgAdmin4 工具连接 PostgreSQL 数据库,再执行以下操作

SELECT * FROM auth_user;

// 查看当前主键
SELECT last_value FROM "auth_user_id_seq";

// 修改
SELECT setval('auth_user_id_seq', 22, false);

相关链接

Depp Wang wechat
个人公众号