成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

錯誤跟蹤系統Sentry是何方神圣?

開發 架構
在應用的整個生命周期里,避無可避的就是“錯誤”,很多時候都是借助日志平臺來捕獲、查看日志,以此來找到錯誤的原因,但是很多時候應用的日志有很多誤導性,也不能夠很直觀的指出問題的源點,并且也缺乏及時分析和告警能力(當然現在很多商用的日志系統都有這個功能了,但是需要Money)。

[[422794]]

本文轉載自微信公眾號「運維開發故事」,作者喬克 。轉載本文請聯系運維開發故事公眾號。

大家好,我是喬克,一名一線運維實踐者。

今天和大家分享一下什么是錯誤跟蹤系統,以及如何使用。

在應用的整個生命周期里,避無可避的就是“錯誤”,很多時候都是借助日志平臺來捕獲、查看日志,以此來找到錯誤的原因,但是很多時候應用的日志有很多誤導性,也不能夠很直觀的指出問題的源點,并且也缺乏及時分析和告警能力(當然現在很多商用的日志系統都有這個功能了,但是需要Money)。

有沒有比較好用的開源軟件呢?

Sentry就是這樣一款優秀的應用錯誤跟蹤系統,并且支持大多數的語言,如下。

錯誤跟蹤系統是什么?

從字面上就可以很好理解,錯誤跟蹤系統就是跟蹤系統錯誤、異常的一個軟件,旨在幫助開發、運維等技術人員跟蹤應用的一些錯誤信息。

通過對應用的錯誤進行實時追蹤并統一跟進,提高對錯誤的治理能力。讓業務場景下自己發現Bug的速度快于用戶報告Bug的速度。

Sentry是什么

Sentry是一個跨平臺的應用錯誤跟蹤系統,專注于錯誤報告。

Sentry的原理是什么呢?

首先,應用要集成Sentry的SDK,然后在應用發生錯誤時將錯誤信息發送給Sentry服務端。Sentry的服務端分為web、cron、worker這幾個部分,應用(客戶端)發生錯誤后將錯誤信息上報給web,web處理后放入消息隊列或Redis內存隊列,worker從隊列中消費數據進行處理 。

其主要優點如下:

  • 提供精美的WEB UI界面
  • 支持幾乎所有的主流開發語言的SDK,接入簡單
  • 提供完整的錯誤詳情
  • 支持統一的錯誤聚合分析
  • 支持儀表盤、監控、告警等功能
  • 支持團隊管理、成員管理
  • 支持日志審計等

當然也有一些缺點,針對維護部署其需要的中間件非常多,有kafka、rabbitMQ、redis、pgsql等,這一套部署下來的成本還是比較高。不過瑕不掩瑜,相比于它給我們帶來的好處,這些問題都可以克服。

image.png

部署Sentry

Sentry提供服務的方式有兩種:

  1. SAAS平臺,有不同的付費方式
  2. 私有化部署

這里主要闡述如何在Kubernetes中進行部署。

環境介紹

  • Kubernetes:1.17.17
  • Docker:18.09.0
  • Helm:3.6.3
  • 存儲:使用Local PV

OpenEBS簡介

OpenEBS是一款使用Go語言編寫的基于容器的塊存儲開源軟件。OpenEBS使得在容器中運行關鍵性任務和需要數據持久化的負載變得更可靠。

使用OpenEBS,你可以將有持久化數據的容器,像對待其他普通容器一樣來對待。OpenEBS本身也是通過容器來部署的,支持Kubernetes、Swarm、Mesos、Rancher編排調度,存儲服務可以分派給每個pod、應用程序、集群或者容器級別,包括:

  • 跨節點的數據持久化
  • 跨可用區和云廠商的數據同步
  • 使用商業硬件和容器引擎來提供高可擴展的塊存儲
  • 與容器編排引擎集成,開發者的應用程序可以自動的配置OpenEBS
  • 基于CloudByte在BSD的容器化經驗,為用戶提供OpenEBS的QoS保證

OpenEBS的架構可以分為數據平面(Data Plane)和控制平面(Control Plane)兩部分:

  • 數據平面:為應用程序提供數據存儲
  • 控制平面:管理OpenEBS卷容器,這通常會用到容器編排軟件的功能

環境部署

1、部署OpenEBS

OpenEBS支持Helm Chart和Operator部署.

(1)使用Helm Chart部署

  1. helm repo add openebs https://openebs.github.io/charts 
  2. helm repo update 
  3. helm install openebs --namespace openebs openebs/openebs --create-namespace 

(2)使用Operator部署

  1. kubectl apply -f https://openebs.github.io/charts/openebs-operator.yaml 

部署完成后會生成如下Pod。

  1. # kubectl get pod -n openebs  
  2. NAME                                          READY   STATUS    RESTARTS   AGE 
  3. maya-apiserver-67b5b5c858-4mstb               1/1     Running   0          5d19h 
  4. openebs-admission-server-6bdf9b76d6-r4r6b     1/1     Running   0          5d19h 
  5. openebs-localpv-provisioner-966d864cd-sf8fp   1/1     Running   0          5d19h 
  6. openebs-ndm-59lkx                             1/1     Running   0          5d19h 
  7. openebs-ndm-bphgw                             1/1     Running   0          5d19h 
  8. openebs-ndm-grxlb                             1/1     Running   0          5d19h 
  9. openebs-ndm-operator-55b8ccc64b-r7tkr         1/1     Running   0          5d19h 
  10. openebs-ndm-zwhmm                             1/1     Running   0          5d19h 
  11. openebs-provisioner-55794b6cd4-ptd85          1/1     Running   0          5d19h 
  12. openebs-snapshot-operator-5d78fcbd96-7xqzv    2/2     Running   0          5d19h 

以及如下的StorageClass。

  1. # kubectl get sc | grep openebs 
  2. local (default)             openebs.io/local                                           Delete          WaitForFirstConsumer   false                  5d19h 
  3. openebs-device              openebs.io/local                                           Delete          WaitForFirstConsumer   false                  5d19h 
  4. openebs-hostpath            openebs.io/local                                           Delete          WaitForFirstConsumer   false                  5d19h 
  5. openebs-jiva-default        openebs.io/provisioner-iscsi                               Delete          Immediate              false                  5d19h 
  6. openebs-snapshot-promoter   volumesnapshot.external-storage.k8s.io/snapshot-promoter   Delete          Immediate              false                  5d19h 

2、部署Postgresql

其實在Sentry的Helm Chart中有Postgresql的Chart包,這里之所以單獨來部署,是因為通過Sentry中的Chart包部署,在Postgresql環節出現了各種問題,比如:

  1. FATAL: password authentication failed for user "postgres" 

這里通過Helm Chart來部署Postgresql,具體步驟如下:

  1. # 添加Helm倉庫 
  2. helm repo add bitnami https://charts.bitnami.com/bitnami 
  3. helm repo update 
  4. # 把Chart包下載下來 
  5. helm pull bitnami/postgresql 

編寫配置文件(my-value.yaml),如下:

  1. global
  2.   postgresql: 
  3.     postgresqlDatabase: "sentry" 
  4.     postgresqlUsername: "postgres" 
  5.     existingSecret: "" 
  6.     postgresqlPassword: "postgres" 
  7.     servicePort: "" 
  8.     replicationPassword: "" 

安裝PGSQL,命令如下:

  1. helm install postgresql -n sentry -f my-value.yaml bitnami/postgresql 

部署完成后,可以看到如下Pod:

  1. # kubectl get po -n sentry  
  2. NAME                                                  READY   STATUS      RESTARTS   AGE 
  3. postgresql-postgresql-0                               1/1     Running     0          3h39m 

3、部署Sentry

Sentry也是采用Helm Chart來進行部署,如下:

  1. # 添加Helm倉庫 
  2. helm repo add sentry https://sentry-kubernetes.github.io/charts 
  3. helm repo update 
  4. helm search repo sentry 
  5. # 下載Chart包,便于查看修改Chart 
  6. helm pull sentry/sentry 

編寫配置文件(my-value.yaml),如下:

  1. externalPostgresql: 
  2.   database: sentry 
  3.   port: 5432 
  4.   username: postgres 
  5.   host: postgresql 
  6.   password: postgres 
  7. postgresql: 
  8.   enabled: false 
  9. mail: 
  10.   backend: dummy 
  11.   from"joker2021@163.com" 
  12.   host: "smtp" 
  13.   password"UZKSGLFEANWGLZNT" 
  14.   port: 465 
  15.   useTls: true 
  16.   username: "" 
  17. user
  18.   createtrue 
  19.   email: admin@sentry.local 
  20.   password: P@ssword 

部署Sentry,如下:

  1. helm install sentry -n sentry -f my-value.yaml sentry/sentry 

部署完成后,會生成如下Pod:

  1. # kubectl get po -n sentry  
  2. NAME                                                  READY   STATUS      RESTARTS   AGE 
  3. postgresql-postgresql-0                               1/1     Running     0          3h50m 
  4. sentry-clickhouse-0                                   1/1     Running     0          3h50m 
  5. sentry-clickhouse-1                                   1/1     Running     0          3h50m 
  6. sentry-clickhouse-2                                   1/1     Running     0          3h50m 
  7. sentry-cron-578647dd7-gk7gf                           1/1     Running     0          3h50m 
  8. sentry-ingest-consumer-7564f644bf-srkj2               1/1     Running     0          3h47m 
  9. sentry-kafka-0                                        1/1     Running     2          3h50m 
  10. sentry-kafka-1                                        1/1     Running     2          3h50m 
  11. sentry-kafka-2                                        1/1     Running     2          3h50m 
  12. sentry-nginx-675d779699-tfdr5                         1/1     Running     0          3h50m 
  13. sentry-post-process-forward-5f586f6cdf-lxmc4          1/1     Running     0          3h47m 
  14. sentry-rabbitmq-0                                     1/1     Running     0          3h50m 
  15. sentry-rabbitmq-1                                     1/1     Running     0          3h49m 
  16. sentry-rabbitmq-2                                     1/1     Running     0          3h48m 
  17. sentry-relay-75597cb98b-jm282                         1/1     Running     0          3h47m 
  18. sentry-sentry-redis-master-0                          1/1     Running     0          3h50m 
  19. sentry-sentry-redis-slave-0                           1/1     Running     0          3h50m 
  20. sentry-sentry-redis-slave-1                           1/1     Running     0          3h49m 
  21. sentry-sessions-consumer-6b499bf64d-lm7gq             1/1     Running     0          3h47m 
  22. sentry-snuba-api-5586d5f9f8-tcn5s                     1/1     Running     0          3h50m 
  23. sentry-snuba-cleanup-errors-1630472400-xv5wh          0/1     Completed   0          134m 
  24. sentry-snuba-cleanup-errors-1630476000-xd7d2          0/1     Completed   0          74m 
  25. sentry-snuba-cleanup-errors-1630479600-sd59b          0/1     Completed   0          14m 
  26. sentry-snuba-cleanup-transactions-1630472400-l9bcx    0/1     Completed   0          134m 
  27. sentry-snuba-cleanup-transactions-1630476000-cjsbd    0/1     Completed   0          74m 
  28. sentry-snuba-cleanup-transactions-1630479600-zn5dz    0/1     Completed   0          14m 
  29. sentry-snuba-consumer-58b7bfd545-rnjmx                1/1     Running     0          3h47m 
  30. sentry-snuba-outcomes-consumer-57c589bf6d-lxg5m       1/1     Running     0          3h47m 
  31. sentry-snuba-replacer-5bf4d6b5d7-gcc7g                1/1     Running     0          3h47m 
  32. sentry-snuba-transactions-consumer-57bb7f8ccb-q6gkt   1/1     Running     0          3h47m 
  33. sentry-web-7c9766768b-njxjl                           1/1     Running     0          3h50m 
  34. sentry-worker-844fd65687-6b26p                        1/1     Running     2          3h50m 
  35. sentry-worker-844fd65687-k2h6z                        1/1     Running     2          3h50m 
  36. sentry-worker-844fd65687-rfjcl                        1/1     Running     2          3h50m 
  37. sentry-zookeeper-0                                    1/1     Running     0          3h50m 

然后可以通過ingress或者nodeport的方式進行訪問,用戶名和密碼是上面配置的admin@sentry.local和P@ssword。

創建項目

進入WEB UI界面,在項目專欄創建項目,如下:

我這里創建一個Go項目,如下:

點擊創建后,就會生成一個Dsn地址,并且給出一個配置示例,如下:

  1. package main 
  2.  
  3. import ( 
  4.  "fmt" 
  5.  "github.com/getsentry/sentry-go" 
  6.  sentrygin "github.com/getsentry/sentry-go/gin" 
  7.  "github.com/gin-gonic/gin" 
  8.  "github.com/pkg/errors" 
  9.  "net/http" 
  10.  
  11. func main() { 
  12.  // To initialize Sentry's handler, you need to initialize Sentry itself beforehand 
  13.  if err := sentry.Init(sentry.ClientOptions{ 
  14.   Dsn: "https://b06bcc1c67b44084a3f65fc8b219a5fc@o985819.ingest.sentry.io/5942245"
  15.  }); err != nil { 
  16.   fmt.Printf("Sentry initialization failed: %v\n", err) 
  17.  } 
  18.  sentry.CaptureMessage("It works!"
  19.  sentry.CaptureException(errors.New("error msg")) 
  20.  // Then create your app 
  21.  app := gin.Default() 
  22.  
  23.  // Once it's done, you can attach the handler as one of your middleware 
  24.  app.Use(sentrygin.New(sentrygin.Options{})) 
  25.  
  26.  // Set up routes 
  27.  app.GET("/", func(ctx *gin.Context) { 
  28.   ctx.String(http.StatusOK, "Hello world!"
  29.  }) 
  30.  
  31.  // And run it 
  32.  app.Run(":3000"
  33.  

其他類型的項目與此類似,具體步驟也就三步:

  • 在Sentry WEB UI界面創建項目
  • 生成對應的Dsn
  • 將其引入到具體的應用代碼中

然后應用部署過后,就會通過Post的方式上報應用錯誤,屆時就可以在WEB界面進行查看。

image.png

創建警報

可以創建的告警類型還是比較豐富,如下:

然后創建規則,如下:

 

除此之外還可以進行團隊、成員管理,日志審計等,更多功能需要自己去實踐了。

 

責任編輯:武曉燕 來源: 運維開發故事
相關推薦

2011-10-24 10:05:28

云存儲云計算

2019-03-20 20:38:13

智慧物流物流自動化涌現

2016-06-17 12:31:10

Spark SQL數據處理Spark

2015-01-20 10:19:02

谷歌AraGoogle

2013-03-14 09:59:26

超級計算機泰坦HPC

2023-10-06 23:27:09

2024-10-11 19:17:11

2021-06-10 05:54:01

Fastly邊緣云計算公司

2016-11-02 07:25:02

科技新聞早報

2021-12-16 10:19:05

程序員毛星云騰訊

2021-07-19 07:55:23

JCP阿里巴巴執行

2023-03-07 10:53:33

短信

2025-04-02 08:00:00

Agent智能人工智能

2024-04-07 10:05:54

前端開源

2021-12-22 10:29:23

Prometheus elasticsear運維

2010-11-17 10:22:37

TOP10超級計算機

2021-09-30 23:12:52

監控分布式跟蹤

2016-12-07 15:39:51

CIO時代

2009-03-09 18:49:35

Windows 7證書管理器保險柜

2012-03-14 08:54:27

Flash
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99视频在线免费观看 | 日本精品一区二区三区在线观看视频 | 久久久久久九九九九 | 日韩精品免费 | 亚洲久视频 | 国产一级在线视频 | 欧美成人精品激情在线观看 | 日韩视频在线免费观看 | 欧美一级免费 | av手机在线免费观看 | 国产露脸对白88av | 国产成人精品福利 | 国产一区二区三区四区 | 91免费在线 | 亚洲综合色 | 欧美日韩国产在线 | 天天想天天干 | 久草综合在线视频 | 69av网| 国产亚洲精品综合一区 | 久久久久网站 | 日本成人片在线观看 | 综合精品久久久 | 国产精品日韩欧美一区二区三区 | 久久久久一区 | 国产网站在线免费观看 | 一区二区三区在线 | 国产欧美精品一区二区 | 欧美日韩综合一区 | 丁香五月缴情综合网 | 日本不卡一区二区三区 | www.99热.com| 国产欧美日韩精品一区 | 噜啊噜在线 | 精品久久久久久久久久久久久 | 草比网站| 日本久久久久久久久 | 岛国av一区二区三区 | 一区二区三区四区不卡视频 | 福利视频一区 | 老子午夜影院 |