sentry安裝手冊
Sentry 是一個實時的事件日誌和聚合平臺,基於 Django 構建。 Sentry 可以幫助你將 Python 程序的所有 exception 自動記錄下來,然後在一個好用的 UI 上呈現和搜索。處理 exception 是每個程序的必要部分,所以 Sentry 也幾乎可以說是所有項目的必備組件。
sentry官方提供了一個控制檯,也可以自己搭建,參考文檔 SENTRY
sentry需要的軟件環境有
- 一個基於UNIX架構的系統,本文使用Centos6.5
- Python2.7
- python-setuptools, python-pip, python-dev, libxslt1-dev, libxml2-dev, libz-dev, libffi-dev, libssl-dev, libpq-dev, libyaml-dev
- PostgreSQL
注意:從sentry8.0開始,就不在支持MySQL數據庫了
- Redis 有版本要求,本文使用的是3.0.7
ps: 本文通過pip安裝sentry,如果通過編譯安裝,還需要Node.js >= 0.12以上的版本
系統開發者環境
關於系統需要的一些開發者環境就不做贅述,常用的可以通過以下兩條命令安裝
yum -y install gcc gcc-c++ ncurses-devel perl pcre-devel openssl openssl-devel
yum -y groupinstall "Development Tools"
yum install libxslt-devel #
後期可能會遇到一個安裝lxml失敗的問題,可以通過解決
安裝Python2.7
因爲Centos6.5系統默認的python版本是2.6.6,需要升級下python,同時要不影響yum的使用(yum使用python2.6)
1.下載Python2.7.11安裝包
yum -y install gcc gcc-c++ ncurses-devel perl pcre-devel openssl openssl-devel
如果沒有wget命令,可以通過yum -y install wget
安裝
2.解壓並進入python包
tar -zxvf Python-2.7.11.tgz&&cd Python-2.7.11
3.編譯
./configure
如果報錯,可根據錯誤提示,看看是不是缺少什麼包
4.安裝
make&&make install
5.安裝完成以後,備份原來的python2.6
mv /usr/bin/python /usr/bin/python2.6.6
6.創建python2.7的鏈接,
ln -s /usr/local/bin/python2.7 /usr/bin/python
7.配置yum使用python2.6,
sudo vim /usr/bin/yum
把第一行#!/usr/bin/python改爲#!/usr/bin/python2.6.6
8.測試在終端中輸入python,顯示版本2.7.11,同時yum可繼續使用
安裝pip
pip是一個比較好用的python包管理器,建議使用
1.下載get-pip.py文件
wget https://bootstrap.pypa.io/get-pip.py
2.安裝
pip python get-pip.py
安裝virtualenv
virtualenv是python的一套虛擬環境,爲了解決不同python項目,依賴的包會有衝突的情況
1.
pip install -U virtualenv
2.在你需要的位置,新建sentry文件夾,
mkdir /home/sentry
3.創建虛擬環境,
virtualenv /home/sentry
4.激活sentry環境,
source /home/sentry/bin/activate
ps:從該環境退出使用命令deactivate
5.此時,可以在該環境中安裝各種需要的python包,需要使用的時候激活該環境就可以
安裝redis
1.從官網下載最新的穩定版本,
wget http://download.redis.io/releases/redis-3.0.7.tar.gz
2.解壓並進入文件夾,
tar -zxvf redis-3.0.7.tar.gz&&cd redis-stable
3.安裝
make
可能會遇到的一些異常:
1.make[2]: cc: Command not found
異常原因:沒有安裝gcc
解決方案:yum install gcc-c++
2.zmalloc.h:51:31: error: jemalloc/jemalloc.h: No such file or directory
異常原因:一些編譯依賴或原來編譯遺留出現的問題
解決方案:make distclean。清理一下,然後再make。
在make成功以後,需要make test。在make test出現異常。
異常一:
couldn't execute "tclsh8.5": no such file or directory
異常原因:沒有安裝tcl
解決方案:yum install -y tcl。
4.安裝成功以後,會有 redis-server,redis-cli 等執行文件
安裝PostgreSQL
再次說明下,從sentry8.0以後開始 就不支持MySQL了…我被mysql的問題卡了好久,死活刪不掉索引,如果喜歡折騰,可以自己查看下源碼,看看如何解決。
- 涉及PostgreSQL,後期有個問題,是psycopg2模塊,安裝失敗,可通過
yum install postgresql-devel
解決,所以我們在這裏,先安裝好。
1.PostgreSQL官網介紹,centos6.5 默認yum安裝的postgresql版本是8.4,使用該版本數據庫,安裝sentry,在創建數據庫的時候,一直有一個語言錯誤,the error was:language “plpgsql” does not exist,查詢了很多postgresql地方,原本是可以通過CREATE LANGUAGE plpgsql;解決的,但是還是一直報這個錯誤,所以我使用了postgresql9.2版本,該問題解決。
2.導入9.2版本的yum包
yum install https://download.postgresql.org/pub/repos/yum/9.2/redhat/rhel-6-x86_64/pgdg-redhat92-9.2-8.noarch.rpm
3.安裝postgresql9.2
yum install postgresql92-server postgresql92-contrib
4.初始化數據庫
service postgresql-9.2 initdb
5.添加服務
chkconfig postgresql-9.2 on
啓動服務
sudo service postgresql-9.2 restart
6.PostgreSQL在創建後,會創建一個postgres的用戶,只有該用戶可以使用psql
控制檯 需要切換到該用戶
sudo su postgres
psql
7.創建用戶
CREATE USER sentry WITH PASSWORD 'sentry';
8.創建數據庫
CREATE DATABASE sentry OWNER sentry;
9.修改下配置文件,在/var/lib/pgsql/9.2/data/下有兩個配置文件
postgresql.conf和pg_hba.conf
10.修改pg_hba.conf最下面的host把需要的host的ident參數,改爲trust
11.修改postgresql.conf下面的listen_addresses = ‘*’
12.保存重啓postgresql
sudo service postgresql-9.2 restart
安裝sentry
本文通過pip安裝,十分簡單 運行命令
pip install -U sentry
即可,該過程時間有點長,可能遇到某些包,下載終端,超時,重複運行該命令即可,遇到某些錯誤,都是一些包未安裝導致的,可根據錯誤提示,具體查看是缺少什麼。
1.安裝完成後,初始化sentry環境
sentry init /etc/sentry
,會在該文件下出現sentry的兩個配置文件,sentry.conf.py 和 config.yml,在sentry.conf.py 中需要配置 postgresql和redis數據庫的鏈接信息,根據自己情況,配置就可以。在config.yml中配置mail信息
2.因爲我們創建了sentry數據庫,就不需要執行官網說的createdb -E utf-8 sentry
,我們之間寫入數據,執行SENTRY_CONF=/etc/sentry sentry upgrade
,數據寫入完成,會自動提示,是否創建用戶,按照提示操作即可。
3.此時通過SENTRY_CONF=/etc/sentry sentry run web
啓動,訪問http://localhost:9000/
就可以看到界面了。
4.sentry需要同時啓動worker和cron,是sentry的隊列和任務(個人理解),對於這個,我使用supervisor管理,supervisor的安裝過程,就不在贅述,下面是supervisor的項目配置
[program:sentry-web]
directory=/www/sentry/
environment=SENTRY_CONF="/etc/sentry"
command=/www/sentry/bin/sentry start
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=syslog
stderr_logfile=syslog
[program:sentry-worker]
directory=/www/sentry/
environment=SENTRY_CONF="/etc/sentry"
command=/www/sentry/bin/sentry celery worker
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=syslog
stderr_logfile=syslog
[program:sentry-cron]
directory=/www/sentry/
environment=SENTRY_CONF="/etc/sentry"
command=/www/sentry/bin/sentry celery beat
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=syslog
stderr_logfile=syslog
ps:路徑和日誌地址,安裝實際情況配置,啓動worker依賴一個python消息隊列的包,不能以root的權限啓動,同時建議 三個的日誌,不要寫在一個文件裏面…
5.使用nginx代理
sentry支持所有版本的nginx,nginx的安裝很簡單,不在贅述。
修改nginx配置文件添加
location / {
proxy_pass http://localhost:9000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
reload nginx即可。
6.清除舊數據
crontab -e
0 3 * * * sentry cleanup --days=30
備註:更高級的用法和配置還沒接觸到,只是簡單的搭建起來,遇到各種文件,官網的文檔纔是王道!!!
常見報錯解決辦法:
ValueError: jpeg is required unless explicitly disabled using –disable-jpeg, aborting
經搜索,找到以下方案:
sudo yum install libjpeg-turbo-devel
Package libffi was not found in the pkg-config search path.
sudo yum install libffi-devel
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe5 in position 4: ordinal not in range
import sys
reload(sys) # Python2.5 初始化後會刪除 sys.setdefaultencoding 這個方法,我們需要重新載入
sys.setdefaultencoding('utf-8')
參考文章:
-
http://blogmao.com/post/sentry
-
http://stackoverflow.com/questions/22073516/failed-to-install-python-cryptography-package-with-pip-and-setup-py
-
http://blog.csdn.net/a657941877/article/details/9063883