聚集如云,分散如风(Sentry)

在发开中我们会习惯的创建log日志,这样方便查看代码运行期间的请求过程与BUG的原因,以方便分析项目存在的一切隐患。但是问题来了,每个项目都需要创建log日志就显得特别繁琐,那么有没有一种工具可以管理多个项目的日志呢,即使是跨语言,跨平台的?那么这次就来了解一下Sentry

sentry是一个基于Django构建的现代化的实时事件日志监控、记录和聚合平台,主要用于如何快速的发现故障。支持几乎所有主流开发语言和平台,并提供了现代化UI,它专门用于监视错误和提取执行适当的事后操作所需的所有信息,而无需使用标准用户反馈循环的任何麻烦

sentry有两种搭建方法,python搭建与docker搭建,python原始搭建方法太过于复杂目前不叙述,这次依然是用神级容器docker来搭建,废话不多,现在开始。

centos7
docker
docker-compose 1.26
#docker分配内存建议4G或以上

1.升级自己的docker-compse

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

2.搭建sentry

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

3.sentry对接django接收日志

按照以下流程创建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中

4.配置邮件报警

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      # 启动

在网页中测试发送测试邮件,可以看到邮箱里面已经有接收到的邮件信息了,此后项目中出现的报警信息就会以邮件形式发送到邮箱

总结:

此日志系统充分的将多项目的报警日志统一管理起来,方便开发人员监控报警日志,在项目运行期间可以第一时间明确错误原因,不再需要在服务器中进行日志的查看,把精力花在刀刃上!

你可能感兴趣的:(docker,Django,sentry,django)