使用docker-compose运行错误收集工具Sentry
Use exceptions for exceptional problems. Exceptions can suffer from all the readability and maintainability problems of classic spaghetti code. Reserve exceptions for exceptional things.
最近在尝试搭建错误日志收集工具Sentry,发现用docker-compose工具运行起来非常方便。 目前的项目捕捉异常比较简陋,一般代码发生异常之后,写个函数发一封邮件把异常信息附上。 一开始只是在邮件附带了异常消息,但是没有加上函数调用的参数和变量值,导致问题排查起来比较困难。 后来函数加上了个locals()返回的字典返回当前函数内部变量信息,算是方便了一点。不过最近发现了神器 Sentry, Sentry’s real-time error tracking gives you insight into production deployments and information to reproduce and fix crashes.
在ubuntu server上搭建个一个尝试了一下(也可以直接用官方提供的服务),感觉还是非常强大的,界面也比较漂亮。
用Sentry来记录异常信息是个不错的选择,记录日志可能还有些问题,一旦log过多sentry本身可能就会有性能问题,但是一般异常发生的次数还是很少的(代码还可以的话),用来记录异常不用担心性能问题。 Sentry除了支持python之外,还支持js,go,php,java,ruby等很多编程语言和web框架。 Sentry本身使用django写成,好吧,又对django多了些好感,django确实出来过很多杀手级项目(sentry,pinterest,Instagram等)。
安装docker和docker-compose
使用了阿里云的ubuntu14.04服务器版本,使用docker-compose运行起来特别方便,傻瓜化
# ubuntu14.04 install docker
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
sudo echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" > /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get install docker-engine
sudo service docker start
# install docker-compose
sudo pip install docker-compose
克隆Dockerfile文件
官方给出了一个项目dockerfile,可以直接clone下来使用。请在服务器预留足够内存,否则运行docker-compose之后可能会出现PostgreSQL崩溃的情况。
1 | git clone https://github.com/getsentry/onpremise |
现在访问你的 http://your-vps-host:9000 就可以访问sentry了.界面如下
在flask中使用sentry
用一个很简单的例子演示下使用方式。登录后右上角选择New Project,创建一个新项目,比如名字就叫做testflask,然后选择框架选择flask项目,之后会生成一个配置界面提示你怎么用。 首先安装依赖库pip install raven[flask]
之后写个简单的flask文件app.py:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from flask import Flask
from raven.contrib.flask import Sentry
app = Flask(__name__)
sentry = Sentry(
app,
dsn='' # 在这里填上sentry给你生成的dsn
)
@app.route('/')
def hello():
# 随意写上一些变量
a = 1
b = 0
d = dict(a=1, b=2)
l = [1, 2, 3]
try:
a / b
except Exception:
sentry.captureException()
return 'hello'
if __name__ == '__main__':
app.run(port=8888)
之后python app.py
然后访问 http://localhost:8888
首先可以看到看板里多出了一条异常记录:
点进去以后我们可以看到该异常的具体信息, 包括调用栈信息和用户访问的浏览器信息等,对于排查代码异常还是很有帮助的。
此外我们还可以在Sentry里建立组和不同的项目,对异常信息进行统计等。感兴趣的人可以在项目中尝试一下这个好用的工具。如果你们项目有类似的日志和错误收集经验,也可以留言分享下^_^