一、什么是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也是通过它给服务端上报错误信息的
以上就是全部安装过程