Sentry 替代品 Bugsink 安装配置

如果你像我一样需要一个线上异常 traceback 跟踪工具,又没法忍受 Kafka/ClickHouse/Snuba/Zookeeper 这一坨依赖,那么归根结底有三个选择

  1. sentry<10.0 大概是2019年之前的版本,只依赖db/redis,太老
  2. glitchtip 除了错误跟踪也支持 uptime 等
  3. bugsink。不支持 Android/Java 的在线符号化(无 mapping 上传)

最后选了 bugsink 。记录一下 pip 安装部署的坑

下面的配置指 bugsink-create-conf 命令生成的 bugsink_conf.py

避免安装 MySQLdb

docker编译环境一坨,改纯py的 pymysql 代替,在配置顶部写

import pymysql; pymysql.install_as_MySQLdb()

CSRF

前面有一层 nginx 反代,然后一直报 CSRF 错误,因为 X-Forwarded-Proto 没值,所以 django csrf middleware 当成http给拦了。修改方法是配置里加一行

SECURE_PROXY_SSL_HEADER = ("HTTP_ORIGIN", BUGSINK['BASE_URL'])

厂家遥测

配置里 PHONEHOME = False

如果不这样干,我记得会启动报错。需要

from django.apps import apps
Installation = apps.get_model("phonehome", "Installation")
Installation.objects.create()

绕过 migration 建表

手上没pg,django高版本居然限制死了 mysql > 8.0 无语。

直接配置里加两句

from django.db.backends.mysql.features import DatabaseFeatures
DatabaseFeatures.minimum_database_version = None

实测 bugsink跑在mysql 5.6 完全ok,没用到任何高版本特性。纯纯是 django框架在作妖,懒得支持 EOF

跳过 migration

我执行 bugsink-manage migrate 发现mysql 5.6 太老了。于是想办法直接建表而不是一步一步migrate。获得所有建表语句是:

import os
import django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bugsink_conf")
django.setup()

from django.apps import apps
from django.db import connection

with connection.schema_editor(collect_sql=True) as editor:
    for model in apps.get_models():
        editor.create_model(model)

print("\n".join(editor.collected_sql))

打印出来比较乱,建议让AI重新整理一版,让 CONSTRAINT,FOREIGN KEY 都写到一起。更加方便一次性生效

吐槽下 django 这种 migration 真是不方便。明明新系统直接一次性建表就行。

建表之后要登记一下 migration 完毕 python manage.py migrate --fake-initial

日期格式

本来想配置里加

DATETIME_FORMAT = "c"   # ISO 8601
DATE_FORMAT = "Y-m-d"
TIME_FORMAT = "H:i:s"

不过发现bugsink代码里日期格式是写死的。改起来太麻烦,作罢

Comments