前言

上一篇文章说了重启 sentry 的事

因为过程太折腾了,一度想过放弃 sentry 换成其他比较轻量级的开源监控系统

这不就给我找到了另外俩个

这次就来试试这个 glitchtip

用了之后才发现,这个也是用 Django 开发的,而且兼容 sentry 协议,连 SDK 都用的 sentry 的…

就是个 sentry 的轻量级平替版

环境准备

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

日志数据是存在 PostgreSQL 里的

这就很舒服了,部署起来比 sentry 这种重量级的框架简单多了

本文的部署基于官方的 docker-compose 配置修改而来

PostgreSQL

首先准备数据库

官方的 compose 里带有一个数据库,不过我服务器上已经有数据库了,就不要重复搞那么多容器

services:
db:
image: postgres
container_name: pgsql
restart: unless-stopped
environment:
- POSTGRES_PASSWORD=数据库管理员密码
expose:
- 5432
ports:
- 5432:5432
volumes:
- ./data:/var/lib/postgresql/data
networks:
- default networks:
default:
name: pgsql

把pgsql启动之后,先来创建 glitchtip 用到的数据库和用户

-- 创建用户: 使用 CREATE ROLE 或 CREATE USER 命令来创建一个新用户。
CREATE USER glitchtip WITH PASSWORD 'glitchtip用户密码'; -- 赋予权限: 要确保 glitchtip 用户只能访问 glitchtip 数据库,你需要为该用户设置适当的权限。
GRANT ALL PRIVILEGES ON DATABASE glitchtip TO glitchtip; -- 授予在 public 模式中创建表的权限
GRANT CREATE ON SCHEMA public TO glitchtip;
-- 授予在 public 模式中使用的权限
GRANT USAGE ON SCHEMA public TO glitchtip;

这里数据库的就搞定了

扩展:adminer

如果想在网页上管理数据库,可以启动一个 adminer 服务

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

启动之后在 swag 做一下8000端口的反代即可。

Redis

redis 比较轻,建议使用 glitchtip 里的即可,不需要使用共用的 Redis

除非搭了集群

安装 glitchtip

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

有几点需要注意:

  • 邮箱地址和密码需要使用 urllib.parse.quote() 转义,我这里依然使用企业邮箱,不过试了smtp://smtps://前缀都没法发送成功
  • 把官方的顶层volumes去掉了,把数据放在当前目录下,方便管理。如果有大量数据可以考虑换 OSS
  • 使用我们前面部署的 PostgreSQL 数据库,而不是 compose 里另外起一个
x-environment: &default-environment
DATABASE_URL: postgres://glitchtip:glitchtip用户密码@pgsql:5432/glitchtip
SECRET_KEY: 建议32位随机密码 # 可以使用命令生成 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

启动就完事了

首次启动后需要 migrate ,这时候 worker 会报错,没事,等 migrate 完成就好了。

登录后注册、创建一个新组织,就可以正常使用了。

代码里使用

仅使用glitchtip

如果单纯用 glitchtip,当成 sentry 来用就行了

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",
)

就这么朴实无华

与 sentry 同时使用

PS: 话说为什么要和sentry同时使用?

sentry_sdk 默认不支持同时初始化多个实例

所以通过一些额外的逻辑来实现这个功能

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://balabalaba@glitchtip.example.com/1')

搞定了

小结

简单体验下来,glitchtip真的简陋很多

不过最基本的错误收集功能还是有的

如果服务器性能不够的话,作为sentry的平替还是不错的。

还有个 highlight 我还没部署上,里面的配置有点复杂。

兼容sentry协议的轻量级监控,glitchtip的更多相关文章

  1. H5 的直播协议和视频监控方案

    H5 的直播协议和视频监控方案 一.流媒体主要实现方式 二.流媒体技术 2.1 流媒体 2.2 直播 2.3 流协议 2.3.1 HLS 协议 2.3.2 RTMP 协议 2.3.3 RTSP 协议 ...

  2. KeeWiDB:兼容Redis协议,领跑NoSQL

    如果现在的我们离开了互联网,生活会是什么样子? 互联网++++,已经深刻渗透到人们的生活中. 不知道大家有没有想过?每一个互联网+结合的背后都是海量的存储需求.你查看的每一个商品.组建的每一个战队.阅 ...

  3. 转:基于HTTP协议的轻量级开源简单队列服务:HTTPSQS

    [文章作者:张宴 本文版本:v1.7.1 最后修改:2011.11.04 转载请注明原文链接:http://blog.zyan.cc/httpsqs/] HTTPSQS(HTTP Simple Que ...

  4. 硬件和软件兼容i2c协议的24Cxx系列EEPROM存储器(转)

    源:硬件和软件兼容i2c协议的24Cxx系列EEPROM存储器 硬件上由于24c01的A0A1A2管脚不允许悬空,故暂时的想法是兼容24c02 ---24c16 使用一个dip8封装的芯片插座,A0 ...

  5. 基于JT/T808协议的车辆监控平台架构方案

    技术支持QQ:78772895 1.接入网关应用采用mina/netty+spring架构,独立于其他应用,主要负责维护接入终端的tcp链接.上行以及下行消息的解码.编码.流量控制,黑白名单等安全控制 ...

  6. Java虚拟机性能管理神器 - VisualVM(1) 简介 - JVM轻量级监控分析神器

    目录(?)[-] 一VisualVM是什么 二如何获取VisualVM 三获取那个版本 四VisualVM能做什么 显示JAVA应用程序配置和运行时环境 显示本地和远程JAVA应用程序运行状态 监控应 ...

  7. 基于HTTP协议的轻量级开源简单队列服务:HTTPSQS[转]

    HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key ...

  8. 基于sentry的前端错误监控日志系统(部署sentry服务器/前端项目部署)-让前端最快的定位到生产问题

    背景 在这越来越发达的网络时代,web应用也是越来越复杂,尤其是前端的开发,也是越来越受重视. 所以在我们前端开发完成后,会有一些列的web应用的上线验证,如自测.QA测试.code review 等 ...

  9. 轻量级监控平台之cpu监控

    轻量级监控平台之cpu监控脚本 #!/bin/bash #进程监控脚本 #功能需求: 上报机器的硬件层面-cpu负载数据 . /etc/profile . ~/.bash_profile pushur ...

  10. 轻量级监控平台之java进程监控脚本

    轻量级监控平台之java进程监控脚本 #!/bin/bash #进程监控脚本 #功能需求: 上报机器Java进程的进程ID,对应的端口号service tcp端口号,tomcat http 端口号,以 ...

随机推荐

  1. Android 13 - Media框架(6)- NuPlayer

    关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节我们通过 NuPlayerDriver 了解了 NuPlayer 的使用方式,这一节我们一起来学习 NuPlayer 的部分实现细节. ps: ...

  2. wpf 动画显示隐藏_[UWP]用Win2D和CompositionAPI实现文字的发光效果,并制作动画

    weixin_39880899于 2020-12-11 09:26:23 发布 阅读量521 收藏 点赞数 文章标签: wpf 动画显示隐藏   1. 成果 献祭了周末的晚上,成功召唤出了上面的番茄钟 ...

  3. Flutter TextField开始输入中文的时候,被打断导致错误输入字母问题

    一.Bug样例 建立一个web demo flutter run -d chrome --web-renderer html 出现问题: 输入中文的时候,比如打字 hao, 第一个字母h会先输入,变成 ...

  4. 记一例UIView突然不显示的排查过程

    一.现象 今日在开发中遇到一个诡异问题,一个自定义的AlertView在显示之后瞬间在屏幕上消失,但是其对象在内存中依然存在 二.排查 通过lldb命令查询到view.superview.superv ...

  5. 浅谈ChatGPT模型中的惩罚机制

    本文由ChatMoney团队出品 在探讨ChatGPT模型的文本生成能力时,除了采样算法,惩罚机制同样扮演着至关重要的角色.这些机制不仅影响生成文本的多样性和创意性,还为我们提供了调整文本风格和质量的 ...

  6. LeetCode 449. Serialize and Deserialize BST 序列化和反序列化二叉搜索树 (Java)

    题目: Serialization is the process of converting a data structure or object into a sequence of bits so ...

  7. 浅谈 DDD 领域驱动设计

    文章简介 在B端产品研发及项目实施中,DDD带给我们哪些思考?我们是如何应用的?本文不是科普贴,旨在分享我们的经历和思考. 背景 Domain Driven Design(简称 DDD),又称为领域驱 ...

  8. Thread的join方法demo

    Thread的join方法demo /** * 关于join官方的解释是 Waits for this thread to die. 也就是等待一个线程结束. */ public class Thre ...

  9. vue中手写table的升降序

    有些时候,我们总是无可避免的需要自己去手撸一些东西,因为需求总是在不断的变化.例如,最开始的需求,我们只是在首页展示一个数据列表,此时,我们可能直接就自己手写了一个table,后来,突然增加了一个需求 ...

  10. (数据科学学习手札162)Python GIS神器geopandas 1.0版本发布

    本文完整代码及附件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在昨天,Python生 ...