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