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
最上面是兩個前端:一個是經過支持各類編程語言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 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上了。分給你的組員,讓他快速解決就行了。
總之,強烈推薦!