應用錯誤跟蹤系統:對軟件系統運行過程當中產生的錯誤日誌進行收集從而實現監控告警。javascript
雖然軟件錯誤❌是不可避免的,可是能夠下降錯誤數。html
提升對錯誤的治理能力能讓錯誤帶來的損失降到最低 👍🏻 。前端
錯誤日誌監控在最頂層的業務層監控,有他將會幫助你打造更好的軟件!java
咱們須要業務場景下本身發現Bug的速度快於用戶報告Bug的速度,畢竟讓用戶報告已經晚了。nginx
典型的這套系統的架構:錯誤日誌(前端、後端) => 傳輸(HTTP)=>錯誤跟蹤平臺(收集、展現、分析、告警)。git
本文不討論哪款軟件來解決這個問題,只講Sentry這個輪子,SASS版本和私有部署版體驗幾乎一致github
本文主要講了web
應用錯誤須要監控的場景案例chrome
Sentry有哪些功能shell
Sentry如何在k8s中私有化部署
本文由 www.iamle.com 流水理魚 原創,wx公衆號搜索 流水理魚 或 liushuiliyu
SEO 關鍵字
Sentry私有化部署
Sentry helm部署
Sentry kubernets部署 k8s部署
Sentry is cross-platform application monitoring, with a focus on error reporting.
Sentry跨平臺應用監控,專一錯誤報告。
Sentry英文直譯中文叫「哨兵」。
Sentry提供了一個應用程序監視平臺,能夠幫助您實時識別問題。
提供WEB UI
提供SASS版和私有部署2種方式
開源,受權協議爲BSL,只要你不拿他來作SASS服務賣錢,自用能夠免費商用
提供幾乎全部主流開發語言和框架的SDK
提供完整的錯誤詳情
支持自動上報錯誤和手動上報錯誤
支持WEB前端、後端、APP
支持多項目管理
支持帳號權限管理
提供統一錯誤的聚合分析
今日頭條等不少大公司都在用
目前網上大部分都是講DockerCompose的部署方式
其實Helm Hub上能夠找到Sentry的helm charts包(⑤),那麼直接用Helm部署Sentry是最快速方便的
下面給出一個部署資源狀況參考,這基本也就是最低資源消耗狀況了
Kubernets存儲已經支持了動態PVC
Kubernets已經支持Ingress
準備一個子域名 (例如, sentry.iamle.com)
Helm部署Sentry會部署sentry-corn、sentry-web()、sentry-worker、Redis、PostgreSQL
空負載資源詳細sentry-corn(220MB/0.01Core)、sentry-web(850MB/0.012Core)、sentry-worker(2048MB/0.04Core)、Redis(132+179MB/0.04+0.054Core)、PostgreSQL(506MB/0.03Core)
空負載總體資源佔用狀況,內存:3935MB、CPU核數:0.2 Cores、存儲PVC:34G
helm爲helm3
使用國內加速的charts(微軟azure)
helm repo add stable http://mirror.azure.cn/kubernetes/charts helm repo add incubator http://mirror.azure.cn/kubernetes/charts-incubator helm repo update helm search repo sentry #NAME CHART VERSION APP VERSION DESCRIPTION #stable/sentry 4.2.0 9.1.2 Sentry is a cross-platform crash reporting and ... #已經能夠在stable repo 找到 sentry
## helm安裝sentry kubectl create namespace sentry helm install sentry stable/sentry \ -n sentry \ --set persistence.enabled=true,user.email=i@iamle.com,user.password=i@iamle.com \ --set ingress.enabled=true,ingress.hostname=sentry.iamle.com,service.type=ClusterIP \ --set email.host=smtp.yourhost.com,email.port=25 \ --set email.user=user,email.password=password,email.use_tls=false \ --wait #參數一看就懂,更多安裝參數看文末的參考⑤ #第一次安裝須要耗時10分鐘以上,等等等,db-init-job初始化數據庫的時候花費了太多時間 #在安裝完成以前,訪問sentry.iamle.com會出現服務器內部錯誤 #出現下面的內容就表示部署好了 #NAME: sentry #LAST DEPLOYED: Sun Apr 19 21:01:26 2020 #NAMESPACE: sentry #STATUS: deployed #REVISION: 1 #TEST SUITE: None #NOTES: #1. Get the application URL by running these commands: # export POD_NAME=$(kubectl get pods --namespace sentry -l "app=sentry,role=web" -o jsonpath="{.items[0].metadata.name}") # echo "Visit http://127.0.0.1:8080 to use your application" # kubectl port-forward --namespace sentry $POD_NAME 8080:9000 # #2. Log in with # # USER: i@iamle.com # Get login password with # kubectl get secret --namespace sentry sentry -o jsonpath="{.data.user-password}" | base64 --decode #查看登錄密碼,也就是user.password設置的值 #kubectl get secret --namespace default sentry -o jsonpath="{.data.user-password}" | base64 --decode #刪除sentry #helm uninstall sentry -n sentry
ingress根據本身實際環境作一些微調,筆者的環境下ssl證書使用 cert-manager 自動管理,備註annotations就自動配置ssl
# sentry ingress示例 kubectl apply -f - <<EOF apiVersion: extensions/v1beta1 kind: Ingress metadata: name: sentry namespace: sentry annotations: kubernetes.io/ingress.class: nginx kubernetes.io/tls-acme: "true" cert-manager.io/cluster-issuer: letsencrypt-prod spec: rules: - host: sentry.iamle.com http: paths: - path: / backend: serviceName: sentry servicePort: 9000 tls: - hosts: - sentry.iamle.com secretName: sentry-cert EOF
瀏覽器訪問
https://sentry.iamle.com 使用安裝時設置的帳號密碼登錄便可
理論上是須要給每一個項目都在Sentry中建立一個對應的項目
可是實際上這麼幹會比較麻煩,筆者建議對訪問量不大,好比後臺類的相同類型的新建一個項目便可
發現混在一塊兒已經很差區分了,再去拆開也不遲
對於自己訪問量巨大的「前端」項目,建議在Sentry管理後臺的一對一配置
Projects 》 Add new Project 選擇一個JavaScript類型
⚠️ 官方提供的SDK是國外的CDN,實際使用的時候須要把https://browser.sentry-cdn.com/5.5.0/bundle.min.js下載後放在本身的OSS+CDN上
SDK和初始化代碼通常放入全站頭部當中,當頁面有js錯誤的時候已經會自動上報了
咱們用chrome的console手動上報一個消息測試下sentry是否工做正常
Sentry.captureMessage("流水理魚 www.iamle.com")
解決數據庫不能初始化的問題
若是安裝過程數據庫不能初始化,能夠手動初始化
kubectl exec -it -n sentry $(kubectl get pods -n sentry |grep sentry-web |awk '{print $1}') bash sentry upgrade
kubectl exec -it -n sentry $(kubectl get pods -n sentry |grep sentry-web |awk '{print $1}') bash sentry createuser
本文看起來洋洋灑灑一大篇,實際上15分鐘就能部署好sentry🎉
Sentry不只僅支持WEB前端,也支持桌面、APP、後端,全平臺💯
注意若是要升級sentry,先備份數據先,以前的數據會被清空 ⚠️
若是遇到Sentry的部署、使用等問題能夠在博客 www.iamle.com 中找到個人wx,加羣討論📣
本文首發於Sentry實時應用錯誤跟蹤系統在Kubernetes中私有化部署 https://www.iamle.com/archives/2847.html,如要轉載請註明出處。
本文首發於流水理魚博客,如要轉載請註明出處。
歡迎關注個人公衆號:流水理魚(liushuiliyu),全棧、雲原生、團隊管理交流。
若是您對相關文章感興趣,也能夠關注個人博客:www.iamle.com 上面有更多內容