Sentry 简介
Sentry ['sentri]
- n.哨兵
- v.站岗;在…设岗哨
Sentry 是一个用于监控前后端出错和统计上报分析一体的一个开源软件系统。
Sentry 适合中等规模以上的网站的开发及生产线上出错管理。Sentry可以适应多租户多项目的管理。功能很完善。
官网地址: https://sentry.io/features/re...
因为软件架构比较复杂。建议采用官方的 docker-compose 脚本即onpremise
来安装。
Sentry 系统占用内存较多,最好有8G以上内存。因资源受限,我用的是4G内存+4G Swap分区的方式在 CentOS 7 上安装的。在收集几千万个错误上报后,系统仍然很流畅,可见其性能优良。
最新的 Sentry 系统由28个容器组成:
# 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个容器大概形成了以下的结构:
最上面是两个前端:一个是通过支持各种编程语言SDK上报事件的API入口,一个是通过React的单页面应用SPA实现的管理后台前端。
Sentry 通过提供SDK的方式,支持几乎所有主流的编程语言及各类框架接入,目前达88种之多。
存储方面,Sentry 采用了两种数据库 PostgreSQL 和 ClickHouse. 前者主要用于存储事件以外的,用户,团队组织等元数据和管理数据。后者则是以高性能、宽表、海量数据支持能力而闻名的 ClickHouse 数据库。
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
直到完成全部的依赖项。
应该说安装脚本还是很完善的,逐一按提示安装就好了。我是在原有版本上升级的,原有数据虽然做了数据库导出备份,但最好也都没有用上,期中的数据也都平滑升级。
升级后一个邮件发送配置的警告:
是因为系统的一个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服务器,这几项都留空就好了
另外可以通过修改配置文件的 SENTRY_SINGLE_ORGANIZATION 参数,使得管理多个组织变得更方便。
系统使用快一年了,从没有删数据的情况下,磁盘空间占用了近70G,上报的出错有几千万,系统很稳定,排错好帮手。可以在其他部分反馈问题之前第一时间收到报警邮件。
再也不用问客户你用的是什么操作系统、什么浏览器的、怎么操作的等等这些令人讨厌的问题。你要问的,都在Sentry上了。分给你的组员,让他快速解决就好了。
总之,强烈推荐!