在发开中我们会习惯的创建log日志,这样方便查看代码运行期间的请求过程与BUG的原因,以方便分析项目存在的一切隐患。但是问题来了,每个项目都需要创建log日志就显得特别繁琐,那么有没有一种工具可以管理多个项目的日志呢,即使是跨语言,跨平台的?那么这次就来了解一下Sentry
sentry是一个基于Django构建的现代化的实时事件日志监控、记录和聚合平台,主要用于如何快速的发现故障。支持几乎所有主流开发语言和平台,并提供了现代化UI,它专门用于监视错误和提取执行适当的事后操作所需的所有信息,而无需使用标准用户反馈循环的任何麻烦
sentry有两种搭建方法,python搭建与docker搭建,python原始搭建方法太过于复杂目前不叙述,这次依然是用神级容器docker来搭建,废话不多,现在开始。
centos7
docker
docker-compose 1.26
#docker分配内存建议4G或以上
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
#以下是卸载方法
sudo rm /usr/local/bin/docker-compose
docker pull redis
docker pull postgres
docker pull sentry
docker run -d --name sentry-redis redis
docker run -d --name sentry-postgres -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=sentry postgres
下面的操作会生成一个secret-key,记住此secret-key,后面要用到
docker run --rm sentry config generate-secret-key
docker run -it --rm -e SENTRY_SECRET_KEY='密钥' --link sentry-postgres:postgres --link sentry-redis:redis sentry upgrade
# 这一步会提示输入邮箱和密码
docker run -d -p 9000:9000 --name my-sentry -e SENTRY_SECRET_KEY='密钥' --link sentry-redis:redis --link sentry-postgres:postgres sentry
docker run -d --name sentry-cron -e SENTRY_SECRET_KEY='密钥' --link sentry-postgres:postgres --link sentry-redis:redis sentry run cron
docker run -d --name sentry-worker-1 -e SENTRY_SECRET_KEY='密钥' --link sentry-postgres:postgres --link sentry-redis:redis sentry run worker
此时sentry安装完成
使用ip:9000可以访问到sentry
按照以下流程创建sentry项目
下载模块
pip3 install raven
django项目settings中配置
INSTALLED_APPS = [
........................
# Sentry错误日志监控系统
'raven.contrib.django.raven_compat',
]
# Sentry错误日志监控系统(192.168.1.1请自行替换)
RAVEN_CONFIG = {
'dsn': 'http://[email protected]:9000/5',
}
配置完成之后我们我们现在去测试一下配置是否正确,到Django项目中创建一个test文件夹并添加sentry_test.py文件,内容如下:
dsn = "http://[email protected]:9000/5"
from raven import Client
Client = Client(dsn)
try:
1 / 0
except ZeroDivisionError:
Client.captureException()
右击运行这个Python文件,运行完成之后我们可以在Sentry后台看到告警信息,一旦代码发生错误,错误日志就会自动的收集到sentry中
docker ps
"""
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d5e00ec32cbd sentry "/entrypoint.sh run …" 2 weeks ago Exited (255) 2 weeks ago 9000/tcp sentry-worker-1
e5f791249660 sentry "/entrypoint.sh run …" 2 weeks ago Exited (255) 2 weeks ago 9000/tcp sentry-cron
e76db0b3bbe8 sentry "/entrypoint.sh run …" 2 weeks ago Exited (255) 2 weeks ago 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp my-sentry
d6cd1ed10721 postgres "docker-entrypoint.s…" 2 weeks ago Exited (255) 2 weeks ago 5432/tcp sentry-postgres
797cbc3c54c2 redis "docker-entrypoint.s…" 2 weeks ago Exited (255) 2 weeks ago 6379/tcp
"""
进入容器并安装编辑器,否则无法进行配置文件编辑
docker exec -it e76db0b3bbe8 /bin/bash
apt-get update
apt-get vim
cd /etc/sentry/
vim config.yml
# While a lot of configuration in Sentry can be changed via the UI, for all
# new-style config (as of 8.0) you can also declare values here in this file
# to enforce defaults or to ensure they cannot be changed via the UI. For more
# information see the Sentry documentation.
###############
# Mail Server #
###############
# 修改这里,取消原本的注释
mail.backend: 'django_smtp_ssl.SSLEmailBackend' # 使用django的ssl插件,解决django1.6不能使用ssl的问题
mail.host: 'smtp.exmail.qq.com' #邮箱对应的smtp域名
mail.port: 465 #邮箱对应端口
mail.username: '[email protected]' #你的邮箱
mail.password: 'pwd' #你设置的密码,注意不是邮箱登录密码
mail.use-tls: true #是否使用tls连接
#The email address to send on behalf of
mail.from: '[email protected]' #发送者,填的和user一样就行
mail.list-namespace :'xx.com' #不清楚用途,需要填邮箱的域名名称,和user域名一致
# If you'd like to configure email replies, enable this.
# mail.enable-replies: false
# When email-replies are enabled, this value is used in the Reply-To header
# mail.reply-hostname: ''
安装django用的插件
pip install django-smtp-ssl
exit
docker restart e76db0b3bbe8
将sentry-worker-1的配置也改成如上所述!!!
$ docker-compose down # 停止
$ docker-compose up -d # 启动
在网页中测试发送测试邮件,可以看到邮箱里面已经有接收到的邮件信息了,此后项目中出现的报警信息就会以邮件形式发送到邮箱
此日志系统充分的将多项目的报警日志统一管理起来,方便开发人员监控报警日志,在项目运行期间可以第一时间明确错误原因,不再需要在服务器中进行日志的查看,把精力花在刀刃上!