Sentry 部署

什么是 Sentry? 我为什么要使用它?

简单来讲,Sentry可以监控线上项目,将每一个报错上报,整理,主动推送给你的邮箱。

如果你恰巧需要这样一个功能,那选Sentry准没错。至于Sentry其他更高级的功能,可以等入门之后慢慢了解。

Sentry 使用途径

Sentry可以自建服务,也可以采用官方提供的服务。官方提供的服务有免费的有收费的。以下是各个途径的功能对比。

功能列表自建服务免费版团队版商业版
多个项目管理
监控报错
邮件通知
开通子账户×
一个月以上数据保存×
作为插件接入其他管理平台××
更多花里胡哨的统计×××

官方服务

官方服务到 官网(https://sentry.io/signup) 注册一个账号即可使用。

自建服务

部署 Sentry 有两种方式。DockerPython

  • Docker 部署复杂程度低,但对硬件要求高。最新版最低需要4核8G,历史版本最低内存也需要2400M
  • Python 部署复杂程度较高,对硬件要求低。

可以视情况选择合适的自建方式。

使用 Docker 部署 Sentry

自建 Sentry 服务吃力不讨好,Docker 需要太高的配置,Python 又存在学习门槛。如果仅仅为了使用 Sentry,我建议使用官方服务。
如果官方的免费版无法满足使用需求,可以考虑使用我的另一个开源产品: GGT Sentry White ,结合钉钉机器人,提供报错信息的分发和报错信息日志功能。

Docker 一键式部署

Sentry 官方提供一键式部署 Sentry,只需要克隆 github 上的脚本即可。

1
git clone https://github.com/getsentry/onpremise

若需要部署 2400M 大小内存限制的 Sentry,可以克隆历史版本。

1
git clone https://github.com/getsentry/onpremise/tree/20.12.1

克隆完成后进入目录,运行脚本 install.sh 即可使用。

使用 Python 部署 Sentry

必备环境

  • Python3
  • 关系型数据库(PostgreSQL)
  • 内存型数据库(Redis)
  • 进程守护(supervisor)

更新 apt 源

  • 先复制备份原文件
  • 然后修改为国内的阿里云镜像源
  • 删除开头的 # 注释
  • 更新 apt 源
1
2
3
4
cp /etc/apt/sources.list /etc/apt/sources.list.bak
sed -i "s/archive.ubuntu.com/mirrors.aliyun.com/g" /etc/apt/sources.list
sed -i '/^#/d' /etc/apt/sources.list
apt update

安装 PostgreSQL

安装

1
apt-get install postgresql

配置

1
vim /etc/postgresql/12/main/pg_hba.conf

将配置文件翻到最后,这里保存着各自连接方式,授权和鉴权。将

1
host    all   all   127.0.0.1/32    md5

一行最后的md5改为trust,意为信任localhost所有指令

创建数据库

  • 切换到 postgres 用户,以使用 PostgreSQL

    1
    sudo -i -u postgres
  • 创建数据

    1
    createdb sentry
  • 进入数据库

在 Sentry 部署中,我们并不需要进入 sentry 数据库,之后查看数据也有其他数据库查看工具。

1
psql sentry

安装 Redis

1
apt-get install redis

安装 virtualenv

virtualenvpython 用来部署独立环境的工具,类似于虚拟机,在virtualenv中部署的项目将独立于主服务。

安装

1
pip3 install virtualenv

使用

  • 创建文件夹

    1
    2
    3
    4
    5
    6
    7
    8
      mkdir /var/www
    ````

    * 创建独立环境

    ```bash
    cd /var/www
    virtualenv sentryEnv
  • 进入环境

    1
    2
    cd sentryEnv
    source bin/activate
  • 更新

    1
    bin/python -m pip install --upgrade pip
  • 退出环境

Python 部署 Sentry 的接下来全部指令均在 virtualenv 中运行,如非必要,不用退出。

1
deactivate

安装 Sentry 前的基础环境

libxml2-dev

  • 更新索引

    1
    apt-get update
  • 安装

    1
    apt-get install libxml2-dev

libxmlsec1-dev

  • ubuntu 20.04 libxmlsec1-dev 暂时无法通过 apt-get 安装,需要先安装一个安装程序 aptitude
    1
    apt-get install aptitude
  • 安装

aptitude 提供多种子依赖的安装模式,但是模式1并不能将 libxmlsec1-dev 的全部依赖安装完毕。所以在执行下面命令时一定要记得:第一次选择 Y/n/… 时要选择 n,第二次和第三次选择 Y

1
aptitude install libxmlsec1-dev

libxmlsec1-openssl

1
2
3
4
5
6
7
apt-get install libxmlsec1-openssl
```

#### pkg-config

```bash
apt-get install pkg-config

千呼万唤始出来,安装 Sentry

安装

1
pip install -U sentry

修改BUG

  • 在 Python 部署 21.6.3 版本的 Sentry 时存在一个类型错误需要修改。
1
vim /var/www/sentryEnv/lib/python3.8/site-packages/dataclasses.py
  • 查找错误
1
/typing._ClassVar
  • i,修改为typing.ClassVar

初始化

1
2
sentry init
sentry upgrade

安装 supervisor

安装

1
pip install supervisor

配置

1
vim /etc/supervisor/conf.d/sentry.conf

写入如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[program:sentry-web]
directory=/usr/local/lib/python3.8/dist-packages/sentry/
environment=SENTRY_CONF="~/.sentry"
command=sentry run web
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/sentry/sentry-web.log
stderr_logfile=/var/log/sentry/sentry-web.log

[program:sentry-worker]
directory=/usr/local/lib/python3.8/dist-packages/sentry/
environment=SENTRY_CONF="~/.sentry"
command=sentry run worker
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/sentry/sentry-worker.log
stderr_logfile=/var/log/sentry/sentry-worker.log

[program:sentry-cron]
directory=/usr/local/lib/python3.8/dist-packages/sentry/
environment=SENTRY_CONF="~/.sentry"
command=sentry run cron
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/sentry/sentry-cron.log
stderr_logfile=/var/log/sentry/sentry-cron.log

使用

1
2
3
4
5
6
7
8
9
10
11
12
# 查看所有进程的状态
supervisorctl status
# 停止all
supervisorctl stop all
# 启动all
supervisorctl start all
# 重启
supervisorctl restart
# 配置文件修改后使用该命令加载新的配置
supervisorctl update
# 重新启动配置中的所有程序
supervisorctl reload