簡介
Sentry
是一個(gè)開源的實(shí)時(shí)錯(cuò)誤追蹤系統(tǒng)梯刚,可以幫助開發(fā)者實(shí)時(shí)監(jiān)控并修復(fù)異常問題缤沦。它主要專注于持續(xù)集成橙喘、提高效率并且提升用戶體驗(yàn)挑庶。
下面是Sentry官網(wǎng)支持的產(chǎn)品
使用官網(wǎng)服務(wù)
作為大多數(shù)個(gè)人開發(fā)者和中小企業(yè),可以直接使用Sentry官網(wǎng))提供的云服務(wù)什往,你只需要注冊一個(gè)Sentry
賬號扳缕,就可以快速享受到集中處理異常日志的服務(wù)。
本地安裝Sentry服務(wù)
官網(wǎng)支持docker
與python
安裝兩種方式别威,這里采用docker
的方式
具體有什么疑問可以查看官網(wǎng)https://docs.sentry.io/server/installation/
安裝docker
具體可以看之前記錄的文章重頭開始學(xué)Docker
安裝docker-compose
- 安裝
wget
yum -y install wget
- 安裝
pip
# 如果使用 wget下載https開頭的網(wǎng)址域名 時(shí)報(bào)錯(cuò)躯舔,你需要加上 --no-check-certificate (不檢查證書)選項(xiàng)
wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate # 下載文件
python get-pip.py #執(zhí)行安裝
pip -V #查看pip版本
- 安裝
docker-compose
sudo pip install docker-compose # 安裝 docker-compose
docker-compose -v #查看docker-compose 版本
注意這里我在安裝docker-compose
報(bào)了這個(gè)錯(cuò)誤
執(zhí)行如下命令
sudo pip install --ignore-installed requests
安裝完成之后再安裝docker-compose
參考至:https://blog.csdn.net/guoshaoliang789/article/details/96878731
構(gòu)建Sentry
- 從
github
上拉取源碼
git clone https://github.com/getsentry/onpremise.git
注意你需要保證你的Docker 17.05.0+ Compose 1.19.0+
同時(shí)還需要擁有least 2400MB RAM
下載完成之后進(jìn)入該目錄。查看文件如下
- 開始構(gòu)建鏡像
docker-compose build --pull
但是出了個(gè)問題,問題描述說是倉庫不存在或可能需要“docker登錄”:拒絕:請求訪問的資源被拒絕
嘗試解決問題:先執(zhí)行登錄操作
docker login
登錄成功之后再次執(zhí)行之前的命令省古,發(fā)現(xiàn)還是報(bào)錯(cuò)粥庄,我們搜索一下Docker
網(wǎng)站上關(guān)于sentry-onpremise-local
鏡像,我們手動去pull
執(zhí)行如下命令
docker image pull viitanener/sentry-onpremise-local
拉取成功之后豺妓,再次執(zhí)行之前的命令飒赃。
參考至https://www.cnblogs.com/meloncodezhang/p/11229778.html
最后發(fā)現(xiàn)還是沒用,但是在github issues
中發(fā)現(xiàn)了同樣的問題
這是問題鏈接https://github.com/getsentry/onpremise/issues/278
執(zhí)行如下命令
docker-compose build --pull --force-rm web
docker-compose build --force-rm
發(fā)現(xiàn)build
成功
- 生成秘鑰
進(jìn)入sentry文件夾科侈,將默認(rèn)的config.example.yml
和sentry.conf.example.py
重命名為config.yml
和sentry.conf.py
。執(zhí)行如下命令
cp config.example.yml config.yml
cp sentry.conf.example.py sentry.conf.py
執(zhí)行如下命令生成秘鑰
docker-compose run --rm web config generate-secret-key
將生成的秘鑰添加到config.yml
的system.secret-key
字段上
- 進(jìn)行 Web 服務(wù)遷移
執(zhí)行如下命令開始服務(wù)遷移
docker-compose run --rm web upgrade
正常情況下是會出現(xiàn)輸入賬號密碼的步驟的炒事,如果不可以請?jiān)敿?xì)查閱這個(gè)issue
執(zhí)行以下命令
docker-compose run --rm web createuser
- 運(yùn)行 sentry
docker-compose up -d
- 注意:錯(cuò)誤解決
執(zhí)行之后發(fā)現(xiàn)如下問題臀栈,判斷可能是docker
沒有啟動的問題
執(zhí)行如下命令
service docker status # 查看docker服務(wù)是否啟動
systemctl start docker # 啟動docker
再次執(zhí)行安裝
又發(fā)生如下錯(cuò)誤
執(zhí)行如下命令
dig @114.114.114.114 registry-1.docker.io
將上訴幾個(gè)地址寫入hosts
文件后再次安裝
- 部署
Sentry
成功
打開瀏覽器輸入ip:9000
,如下圖說明安裝成功
注意,如果沒有打開挠乳,請檢查服務(wù)器防火墻與安全組是否開放9000
端口
- Root URL:默認(rèn)為部署的地址权薯,后面會用到,
sentryclirc
文件里的url
屬性 - Admin Email 管理員郵箱
- Email From 郵件的發(fā)送地址息睡扬,填郵箱服務(wù)商的地方比如
smtp.qq.com
- SMTP PORT Smtp服務(wù)的端口默認(rèn)25,使用
tls
就是567
- SMTP username 用戶名 qq郵箱賬號
- SMTP password 密碼 qq郵箱授權(quán)碼(不是密碼)
- 修改郵箱設(shè)置
打開sentry/config.yml
文件盟蚣,編輯如下信息:
具體配置查看這里https://docs.sentry.io/server/config/#mail
注意要將服務(wù)器防火墻與服務(wù)器安全組的郵箱端口放開,
注意:如果使用Sentry10的話 使用tsl郵箱端口必須為567不然會報(bào)錯(cuò)
重新執(zhí)行以下命令
docker-compose build --pull --force-rm web
docker-compose build --force-rm
docker-compose run --rm web upgrade
docker-compose up -d
可以看到郵箱信息已經(jīng)修改掉了卖怜,下面我們發(fā)送一封測試郵件屎开,點(diǎn)擊下方的Test Settings
至此,郵箱服務(wù)也修改完成
Sentry使用
創(chuàng)建項(xiàng)目
- 開始創(chuàng)建马靠,選擇
Project->React->Create Project
- SDK的使用
- DSN地址
-
org組織名稱
image -
project項(xiàng)目名稱
image
-
Create Token創(chuàng)建token
image
務(wù)必勾選project:write
前端進(jìn)行使用
安裝webpack插件
npm install @sentry/webpack-plugin -S
添加.sentryclirc
文件
[defaults]
url=sentry 服務(wù)的url #比如安裝的是192.168.0.1:9000
project = 項(xiàng)目名字
org= 項(xiàng)目組織 上面有寫在哪可以取到
[auth]
token=api token # 登錄控制臺獲取
- 關(guān)于url:就是你部署Sentry的地址
- 關(guān)于project:
- 關(guān)于org:
- 關(guān)于token:
修改.umirc.js
文件
const SentryPlugin = require('@sentry/webpack-plugin');
export default {
chainWebpack(config, { webpack }){
// 拿不到process.env.RELEASE_VERSION
if (process.env.UMI_ENV == 'prod'){
config.plugin("sentry").use(SentryPlugin, [{
ignore: ['node_modules'],
include: './dist', //上傳dist文件的js
configFile: './sentryclirc',
release:release, // 版本號
deleteAfterCompile: true,
urlPrefix: '~/static/' //靜態(tài)資源路徑前綴
}])
}
},
}
- 關(guān)于
urlPrefix
如果你的靜態(tài)資源是htps://cdn.xxx.com/static/
那么該值就是~/static/
奄抽,自動省去協(xié)議與主機(jī)地址
安裝@sentry/browser
使用的時(shí)候需要結(jié)合這個(gè)包使用
npm i @sentry/browser -S
使用
- 在項(xiàng)目的根文件下使用
import * as Sentry from '@sentry/browser';
const SENTRYSDK = '就是Sentry配置的DSN'
Sentry.init({dsn:SENTRYSDK,release: process.env.RELEASE_VERSION,debug: true,});
- 結(jié)合React的生命周期使用
componentDidCatch(error, errorInfo) {
Sentry.withScope((scope) => {
scope.setExtras(errorInfo);
const eventId = Sentry.captureException(error);
this.setState({ eventId });
});
}
- 主動上報(bào)
Sentry.captureMessage('Hello, world!'); // 上報(bào)信息
Sentry.captureException(new Error('Good bye')); // 上報(bào)異常
Sentry.captureEvent({ // 上報(bào)事件
message: 'Manual',
stacktrace: [
// ...
],
});
關(guān)于
- 本文首發(fā)于使用Sentry進(jìn)行異常上報(bào)
- 參考如下:Sentry 入門實(shí)戰(zhàn)