美文网首页
Sentry实时应用错误跟踪系统在Kubernetes中私有化部

Sentry实时应用错误跟踪系统在Kubernetes中私有化部

作者: 流水理鱼 | 来源:发表于2020-04-19 23:06 被阅读0次

    应用错误跟踪系统:对软件系统运行过程中产生的错误日志进行收集从而实现监控告警。

    虽然软件错误❌是不可避免的,但是可以降低错误数。

    提高对错误的治理能力能让错误带来的损失降到最低 ​👍🏻 。

    错误日志监控在最顶层的业务层监控,有他将会帮助你打造更好的软件!

    我们需要业务场景下自己发现Bug的速度快于用户报告Bug的速度,毕竟让用户报告已经晚了。

    典型的这套系统的架构:错误日志(前端、后端) => 传输(HTTP)=>错误跟踪平台(收集、展示、分析、告警)。

    本文不讨论哪款软件来解决这个问题,只讲Sentry这个轮子,SASS版本和私有部署版体验几乎一致

    img

    本文主要讲了

    应用错误需要监控的场景案例

    Sentry有哪些功能

    Sentry如何在k8s中私有化部署

    本文由 www.iamle.com 流水理鱼 原创,wx公众号搜索 流水理鱼 或 liushuiliyu

    SEO 关键字

    Sentry私有化部署

    Sentry helm部署

    Sentry kubernets部署 k8s部署

    1. 需要应用错误监控的场景案例

    • 多年的老web项目需要https适配,因为老项目大量写死了http://所以文件修改数巨大,即便测试很仔细也不能保证完全没问题
    • 运营发现落地页转化异常了,有访问没表单提交,找到技术,技术发现是某个JS报错,导致表单无法提交,造成推广费用的损失
    • 上线了一个功能,由于环境差异,只在生产环境才触发,用户报告了才去查问题
    • 应用错误日志虽然通过ELK采集了,但是缺乏及时分析和告警
    • 特定的环境才产生错误,要解决问题的先去构建环境并复现错误,因为不清楚发生错误时的具体参数

    2. Sentry有哪些功能

    Sentry is cross-platform application monitoring, with a focus on error reporting.

    Sentry跨平台应用监控,专注错误报告。

    Sentry英文直译中文叫“哨兵”。

    Sentry提供了一个应用程序监视平台,可以帮助您实时识别问题。

    • 提供WEB UI

    • 提供SASS版和私有部署2种方式

    • 开源,授权协议为BSL,只要你不拿他来做SASS服务卖钱,自用可以免费商用

    • 提供几乎所有主流开发语言和框架的SDK

    • 提供完整的错误详情

    • 支持自动上报错误和手动上报错误

    • 支持WEB前端、后端、APP

    • 支持多项目管理

    • 支持账号权限管理

    • 提供统一错误的聚合分析

    • 今日头条等很多大公司都在用

    img

    3. 在Kubernets中部署Sentry

    目前网上大部分都是讲DockerCompose的部署方式

    其实Helm Hub上可以找到Sentry的helm charts包(⑤),那么直接用Helm部署Sentry是最快速方便的

    3.1 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

    image-20200419182509260

    3.2 Helm 部署 Sentry

    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 使用安装时设置的账号密码登陆即可

    3.3 Sentry新增一个项目

    理论上是需要给每个项目都在Sentry中创建一个对应的项目

    但是实际上这么干会比较麻烦,笔者建议对访问量不大,比如后台类的相同类型的新建一个项目即可

    发现混在一起已经不好区分了,再去拆开也不迟

    对于本身访问量巨大的“前端”项目,建议在Sentry管理后台的一对一配置

    Projects 》 Add new Project 选择一个JavaScript类型

    image-20200419211855759 image-20200419212037861

    ⚠️ 官方提供的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")
    
    image-20200419212444197 image-20200419212641447

    3.4 Helm安装sentry常见问题及解决

    • 解决数据库不能初始化的问题

      如果安装过程数据库不能初始化,可以手动初始化

    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
    
    

    4. 总结

    本文看起来洋洋洒洒一大篇,实际上15分钟就能部署好sentry🎉

    Sentry不仅仅支持WEB前端,也支持桌面、APP、后端,全平台💯

    注意如果要升级sentry,先备份数据先,之前的数据会被清空 ⚠️

    如果遇到Sentry的部署、使用等问题可以在博客 www.iamle.com 中找到我的wx,加群讨论📣

    5. 参考

    本文首发于Sentry实时应用错误跟踪系统在Kubernetes中私有化部署 https://www.iamle.com/archives/2847.html,如要转载请注明出处。
    本文首发于流水理鱼博客,如要转载请注明出处。
    欢迎关注我的公众号:流水理鱼(liushuiliyu),全栈、云原生、团队管理交流。
    如果您对相关文章感兴趣,也可以关注我的博客:www.iamle.com 上面有更多内容

    相关文章

      网友评论

          本文标题:Sentry实时应用错误跟踪系统在Kubernetes中私有化部

          本文链接:https://www.haomeiwen.com/subject/bxfgbhtx.html