应用错误跟踪系统:对软件系统运行过程当中产生的错误日志进行收集从而实现监控告警。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 上面有更多内容