上下文:部門很多項目,基本自測,測試覆蓋率很低,即便有測試老師的加入,測試覆蓋率也很難100%;用戶肯定不會按照我們的預期來操作,但我們又不能讓用戶給我們試錯,畢竟每一個錯誤/bug對用戶,公司都可能是切切實實的傷害;而且我們的項目打印日誌太多,基本沒啥用,就導致很多異常也不知情,即便用戶反饋了錯誤,需要先復現再撈錯誤日誌,有些錯誤還很難復現,費時費力;最近部門,在整穩定性,於是便有了這篇文章。
簡介:Sentry 是一款基於 Django實現的錯誤日誌收集和聚合並告警的平臺,基於Python編碼實現,但是其日誌監控功能卻不侷限於python;對很多開源的框架(Django/Flask/Gin等),語言(Python/Go/Java/React等)都可以做到無縫集成,甚至可以用來對iOS, Android 移動客戶端以及 Web前端異常進行跟蹤。
源碼
安裝
目前安裝支持以下兩種方式:
推薦Docker方式,既省事又方便;本文也將從docker方式(onpremise)進行安裝講解,也就是跟着ReadMe來操作。
Requirements
- Docker 17.05.0+
- Compose 1.23.0+
1、安裝docker,跟着docker官網來就是
# 安裝
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
# 啓動
sudo systemctl enable docker
sudo systemctl start docker
2、安裝Docker-Compose,也跟着Docker官網來,但官網有點慢,我們調整爲下面的:
# 安裝方式一
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
卸載就直接刪掉這個可執行文件即可,rm -rf /usr/local/bin/docker-compose
# 安裝方式二
sudo pip install docker-compose
卸載:sudo pip uninstall docker-compose
3、開始安裝sentry
# 安裝
$ git clone [email protected]:getsentry/onpremise.git
$ cd onpremise
# 添加釘釘通知等插件
$ cd sentry && vim requirements.example.txt 加入如下內容
sentry-dingchat
django-smtp-ssl~=1.0
redis-py-cluster==1.3.4
# 修改nginx.conf文件的server段配置,類似如下
$ cd ../nginx && vim nginx.conf
server {
listen 80;
server_name sentry.xxxxx.com;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_redirect off;
# keepalive + raven.js is a disaster keepalive_timeout 0;
# use very aggressive timeouts proxy_read_timeout 5s;
proxy_send_timeout 5s;
send_timeout 10s;
resolver_timeout 5s;
client_body_timeout 5s;
client_max_body_size 4096m;
client_header_buffer_size 10m;
large_client_header_buffers 4 10m;
access_log /var/log/nginx/sentry.xxxxx.com.access.log main;
error_log /var/log/nginx/sentry.xxxxx.com.error.log;
location /api/store/ {
proxy_pass http://relay;
}
location ~ ^/api/[1-9]\d*/ {
proxy_pass http://relay;
}
location / {
proxy_pass http://sentry;
}
}
# 執行
$ cd .. && bash install.sh
4、啓動sentry
docker-compose up -d
5、Django接入,還是跟着Sentry官網來操作
# 安裝依賴
pip install --upgrade 'sentry-sdk==0.14.4'
# 編輯Django項目的settings文件
import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration
from sentry_sdk.integrations.celery import CeleryIntegration
from sentry_sdk.integrations.redis import RedisIntegration
sentry_sdk.init(
dsn="https://<key>@<organization>.ingest.sentry.io/<project>",
integrations=[DjangoIntegration(), CeleryIntegration(), RedisIntegration()],
# If you wish to associate users to errors (assuming you are using
# django.contrib.auth) you may enable sending PII data.
send_default_pii=True
)
# 編輯項目的url文件,添加測試sentry採集異常是否正常的API
from django.urls import path
def trigger_error(request):
division_by_zero = 1 / 0
urlpatterns = [
path('sentry-debug/', trigger_error),
# ...
]
6、預覽效果
實踐
1、React接入sentry,可參考:https://segmentfault.com/a/1190000021602782?utm_source=tag-newest
2、Vue接入sentry,可參考:https://www.jianshu.com/p/66e00077fac3