一、什么是Sentry?
Sentry可以幫助我們完成以下工作:例如,線上有一個bug,代碼的某處邏輯的NullPointerException造成了這個問題,Sentry會立即發現錯誤,並通過郵件或其他基於通知規則的集成通知到相關責任人員,這個通知可以把我們引入到一個指示板,這個指示板為我們提供了快速分類問題所需的上下文,如:頻率、用戶影響、代碼那一部分受到影響以及那個團隊可能是問題的所有者。
然后,它會顯示幫助我們調試的詳細信息,比如堆棧跟蹤、堆棧本地信息、前面的事件、可能導致問題的提交以及在錯誤發生時捕獲的定制數據。我們還可以在JIRA等項目管理工具中自動開始跟蹤問題。
二、Sentry原理
Sentry到底是如何實現實時日志監控報警的呢?首先,Sentry是一個C/S架構,我們需要在自己應用中集成Sentry的SDK才能在應用發生錯誤是將錯誤信息發送給Sentry服務端。根據語言和框架的不同,我們可以選擇自動或自定義設置特殊的錯誤類型報告給Sentry服務端。
而Sentry的服務端分為web、cron、worker這幾個部分,應用(客戶端)發生錯誤后將錯誤信息上報給web,web處理后放入消息隊列或Redis內存隊列,worker從隊列中消費數據進行處理。
三、安裝部署(docker方式安裝)
Sentry服務依賴比較多,並且官方也推薦使用docker方式進行安裝,需要先部署docker環境
1.安裝docker環境
# 安裝docker依賴環境 [root@sentry ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加yum源 [root@sentry ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安裝docker-ce [root@sentry ~]# yum install docker-ce # 安裝docker-compose [root@sentry ~]# curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose [root@sentry ~]# chmod +x /usr/local/bin/docker-compose [root@sentry ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose # 或者直接通過pip方式安裝 [root@sentry ~]# git clone https://github.com/getsentry/onpremise.git pip install docker-compose
docker官方文檔:
https://docs.docker.com/install/linux/docker-ce/centos/
https://docs.docker.com/compose/install/
2.啟動docker服務
[root@sentry ~]# systemctl start docker [root@sentry ~]# systemctl enable docker
3.從sentry官方網站下載源碼
[root@sentry ~]# git clone https://github.com/getsentry/onpremise.git
然后切換到onpremise目錄下,可以直接執行./install.sh腳本進行一鍵安裝,不過在安裝之前需要修改幾個配置項
[root@sentry ~]# cd onpremise [root@sentry onpremise]# vim docker-compose.yml # NOTE: This docker-compose.yml is meant to be just an example of how # you could accomplish this on your own. It is not intended to work in # all use-cases and must be adapted to fit your needs. This is merely # a guideline. # See docs.getsentry.com/on-premise/server/ for full # instructions version: '3.4' x-defaults: &defaults restart: unless-stopped build: context: . args: SENTRY_IMAGE: ${SENTRY_IMAGE} depends_on: - redis - postgres - memcached - smtp env_file: .env environment: SENTRY_EMAIL_BACKEND: 'django_smtp_ssl.SSLEmailBackend' SENTRY_MAILER_EMAIL_BACKEND: EMAIL_BACKEND SENTRY_MEMCACHED_HOST: memcached SENTRY_REDIS_HOST: redis # 新增以下內容,也可以不配置,等全部安裝好,首次進入系統時也可以進行配置 SENTRY_POSTGRES_HOST: postgres SENTRY_EMAIL_HOST: "smtp.mxhichina.com" SENTRY_EMAIL_USER: "xulei@xl-blog.cn" SENTRY_SERVER_EMAIL: "xulei@xl-blog.cn" SENTRY_EMAIL_PASSWORD: "passwod" SENTRY_EMAIL_USE_TLS: "false" # 如果你使用的服務器不讓用25端口,則需要開啟TLS,將flase改為true即可 SENTRY_EMAIL_PORT: 25 # TLS為true改為456或587 volumes: - sentry-data:/var/lib/sentry/files services: smtp: restart: unless-stopped image: tianon/exim4 memcached: restart: unless-stopped image: memcached:1.5-alpine redis: restart: unless-stopped image: redis:3.2-alpine postgres: restart: unless-stopped image: postgres:9.5 volumes: - sentry-postgres:/var/lib/postgresql/data web: <<: *defaults ports: - '9000:9000' cron: <<: *defaults command: run cron worker: <<: *defaults command: run worker volumes: sentry-data: external: true sentry-postgres: external: true
修改sentry.conf.py文件
[root@sentry onpremise]# vim sentry.conf.py # 在文件首部增加這兩行代碼,如果不加的話,可以在后面使用郵件功能會出現”SMTPServerDisconnected: Connection unexpectedly closed“錯誤 import socket socket.setdefaulttimeout(20)
現在可以執行./install.sh腳本進行自動安裝,腳本安裝過程中會讓你輸入郵箱和密碼,這個是作用於首次登陸時使用
腳本安裝完,可以執行以下命令啟動容器
[root@sentry onpremise]# docker-compose up -d WARNING: The SENTRY_IMAGE variable is not set. Defaulting to a blank string. Creating network "onpremise_default" with the default driver Creating onpremise_postgres_1 ... done Creating onpremise_redis_1 ... done Creating onpremise_smtp_1 ... done Creating onpremise_memcached_1 ... done Creating onpremise_web_1 ... done Creating onpremise_cron_1 ... done Creating onpremise_worker_1 ... done
四、登陸sentry后台
sentry服務默認是啟動在9000端口,你可以在瀏覽器中輸入http://<你的ip>:9000
輸入剛剛執行腳本時輸入的賬號和密碼登陸即可。
然后我們進入到admin后台,測試一下郵件功能,看郵件是否能正常發送,如果你的郵箱收到如下信息,則說明郵件服務配置無問題:
五、Sentry初次體驗
經過上面的步驟,Sentry的基礎環境也都配置好,接下來我們需要來感受一下Sentry的強大之處
1.創建一個project
創建完成后,點擊python代碼,因為我們是用python代碼進行測試,Sentry會為我們生成一個簡單的測試demo,不過我們需要先安裝它的sdk
把上面的代碼放到自己的py文件中,執行后,系統會報錯,這個時候你可以在后台看到這個錯誤,這個代碼中最主要的是init目標中的代碼,Sentry也是通過它給服務端上報錯誤信息的
以上就是全部安裝過程