Sentry 是什么?这是一个用于错误上报的服务中心,使用近乎一致的 API 设计,统一了不同语言生产环境代码异常上报的难题。
2020 年二月份,领导让我负责在公司内部测试和使用 Sentry,彼时 Sentry 的文档还不是很完善,我也只是初步接触基础服务的搭建,Sentry 于我而言就是一个黑盒子。
2016 年,Sentry 的开发者答复说目前没有任何关于 Sentry 架构的公开资料,最佳的途径就是阅读源码:)这个工程量确实比较大,我个人在使用 Docker-compose 搭建 Sentry 时,借用一连串的日志输出来观察整个数据流,根据服务间的依赖也只能猜测大致的架构。
2020 年下半年,Sentry 开始陆续将文档补全,这个项目的架构图终被公开,结合其他文档,Sentry 的数据流浮出水面。
下方这个图是根据 Sentry 官方文档重绘的,我把所有存储相关的组件用紫色的图形做了区分,其他 Sentry 服务组件用蓝色表示(除了顶部的应用)。
这样画下来之后,服务基本就分层完毕:
/api/\d+/store
,其他项目、成员、错误管理功能由 Sentry Web 负责。这一层的承担数据入口、展示的作用Relay 收到原始数据后,主要做这几件事。
Relay 数据转发到 Kafka 的 ingest-events Topic(Ingest 即摄取),消费者消费后把消息放入 postprocess-event 这个 Celery 定时任务服务排队处理。队列做的事情如下
Sentry Web 这边主要跟配置等持久化数据打交道,创建项目、权限控制、限流分配等都是它负责。查询搜索错误消息、Dashboard 聚合等功能则是 Snuba 承担,由它来当翻译官,把用户查询条件转化为 SQL 语句发给 ClickHouse。
以往的开源项目大部分可以看成是单个组件,升级修复的工作量对一般的工程师而言还是可以接受的。但是 Sentry 这个错误上报服务背后却是十几二十个微服务组成的,一次服务升级可能涉及到很多个微服务、存储服务,瞬间依赖爆炸,测试无从下手。
对于小公司而言,如果不使用 Docker,搭建一个 Sentry 服务,就需要很多台服务器,如果要做主从、集群还需要再乘以 N,如果要做 TLS,又得花大笔钱去购置证书。本来是想节省代码查错的时间成本,可能最后却多花了钱在部署和运维上。
单租户隔离(Single Tenant Isolation)、持续集成测试、TLS 加密、容灾都交给了 Sentry 来做,给它打钱自然而然地成了最划算的方案,不得不说,真羡慕这种站着赚钱的项目:)。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。