Sentry搭建+釘釘告警+Django接入

上下文:部門很多項目,基本自測,測試覆蓋率很低,即便有測試老師的加入,測試覆蓋率也很難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

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章