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 NAMES0.0.0.0:9000->80/tcp sentry_onpremise_nginx_19000/tcp sentry_onpremise_subscription-consumer-events_19000/tcp sentry_onpremise_ingest-consumer_19000/tcp sentry_onpremise_cron_19000/tcp sentry_onpremise_subscription-consumer-transactions_19000/tcp sentry_onpremise_post-process-forwarder_19000/tcp sentry_onpremise_sentry-cleanup_19000/tcp sentry_onpremise_web_19000/tcp sentry_onpremise_worker_11218/tcp sentry_onpremise_snuba-subscription-consumer-transactions_11218/tcp sentry_onpremise_snuba-transactions-consumer_11218/tcp sentry_onpremise_snuba-sessions-consumer_11218/tcp sentry_onpremise_snuba-api_11218/tcp sentry_onpremise_snuba-outcomes-consumer_11218/tcp sentry_onpremise_snuba-consumer_11218/tcp sentry_onpremise_snuba-replacer_11218/tcp sentry_onpremise_snuba-subscription-consumer-events_13000/tcp sentry_onpremise_relay_11218/tcp sentry_onpremise_snuba-cleanup_19092/tcp sentry_onpremise_kafka_16379/tcp sentry_onpremise_redis_15432/tcp sentry_onpremise_postgres_13021/tcp sentry_onpremise_symbolicator_12181/tcp, 2888/tcp, 3888/tcp sentry_onpremise_zookeeper_125/tcp sentry_onpremise_smtp_18123/tcp, 9000/tcp, 9009/tcp sentry_onpremise_clickhouse_111211/tcp sentry_onpremise_memcached_13021/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.gzcd onpremise-20.12.1
如果你想批改Docker 的默认存储地位(比方默认分区空间不够等),能够参考这个链接。
首先要先启动 Docker 服务,否则间接运行装置脚本有显示如下信息:
onpremise-20.12.1$ ./install.shtee: sentry_install_log-2020-12-24_16-39-16.txt: Permission deniedChecking 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.shChecking 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 97Cleaning 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.shChecking 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 ResolutionError: 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.el7Error: 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.el7Error: Package: docker-ce-rootless-extras-20.10.1-3.el7.x86_64 (docker-ce-stable) Requires: slirp4netns >= 0.4Error: 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-augeaspuppet-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.rpmrpm -i slirp4netns-0.4.3-4.el7_8.x86_64.rpmwget http://mirror.centos.org/centos/7/extras/x86_64/Packages/fuse-overlayfs-0.7.2-6.el7_8.x86_64.rpmrpm -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: 25mail.username: ''mail.password: ''mail.use-tls: false
新版的sentry 自带smtp服务器,这几项都留空就好了
另外能够通过批改配置文件的 SENTRY_SINGLE_ORGANIZATION 参数,使得治理多个组织变得更不便。
零碎应用快一年了,从没有删数据的状况下,磁盘空间占用了近70G,上报的出错有几千万,零碎很稳固,排错好帮手。能够在其余局部反馈问题之前第一工夫收到报警邮件。
再也不必问客户你用的是什么操作系统、什么浏览器的、怎么操作的等等这些令人讨厌的问题。你要问的,都在Sentry上了。分给你的组员,让他疾速解决就好了。
总之,强烈推荐!