Sentry 10 升级到 Sentry 20

Sentry 简介

Sentry ['sentri]
  • n.哨兵
  • v.站岗;在…设岗哨

Sentry 是一个用于监控先后端出错和统计上报分析一体的一个开源软件系统。html

Sentry 适合中等规模以上的网站的开发及生产线上出错管理。Sentry能够适应多租户多项目的管理。功能很完善。前端

官网地址: https://sentry.io/features/re...linux

由于软件架构比较复杂。建议采用官方的 docker-compose 脚本即onpremise 来安装。nginx

Sentry 系统占用内存较多,最好有8G以上内存。因资源受限,我用的是4G内存+4G Swap分区的方式在 CentOS 7 上安装的。在收集几千万个错误上报后,系统仍然很流畅,可见其性能优良。git

最新的 Sentry 系统由28个容器组成:github

# docker ps --format 'table {{ .Ports }}\t{{.Names}}'
PORTS                          NAMES
0.0.0.0:9000->80/tcp           sentry_onpremise_nginx_1
9000/tcp                       sentry_onpremise_subscription-consumer-events_1
9000/tcp                       sentry_onpremise_ingest-consumer_1
9000/tcp                       sentry_onpremise_cron_1
9000/tcp                       sentry_onpremise_subscription-consumer-transactions_1
9000/tcp                       sentry_onpremise_post-process-forwarder_1
9000/tcp                       sentry_onpremise_sentry-cleanup_1
9000/tcp                       sentry_onpremise_web_1
9000/tcp                       sentry_onpremise_worker_1
1218/tcp                       sentry_onpremise_snuba-subscription-consumer-transactions_1
1218/tcp                       sentry_onpremise_snuba-transactions-consumer_1
1218/tcp                       sentry_onpremise_snuba-sessions-consumer_1
1218/tcp                       sentry_onpremise_snuba-api_1
1218/tcp                       sentry_onpremise_snuba-outcomes-consumer_1
1218/tcp                       sentry_onpremise_snuba-consumer_1
1218/tcp                       sentry_onpremise_snuba-replacer_1
1218/tcp                       sentry_onpremise_snuba-subscription-consumer-events_1
3000/tcp                       sentry_onpremise_relay_1
1218/tcp                       sentry_onpremise_snuba-cleanup_1
9092/tcp                       sentry_onpremise_kafka_1
6379/tcp                       sentry_onpremise_redis_1
5432/tcp                       sentry_onpremise_postgres_1
3021/tcp                       sentry_onpremise_symbolicator_1
2181/tcp, 2888/tcp, 3888/tcp   sentry_onpremise_zookeeper_1
25/tcp                         sentry_onpremise_smtp_1
8123/tcp, 9000/tcp, 9009/tcp   sentry_onpremise_clickhouse_1
11211/tcp                      sentry_onpremise_memcached_1
3021/tcp                       sentry_onpremise_symbolicator-cleanup_1
注: docker ps 后加 format 参数,能够控制输出字段和格式,很方便写文档用。详见 Docker官网

以上的28个容器大概造成了如下的结构:web

image.png

最上面是两个前端:一个是经过支持各类编程语言SDK上报事件的API入口,一个是经过React的单页面应用SPA实现的管理后台前端。redis

Sentry 经过提供SDK的方式,支持几乎全部主流的编程语言及各种框架接入,目前达88种之多。docker

存储方面,Sentry 采用了两种数据库 PostgreSQL 和 ClickHouse. 前者主要用于存储事件之外的,用户,团队组织等元数据和管理数据。后者则是以高性能、宽表、海量数据支持能力而闻名的 ClickHouse 数据库。shell

ClickHouse经过 ZooKeeper 支持分布式架构,轻松实现对PB级数据量的支持。表列数仅受限于内存大小,由于每一列多应多个磁盘文件单独存储。高性能的实现很大程序上在于行只增,不作物理删除,经过顺序读写实现逻辑上的增删改查。所以IO方面大大优化传统的关系型数据库。同时ClickHouse支持 MySQL的方式访问,所以对于移植方面也很友好。

中间部分经过Kafka和Snuba这两个消息中间件,来完成复杂的事件处理过程。

Kafka 相信你们都很熟悉,Snuba 则实现了Kafka所缺乏的一些特性:在任意字段上提供快速事件搜索,筛选和聚合的服务。

软件系统报错,特别是互联网上,一般出的问题都是同样的。经过 Snuba 中间件,Sentry实现了对同类事件的合并处理,而再是反复处理一样的信息。同时在每个SDK客户端能够经过设置采样率,控制事件上报的频率。减小一样问题的重复上报。从而减小 Sentry 服务器的压力。

Sentry 系统就介绍到这里。下面咱们看一下升级中遇到的问题和相应的处理办法。

Sentry 10 升级到 Sentry 20

Sentry 20增长了Peformance 功能,能够经过上报数据来测量应用在各个环节上的性能。这个功能对测试客户端的功能特别有用。由于你本身没法完成用户端在大网环境下的客户所面对的各类各样的状况。

从官网下载安装脚本:

wget https://github.com/getsentry/onpremise/archive/20.12.1.tar.gz

解压:

tar xvf 20.12.1.tar.gz
cd onpremise-20.12.1

若是你想修改Docker 的默认存储位置(好比默认分区空间不够等),能够参考这个连接

首先要先启动 Docker 服务,不然直接运行安装脚本有显示以下信息:

onpremise-20.12.1$ ./install.sh
tee: sentry_install_log-2020-12-24_16-39-16.txt: Permission denied
Checking minimum requirements...
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

启动Docker服务:

systemctl start docker

再运行安装脚本:

onpremise-20.12.1# ./install.sh
Checking minimum requirements...
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
An error occurred, caught SIGERR on line 97
Cleaning up...
[centos onpremise-20.12.1]# systemctl start docker
[centos onpremise-20.12.1]#
You have new mail in /var/spool/mail/root
[centos onpremise-20.12.1]#
[centos onpremise-20.12.1]#
[centos onpremise-20.12.1]#
[centos onpremise-20.12.1]# ./install.sh
Checking minimum requirements...
FAIL: Expected minimum Docker version to be 19.03.6 but found 18.09.6

出错,要求Docker 版本最小为 19.03.6, 安装新版本Docker:

yum install docker-ce docker-ce-cli containerd.io

--> Finished Dependency Resolution
Error: Package: 3:docker-ce-20.10.1-3.el7.x86_64 (docker-ce-stable)
           Requires: container-selinux >= 2:2.74
           Installed: 2:container-selinux-2.33-1.git86f33cd.el7.noarch (@extras)
               container-selinux = 2:2.33-1.git86f33cd.el7
           Available: 2:container-selinux-2.21-1.el7.noarch (extras)
               container-selinux = 2:2.21-1.el7
           Available: 2:container-selinux-2.21-2.gitba103ac.el7.noarch (extras)
               container-selinux = 2:2.21-2.gitba103ac.el7
           Available: 2:container-selinux-2.28-1.git85ce147.el7.noarch (extras)
               container-selinux = 2:2.28-1.git85ce147.el7
Error: Package: containerd.io-1.4.3-3.1.el7.x86_64 (docker-ce-stable)
           Requires: container-selinux >= 2:2.74
           Installed: 2:container-selinux-2.33-1.git86f33cd.el7.noarch (@extras)
               container-selinux = 2:2.33-1.git86f33cd.el7
           Available: 2:container-selinux-2.21-1.el7.noarch (extras)
               container-selinux = 2:2.21-1.el7
           Available: 2:container-selinux-2.21-2.gitba103ac.el7.noarch (extras)
               container-selinux = 2:2.21-2.gitba103ac.el7
           Available: 2:container-selinux-2.28-1.git85ce147.el7.noarch (extras)
               container-selinux = 2:2.28-1.git85ce147.el7
Error: Package: docker-ce-rootless-extras-20.10.1-3.el7.x86_64 (docker-ce-stable)
           Requires: slirp4netns >= 0.4
Error: Package: docker-ce-rootless-extras-20.10.1-3.el7.x86_64 (docker-ce-stable)
           Requires: fuse-overlayfs >= 0.7
 You could try using --skip-broken to work around the problem
** Found 4 pre-existing rpmdb problem(s), 'yum check' output follows:
puppet-3.8.7-1.el7.noarch has missing requires of hiera >= ('0', '1.0.0', None)
puppet-3.8.7-1.el7.noarch has missing requires of ruby(selinux)
puppet-3.8.7-1.el7.noarch has missing requires of ruby-augeas
puppet-3.8.7-1.el7.noarch has missing requires of ruby-shadow

由于Docker是配置的Docker官网的镜像,安装还要依赖多个新版的软件库。参考如下连接解决:

https://www.cnblogs.com/gaowe...

即,从以下地址,下载 container-selinux 安装包 container-selinux-2.107-3.el7.noarch.rpm

http://mirror.centos.org/cent...

下载后安装:

# rpm -ivh container-selinux-2.107-3.el7.noarch.rpm

从新执行Docker安装命令,

# yum install docker-ce docker-ce-cli containerd.io

还有依赖,再装:

wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/slirp4netns-0.4.3-4.el7_8.x86_64.rpm
rpm -i slirp4netns-0.4.3-4.el7_8.x86_64.rpm
wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/fuse-overlayfs-0.7.2-6.el7_8.x86_64.rpm
rpm -i fuse-overlayfs-0.7.2-6.el7_8.x86_64.rpm

直到完成所有的依赖项。

应该说安装脚本仍是很完善的,逐一按提示安装就行了。我是在原有版本上升级的,原有数据虽然作了数据库导出备份,但最好也都没有用上,期中的数据也都平滑升级。

升级后一个邮件发送配置的警告:
image

是由于系统的一个bug致使的。按forum上 提示,修改 sentry/config.yml 文件

mail.host: 'smtp'
mail.use-ssl: false  #去除warning, 一个系统bug

#mail.backend: 'django.core.mail.backends.smtp.EmailBackend'  # Use dummy if you want to disable email entirely
#mail.host: 'localhost'
mail.port: 25
mail.username: ''
mail.password: ''
mail.use-tls: false

新版的sentry 自带smtp服务器,这几项都留空就行了

image.png

另外能够经过修改配置文件的 SENTRY_SINGLE_ORGANIZATION 参数,使得管理多个组织变得更方便。

image.png

系统使用快一年了,从没有删数据的状况下,磁盘空间占用了近70G,上报的出错有几千万,系统很稳定,排错好帮手。能够在其余部分反馈问题以前第一时间收到报警邮件。

不再用问客户你用的是什么操做系统、什么浏览器的、怎么操做的等等这些使人讨厌的问题。你要问的,都在Sentry上了。分给你的组员,让他快速解决就行了。

总之,强烈推荐!

相关文章
相关标签/搜索