<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          兼容sentry協(xié)議的輕量級(jí)監(jiān)控: glitchtip

          共 6984字,需瀏覽 14分鐘

           ·

          2024-07-23 09:58

          前言

          上一篇文章說(shuō)了重啟 sentry 的事

          因?yàn)檫^(guò)程太折騰了,一度想過(guò)放棄 sentry 換成其他比較輕量級(jí)的開源監(jiān)控系統(tǒng)

          這不就給我找到了另外倆個(gè)

          • https://glitchtip.com/
          • https://www.highlight.io/

          這次就來(lái)試試這個(gè) glitchtip

          用了之后才發(fā)現(xiàn),這個(gè)也是用 Django 開發(fā)的,而且兼容 sentry 協(xié)議,連 SDK 都用的 sentry 的…

          就是個(gè) sentry 的輕量級(jí)平替版

          環(huán)境準(zhǔn)備

          相比起 sentry ,glitchtip 非常的輕量,只用到了 redis 和 celery

          日志數(shù)據(jù)是存在 PostgreSQL 里的

          這就很舒服了,部署起來(lái)比 sentry 這種重量級(jí)的框架簡(jiǎn)單多了

          本文的部署基于官方的 docker-compose 配置修改而來(lái)

          PostgreSQL

          首先準(zhǔn)備數(shù)據(jù)庫(kù)

          官方的 compose 里帶有一個(gè)數(shù)據(jù)庫(kù),不過(guò)我服務(wù)器上已經(jīng)有數(shù)據(jù)庫(kù)了,就不要重復(fù)搞那么多容器

          services:
            db:
              image: postgres
              container_name: pgsql
              restart: unless-stopped
              environment:
                - POSTGRES_PASSWORD=數(shù)據(jù)庫(kù)管理員密碼
              expose:
                - 5432
              ports:
                - 5432:5432
              volumes:
                - ./data:/var/lib/postgresql/data
              networks:
                - default

          networks:
            default:
              name: pgsql

          把pgsql啟動(dòng)之后,先來(lái)創(chuàng)建 glitchtip 用到的數(shù)據(jù)庫(kù)和用戶

          -- 創(chuàng)建用戶: 使用 CREATE ROLE 或 CREATE USER 命令來(lái)創(chuàng)建一個(gè)新用戶。
          CREATE USER glitchtip WITH PASSWORD 'glitchtip用戶密碼';

          -- 賦予權(quán)限: 要確保 glitchtip 用戶只能訪問(wèn) glitchtip 數(shù)據(jù)庫(kù),你需要為該用戶設(shè)置適當(dāng)?shù)臋?quán)限。
          GRANT ALL PRIVILEGES ON DATABASE glitchtip TO glitchtip;

          -- 授予在 public 模式中創(chuàng)建表的權(quán)限
          GRANT CREATE ON SCHEMA public TO glitchtip;
          -- 授予在 public 模式中使用的權(quán)限
          GRANT USAGE ON SCHEMA public TO glitchtip;

          這里數(shù)據(jù)庫(kù)的就搞定了

          擴(kuò)展:adminer

          如果想在網(wǎng)頁(yè)上管理數(shù)據(jù)庫(kù),可以啟動(dòng)一個(gè) adminer 服務(wù)

          services:
            adminer:
              image: adminer
              container_name: adminer
              restart: always
              networks:
                - swag
                - pgsql
                - mysql

          networks:
            swag:
              name: swag
              external: true
            pgsql:
              name: pgsql
              external: true
            mysql:
              name: mysql
              external: true

          啟動(dòng)之后在 swag 做一下8000端口的反代即可。

          Redis

          redis 比較輕,建議使用 glitchtip 里的即可,不需要使用共用的 Redis

          除非搭了集群

          安裝 glitchtip

          我修改了一下官方提供的 compose 配置

          有幾點(diǎn)需要注意:

          • 郵箱地址和密碼需要使用 urllib.parse.quote() 轉(zhuǎn)義,我這里依然使用企業(yè)郵箱,不過(guò)試了smtp://smtps://前綴都沒法發(fā)送成功
          • 把官方的頂層volumes去掉了,把數(shù)據(jù)放在當(dāng)前目錄下,方便管理。如果有大量數(shù)據(jù)可以考慮換 OSS
          • 使用我們前面部署的 PostgreSQL 數(shù)據(jù)庫(kù),而不是 compose 里另外起一個(gè)
          x-environment: &default-environment
            DATABASE_URL: postgres://glitchtip:glitchtip用戶密碼@pgsql:5432/glitchtip
            SECRET_KEY: 建議32位隨機(jī)密碼 # 可以使用命令生成 openssl rand -hex 32
            PORT: 8000
            EMAIL_URL: smtp://郵箱地址:郵箱密碼@smtp.exmail.qq.com:465
            GLITCHTIP_DOMAIN: https://glitchtip.example.com
            DEFAULT_FROM_EMAIL: 郵箱地址
            CELERY_WORKER_AUTOSCALE: "1,3"
            CELERY_WORKER_MAX_TASKS_PER_CHILD: "10000"

          x-depends_on: &default-depends_on
            - redis

          services:
            redis:
              image: redis
              restart: unless-stopped
              networks:
                - default
            
            web:
              image: glitchtip/glitchtip
              depends_on: *default-depends_on
              ports:
                - "8000:8000"
              environment: *default-environment
              restart: unless-stopped
              volumes:
                - ./uploads:/code/uploads
              networks:
                - default
                - pgsql
                - swag
            
            worker:
              image: glitchtip/glitchtip
              command: ./bin/run-celery-with-beat.sh
              depends_on: *default-depends_on
              environment: *default-environment
              restart: unless-stopped
              volumes:
                - ./uploads:/code/uploads
              networks:
                - default
                - pgsql
            
            migrate:
              image: glitchtip/glitchtip
              depends_on: *default-depends_on
              command: "./manage.py migrate"
              environment: *default-environment
              networks:
                - pgsql
                - default

          networks:
            default:
              name: glitchtip
            swag:
              name: swag
              external: true
            pgsql:
              name: pgsql
              external: true

          啟動(dòng)就完事了

          首次啟動(dòng)后需要 migrate ,這時(shí)候 worker 會(huì)報(bào)錯(cuò),沒事,等 migrate 完成就好了。

          登錄后注冊(cè)、創(chuàng)建一個(gè)新組織,就可以正常使用了。

          代碼里使用

          僅使用glitchtip

          如果單純用 glitchtip,當(dāng)成 sentry 來(lái)用就行了

          import sentry_sdk
          from sentry_sdk.integrations.django import DjangoIntegration

          sentry_sdk.init(
              dsn="YOUR-GLITCHTIP-DSN-HERE",
              integrations=[DjangoIntegration()],
              auto_session_tracking=False,
              traces_sample_rate=0.01,
              release="1.0.0",
              environment="production",
          )

          就這么樸實(shí)無(wú)華

          與 sentry 同時(shí)使用

          ?

          PS: 話說(shuō)為什么要和sentry同時(shí)使用?

          sentry_sdk 默認(rèn)不支持同時(shí)初始化多個(gè)實(shí)例

          所以通過(guò)一些額外的邏輯來(lái)實(shí)現(xiàn)這個(gè)功能

          class GlitchtipSentrySdk:
              def __init__(self, dsn):
                  self.client = sentry_sdk.Hub(sentry_sdk.Client(dsn))

              def capture_exception(self, exc):
                  with self.client:
                      sentry_sdk.capture_exception(exc)

          glitchtip = GlitchtipSentrySdk('https://[email protected]/1')

          搞定了

          小結(jié)

          簡(jiǎn)單體驗(yàn)下來(lái),glitchtip真的簡(jiǎn)陋很多

          不過(guò)最基本的錯(cuò)誤收集功能還是有的

          如果服務(wù)器性能不夠的話,作為sentry的平替還是不錯(cuò)的。

          還有個(gè) highlight 我還沒部署上,里面的配置有點(diǎn)復(fù)雜。


          瀏覽 47
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲成人无码免费观看 | 亚洲第一页中文字幕 | 三级黄色操逼片 | 水蜜桃一曲二区 | 麻豆国产97在线 | 欧美 |