原文地址:http://blog.shanbay.com/archives/998
或许你不太会喜欢异常,特别是那些发生后继而沉默在应用日志里那些,你不知道从何开始,因为它们看起来并非那么平易近人,但是用户吵着他的数据有问题,你只得硬着头皮在多个服务器的日志里,翻箱倒柜,试着从堆栈里发现些什么,但是毫无线索,因为你发现这根本是一桩无头命案:没有足够的上下文,不知道哪个才是这个用户的某个操作引起的异常,请求链接更无从谈起,好吧,再去nginx日志里看看吧……
但幸运的是,我们不是唯一面临这个问题的人,Disqus团队因此而开发了Sentry,它是一款精致的Django应用,目的在于帮助开发人员从散落在多个不同服务器上毫无头绪的日志文件里发掘活跃的异常,继而找到潜在的臭虫,当然这个是概述,像其他监控工具一样,sentry也是分为客户端和服务端,客户端分布在你的每个应用服务器上,在异常发生时django会通知它,继而客户端再把详细的异常信息以及相关的用户、请求数据(包括cookie和环境信息)发送到服务端,这样一来就像sentry网站上鼓吹的,它天生就是实时的了。服务端是一个http server,是接收客户端发送异常信息和相关数据,按照异常名称进行归类存储到单独的数据库中,同时提供漂亮的web界面,方便开发检索异常记录。
在扇贝网部署sentry的当周,我们开发生活就全部围绕在修复bug中——自己写的代码所产生的异常已经发生xxx次了,就摆在sentry web界面,紧急优先级排在前3名,你还不去修复?现在我们每天都会习惯性的前往sentry看看有没有发生新的异常,发布时更是紧盯着sentry这个晴雨表。这样不但可以让开发时刻关注自己的代码质量,也可以了解到一个异常就有可能是一个用户的流失,尽快地修复一个bug就可以最小化损失。
如何部署?
服务端:
1. pip install sentry
2. sentry start
客户端:
1. pip install raven
2. 在django的settings.py文件里的INSTALL_APPS加上一行:
INSTALLED_APPS = [
...
# We recommend adding the client to capture errors # seen on this server as well
'raven.contrib.django',
]
3. 将服务端机器上的sentry配置文件中的SENTRY_KEY一行复制到settings.py文件里
cat ~/.sentry/sentry.conf.py ,复制该行: SENTRY_KEY = xxxxx
4. 指定sentry服务端: SENTRY_SERVERS = ['http://your.sentry.server/sentry/store/']