Sentry 完全离线部署

Sentry 离线部署

此篇为 Sentry 完全离线部署的操作步骤,来源于自己在一个无网络的 linux 系统中实际操作的总结。主要是一些踩坑的记录和操作手法,留作日后参考。

Sentry 的基本部署方法

首先,如果想在自己的环境中部署 Sentry,完全可以按照官网指南操作即可Self-Hosted Sentry

self_hosted.png

我已经在一台有网络的环境下部署了 sentry(23.7.1)并且已经正常运行了一段时间。 现在需要在一台没有网络的环境下安装 sentry。

下面是一些具体的操作步骤。

离线导出/导入镜像

官方的 self hosted 的版本最终安装后是运行 docker 上的。因为很自然的想到把镜像单独导出来,然后上传到新的服务器上,再进行导入操作。

因为 sentry 的服务很多,这里采用的是分批导出的方式

docker save -o common.tar redis:6.2.12-alpine clickhouse-self-hosted-local confluentinc/cp-zookeeper:5.5.7

在远端服务器上导入镜像

docker load -i common.tar

这里需要注意的是,由于我们是在一个已经运行起来的 sentry中导出的镜像,需要连带将sentry 的安装目录一起拷贝到新的环境,这里是 self-hosted-23.7.1 目录下的所有文件。这个目录也是后面运行 docker-compose 的目录。

启动 Sentry

现在就可以通过 docker-compose up -d 来启动 Sentry 服务了。这个启动和运行过程就是一个不断解决问题的过程。

报错 external volume sentry-kafka not found

这个比较好理解,我们在一台新的机器上,需要的卷肯定是没有的,用如下命令创建。

docker volume create sentry-kafka

之后通过 ls 可以查看是否创建成功

docker volumne ls

启动postgres 报错

错误如下

cp: cannot stat /opt/sentry/wal2json/wal2json.so, no such file or directory

这个报错主要还是因为之前用的 sentry 的安装包是全新的,不是从之前机器上拷贝出来的,因此这些文件都没有。如果使用的是从之前机器上拷贝的安装目录,就不会有这个问题的。

那这些确失的文件是哪来的呢,我们可以看下安装目录下的 install/install-wal2json.sh

mkdir -p "$WAL2JSON_DIR"
if [ ! -f "$WAL2JSON_DIR/$VERSION/$FILE_NAME" ]; then
  mkdir -p "$WAL2JSON_DIR/$VERSION"
  docker_curl -L \
    "https://github.com/getsentry/wal2json/releases/download/$VERSION/$FILE_NAME" \
    >"$WAL2JSON_DIR/$VERSION/$FILE_NAME"
fi

可以看出,正常能使用 install.sh 安装的情况下,会从网络上下载对应的文件。

table sentry_relay does not exist

这还是一个关于 Postgres 的报错。看起来是相应的数据库表不存在,应该是数据库没有做正确的初始化。

还是参考 install/set-up-and-migrate-database.sh 数据库初始化脚本

if [[ -n "${CI:-}" || "${SKIP_USER_CREATION:-0}" == 1 ]]; then
  $dcr web upgrade --noinput
  echo ""
  echo "Did not prompt for user creation. Run the following command to create one"
  echo "yourself (recommended):"
  echo ""
  echo "  $dc_base run --rm web createuser"
  echo ""
else
  $dcr web upgrade
fi

$dcr 是一个变量,其实就是


这里最关键的就是需要运行

docker-compose run --rm web upgrade

运行完之后可以去 postgres 容器上确认一下

可以看到表已经创建出来了


Postgres tables.png

其他

出现的各种问题总结下来其实都和初始化相关,参考一下 install.sh 会有一些思路。

比如如果出现 kafka topic 没有创建的问题,运行一下 install/create-kafka-topics.sh 就可以了。

Nginx 转发的配置

Sentry 启动之后,我想把它放在已有域名的目录下进行访问,应该如何配置 nginx?

首先说这种转发的方式并不是官方推荐的,只是在一个网络受限的环境中不得以采用的访问方法。

为了让 sentry 的管理界面能够正常显示到域名的 sentry/ 路径下,在 nginx 相应的配置下增加如下


转发配置

注意这些路径是否和自己已有路径冲突,不要覆盖自己正常业务的访问。

另外就是要修改 sentry 自身的配置。sentry 的配置一般放在两个文件中,一个是 config.yml, 另外一个是 sentry.conf.py。如果是自定义的域名,首先要修改的就是 config.yml 的如下配置。

system.url-prefix: 'http://test.com/sentry'

转发后出现的问题

其实依然是和初始化相关的问题

  • clickhouse 报错 table default.errors_local does not exist,解决办法 参考 install/bootstrap-snuba.sh

期间还遇到一个比较诡异的问题,sentry 管理界面进去之后,不能加载 issues 页面,访问接口 500。看日志发现入口容器 self-host-web 报错, 连不上 127.0.0.1:1218。通过配置知道 1218 是 snuba-api 的接口,但是不知道为什么 snuba-api 解析到了 127.0.0.1 上去了。 通过一番调试后发现 docker-compose.yml 中定义的环境变量没有传递到容器内。 原来是自己在 yml 文件的 web 下添加了一个环境变量,导致最上层的环境变量不能传递进来

command: ["run", "web"]
  environment:
    PYTHONUSERBASE: "/data/custom-packages"
    SENTRY_CONF: "/etc/sentry"
    SNUBA: "http://snuba-api:1218"
    VROOM: "http://vroom:8085"

DSN 的配置

最后需要验证的就是业务的异常能不能正常发送给 sentry 了。管理后台给出的 DSN 一般格式是 http://47279ec255024a269b4cfa3c9744aa14@test.com/sentry:9000/7这样的链接,但是使用时需要考虑业务所在的环境是否可以通过 test.com/sentry 正常发送数据。

由于之前已经申请了业务方所在的 pod(没错,这里是 k8s 环境) 和 sentry 安装机器的 9000 端口能直接通信,所以另外一种方案就是直接通过 ip 进行发送,比如 http://47279ec255024a269b4cfa3c9744aa14@192.168.0.2:9000/7

实际通过验证发现,通过域名发送会在 sentry 端报错,而 ip 直连的方式可以正常发送异常给 sentry。

通过以上一些配置,最后终于能在域名下看到了 sentry 界面和业务方发送的异常信息

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容