Sentry 照着官網搭建好之後,想要看到效果,須要業務接入。盤了一下手裏項目,決定以X項目爲切入點開刀。本想按照 官方API 接入便可,誰料道路之曲折有點出乎想象。
javascript
本文記錄實戰過程當中的思路,以及遇到的實際問題,拿出來跟你們分享。html
以上兩張圖描述的是sentry工做原理以及雲上部署方案。前端
Docker的確能夠實現快速搭建sentry服務,可是忽略一個大前提,這一切都是在一臺臺機器部署一個sentry!vue
DSN 是sentry 的一個重要概念,能夠理解是服務准入的標記java
A value which we call a DSN ... it’s actually just a representation of the configuration required by the Sentry SDKsreact
AUTH TOKEN 是sentry的另外一個重要概念,能夠理解是```sentry-cli``命令行調用的鑰匙。webpack
考慮到上面的顧慮,申請了兩臺機器,但隨之問題就來了。nginx
onpremise
目錄,不一樣目錄中啓動service,達到單臺機器多個實例的效果。
從官網提供的sentry.io服務來看,只有一個,DSN 和 一個AUTH TOKEN ,因此推測應該還有別的方案。調研中...web
若是有相同經歷的朋友,必定留言指導一下啊docker
<script src="https://cdn.ravenjs.com/3.26.4/raven.min.js" crossorigin="anonymous"></script>
<script>Raven.config('https://3042a92815a94e15ae949b717464c470@sentry.io/1401863').install();</script>
複製代碼
# 固然也能夠CDN方式接入,具體可參見官方文檔
import Vue from 'vue';
import Raven from 'raven-js';
import RavenVue from 'raven-js/plugins/vue';
Raven
.config('https://9128da56fafa4fd4bb7d3e38e3577395@sentry.io/sentry//1')
.addPlugin(RavenVue, Vue)
.install();
複製代碼
react
和 san
項目都是控制檯直接報錯,可採用以前設定的技術方案。sentry-webpack-plugin
便可完成(只是能夠上傳單個機器,須要一個AUTH TOKEN , 多個機器還未解決)<html>
<head>
<title>TEST Page</title>
<script src="https://cdn.ravenjs.com/3.26.4/raven.min.js" crossorigin="anonymous"></script>
<script>Raven.config('https://3042a92815a94e15ae949b717464c470@sentry.io/1401863').install();</script>
</head>
...
</html>
複製代碼
compiler.hooks.compilation.tap
報錯:Cannot read property 'compilation' of undefined
// 頁面插入元素插件
class HTMLinsertPlugin {
constructor(options) {
this.options = options.scripts;
}
apply(compiler) {
compiler.hooks.compilation.tap('HTMLinsertPlugin', compilation => {
// Hook into `htmlWebpackPluginAlterAssetTags`
// !! Careful this will change in the upcoming html webpack plugin version !!
compilation.hooks.htmlWebpackPluginAlterAssetTags.tapAsync('HTMLinsertPlugin',
// You can use either `head` or `body` and either `push` or `unshift`:
(htmlPluginData, callback) => {
this.options.forEach(ele => {
htmlPluginData.head.push(ele);
});
// htmlPluginData.head.push();
callback(null, htmlPluginData);
}
);
});
}
}
複製代碼
new HtmlWebpackPlugin({
...
sentryCDN: 'https://cdn.ravenjs.com/3.26.4/raven.min.js',
sentryScript:'Raven.config('https://3042a92815a94e15ae949b717464c470@sentry.io/1401863').install();'
})
複製代碼
<script type="text/javascript" src="<%= htmlWebpackPlugin.options.sentryCDN %>"></script>
<script type="text/javascript">
<%= htmlWebpackPlugin.options.sentryScript %>
</script>
複製代碼
就在歡呼官方提供的sentry-webpack-plugin
強大的時候,再次遇到了問題。公司流程提交代碼後,會指定公機器進行編譯,而這臺機器是沒法訪問外網的,致使編譯後上傳sentry服務的時候失敗。好在找到一臺能夠訪問外網的機器進行編譯。
域名須要經過nginx proxy_pass
到本機
Root URL. sentry建立好以後有一件事是設置root_url,這個將會影響DSN
https://sentry.io/sentry
https://9128da56fafa412312312338e3577395@sentry.io/sentry/1
,https://sentry.io/sentry/api/1/store/?sentry_version=7
.sentryclirc
https://sentry.io
因而
# /sentry 上報接口
location ^~ /sentry/ {
proxy_pass http://localhost:9000/;
}
# 非 /sentry uri 正常訪問
location / {
proxy_pass http://localhost:9000;
}
複製代碼
Sentry雖然已經開源,可是X項目接入過程當中仍是遇到了不少問題,但願你們能夠交流,互相避免踩坑。讓咱們的頁面在線上更加穩定