Sentry是个很好用的错误日志服务器,可以将程序错误的详细情况集中捕获,并提供一个很漂亮的Web界面来浏览错误。
如果你还没用确定Sentry是否适合你,可以先试用Sentry的在线服务,https://getsentry.com/welcome/ 。
Sentry本身是用python写的,但它支持记录Python、PHP、Ruby、iOS、Javascript、Java、Node.js等多种语言的错误。
在浏览器中就可以查看项目的错误
记录了错误调用栈信息,很快定位到错误
记录了错误发生时浏览器信息,同时还可以记录自定义信息
安装 Sentry
Sentry需要Python2.5以上版本。注意Sentry并不支持Python3。
$ sudo easy_install -UZ sentry
Sentry默认使用sqlite记录错误日志,生产环境下建议使用MySQL。使用以下命令安装Python的MySQL支持。
$ sudo easy_install -UZ sentry[mysql]
如果安装出错,可以用
sudo easy_install -UZ MySQL-python
命令直接安装Python的MySQL支持,
如果安装MySQL-python出错,安装下列安装包后在进行安装MySQL-pythonsudo yum install python-devel sudo yum install mysql-devel sudo yum install libxslt-devel libxml2-devel
配置 Sentry
安装好之后使用以下命令建立配置文件:
$ mkdir ~/.sentry
$ sentry init ~/.sentry/sentry.conf.py
然后打开~/.sentry/sentry.conf.py,参照下边配置修改。
daemon: True, 使sentry以daemon模式运行。
sentry默认使用9000端口,我的9000端口已经被php-fpm占用,因此改用9111端口。
SENTRY_URL_PREFIX = ‘http://sentry:9111‘
SENTRY_WEB_HOST = '0.0.0.0'
SENTRY_WEB_PORT = 9111
SENTRY_WEB_OPTIONS = {
'daemon':True,
'workers': 3, # the number of gunicorn workers
'secure_scheme_headers': {'X-FORWARDED-PROTO': 'https'},
}
在mysql服务器上新建sentry数据库,修改mysql相关配置
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘sentry’,
‘USER’: ‘sentry’,
‘PASSWORD’: ‘sentry’,
‘HOST’: ‘192.168.100.1’,
‘PORT’: 3306,
}
}
修改好配置文件后,在用户根目录执行sentry start
启动服务器即可。第一次运行需要建立初始化数据,如新建管理员等操作,按照提示操作即可。
使用sentry help
查看更多使用方法。sentry send_fake_data
发生测试数据。
我在第一次启动sentry时遭遇下边的错误提示
DatabaseError: (1071, 'Specified key was too long; max key length is 1000 bytes')
产生这个错误的原因是我的MySQL数据库默认存储引擎是MyISAM。MyISAM存储引擎在创建索引的时候,索引键长度是有一个较为严格的长度限制的,所有索引键最大长度总和不能超过1000,而且不是实际数据长度的总和,而是索引键字段定义长度的总和。
sentry中有些表的索引键长度超过了1k,设置存储引擎为InnoDB即可解决问题。
连接mysql执行下面命令,设置默认存储引擎为InnoDB
SET global storage_engine=InnoDB;
使用Nginx作为前端代理服务器
location / {
proxy_pass http://sentry-ipaddress:9111;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
使用Sentry的PHP客户端
安装Raven-PHP
- 在Raven-PHP GitHub下载项目,把raven-php/lib/Raven复制到你的项目中
初始化Raven Cient
require('/path/to/raven/Autoloader.php'); Raven_Autoloader::register(); $dsn = "https://96320c73c71946f2b1499b511a5311bf:ee9dcc397c354942b5295dd00c284e06@sentry:9111/2"; $client = new Raven_Client();
设置PHP 错误处理的handler
$error_handler = new Raven_ErrorHandler($client); set_error_handler(array($error_handler, 'handleError')); set_exception_handler(array($error_handler, 'handleException'));
以上代码有些fatal错误是无法记录的,详细原因见这里。
下边是我为Codeigniter写的记录Log的Library。
相关资料
Sentry的官方文档 http://sentry.readthedocs.org/en/latest/
Sentry的PHP客户端 https://github.com/getsentry/raven-php
Sentry的Ruby客户端 https://github.com/getsentry/raven-ruby