Sentry 监控 - Snuba 数据中台架构简介(Kafka+Clickhouse)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: Sentry 监控 - Snuba 数据中台架构简介(Kafka+Clickhouse)

Snuba 是一种在 Clickhouse 之上提供丰富数据模型以及快速摄取消费者(直接从 Kafka 获取数据)和查询优化器的服务。


Snuba 最初的开发目的是取代 PostgresRedis 的组合,以搜索和提供有关 Sentry 错误的聚合数据。从那时起,它已经演变成目前的形式,在多个数据集上支持大多数与时间序列相关的 Sentry 功能。


功能



  • Clickhouse 分布式数据存储提供数据库访问层。
  • 提供一个图形逻辑数据模型,客户端可以通过 SnQL 语言查询,该语言提供类似于 SQL 的功能。
  • 在单个安装中支持多个单独的数据集。
  • 提供基于规则的查询优化器。
  • 提供一个迁移系统,将 DDL 更改应用于单节点和分布式环境中的 Clickhouse
  • 直接从 Kafka 摄取数据
  • 支持时间点查询和流式查询。


Sentry 中的一些用例:



  • events 数据集为 Issue Page 等功能提供支持。此处的搜索功能由 Snuba 以及所有聚合(aggregation)函数提供支持。
  • discover 数据集为所有性能监控(Performance Monitoring)相关功能提供支持。
  • sessions 数据集为发布(Releases)功能提供支持。具体来说,该数据集会摄取大量数据点并存储预先聚合的数据,以允许对大量数据进行快速查询。
  • outcomes 数据集为统计页面(Stats page)提供支持。


开始使用 Snuba



这是在 Sentry 开发环境中快速启动 Snuba 的指南。


必要条件


Snuba 假设如下:


  1. 一个 Clickhouse 服务器端点位于 CLICKHOUSE_HOST(默认 localhost)。
  2. REDIS_HOST(默认 localhost)上运行的 redis 实例。在端口 6379 上。

让这些服务运行的快速方法是设置 sentry,然后使用:


sentry devservices up --exclude=snuba


请注意,Snuba 假设一切都在 UTC 时间运行。否则,您可能会遇到时区不匹配的问题。


Sentry + Snuba


~/.sentry/sentry.conf.py 中添加/更改以下几行:


SENTRY_SEARCH = 'sentry.search.snuba.EventsDatasetSnubaSearchBackend'
SENTRY_TSDB = 'sentry.tsdb.redissnuba.RedisSnubaTSDB'
SENTRY_EVENTSTREAM = 'sentry.eventstream.snuba.SnubaEventStream'


运行:


sentry devservices up


访问原始 clickhouse client(类似于 psql):


docker exec -it sentry_clickhouse clickhouse-client


数据写入表 sentry_local: select count() from sentry_local;


设置


设置可以在 settings.py 中找到

  • CLUSTERS:提供集群列表以及应该在每个集群上运行的主机名(hostname)、端口(port)和存储集(storage sets)。每个集群也设置了本地与分布式(Local vs distributed)。
  • REDIS_HOSTredis 正在运行此处。


Snuba 架构概述



Snuba 是一个由 Clickhouse 支持的面向时间序列的数据存储服务,它是一个列式存储分布式数据库,非常适合 Snuba 服务的查询类型。

数据完全存储在 Clickhouse 表和物化(materialized)视图中,它通过输入流(目前只有 Kafka topic)摄取,并且可以通过时间点查询或流式查询(subscriptions)进行查询。


微信图片_20220613000209.png


存储


之所以选择 Clickhouse 作为后备存储,是因为它在 Snuba 需要的实时性能、分布式和复制性质、存储引擎方面的灵活性和一致性保证之间提供了良好的平衡。

Snuba 数据存储在 Clickhouse 表和 Clickhouse 物化视图(materialized views)中。根据表的目标使用多个 Clickhouse 存储引擎。


Snuba 数据组织在多个数据集中,这些数据集表示数据模型的独立分区。更多细节见 Snuba 数据模型部分。


摄取


Snuba 不提供用于插入行的 api 端点(除非在调试模式下运行)。数据从多个输入流加载,由一系列消费者处理并写入 Clickhouse 表。


一个 consumer 消费一个或多个 topic 并写入一个或多个表。到目前为止,还没有多个消费者写入表。这允许下面讨论的一些一致性保证。


数据摄取(Data ingestion)在批处理中最有效(对于 Kafka 但尤其是对于 Clickhouse)。我们的 consumer 支持批处理并保证从 Kafka 获取的一批事件至少传递给 Clickhouse 一次。通过正确选择 Clickhouse 表引擎对行进行重复数据删除,如果我们接受最终一致性,我们可以实现恰好一次语义。


查询


最简单的查询系统是时间点。查询以 SnQL 语言(SnQL 查询语言)表示,并作为 HTTP post 调用发送。查询引擎处理查询(Snuba 查询处理中描述的过程)并将其转换为 ClickHouse 查询。


流式查询(通过订阅引擎完成)允许客户端以推送方式接收查询结果。在这种情况下,HTTP 端点允许客户端注册流查询。然后订阅 Consumer 消费到用于填充相关 Clickhouse 表以进行更新的 topic,通过查询引擎定期运行查询并在订阅 Kafka topic 上生成结果。


数据一致性


不同的一致性模型在 Snuba 中并存以提供不同的保证。

默认情况下,Snuba 是最终一致的。运行查询时,默认情况下,不能保证单调读取(monotonic reads),因为 Clickhouse 是多领导者(multi-leader),查询可以命中任何副本,并且不能保证副本是最新的。此外,默认情况下,不能保证 Clickhouse 会自行达到一致状态。


通过强制 Clickhouse 在执行查询之前达到一致性(FINAL keyword),并强制查询命中 consumer 写入的特定副本,可以在特定查询上实现强一致性。这本质上使用 Clickhouse,就好像它是一个单一的领导系统(single leader system),它允许顺序一致性(Sequential consistency)。


Sentry 部署中的 Snuba



本节解释了 Snuba 在展示主要数据流的 Sentry 部署中扮演的角色。如果您单独部署 Snuba,这对您没有用处。


微信图片_20220613000149.png


Errors 和 Transactions 数据流


图表顶部的主要部分说明了 EventsTransactions 实体的摄取过程。这两个实体为 Sentry 和整个 Performance 产品中的大多数问题/错误(issue/errors)相关功能提供服务。


只有一个 Kafka topic(events)在 errorstransactions 之间共享,为这条管道提供信息。此 topic 包含 error 消息和 transaction 消息。


Errors consumers 使用 events topic,在 Clickhouse errors 表中写入消息。提交后,它还会生成关于 snuba-commit-logtopic 的记录。


错误警报由 Errors Subscription Consumer 生成。这是同步消费者(synchronized consumer),它同时消费主 events topic 和 snuba-commit-log topic,因此它可以与主 consumer 同步进行。


synchronized consumer 然后通过查询 Clickhouse 生成警报,并在 result topic 上生成结果。


transactions 存在于一个相同但独立的管道。

Errors 管道还有一个额外的步骤:写入 replacements topic。Sentryevents topic 上产生 Errors mutations(合并/取消合并/再处理/等等)。然后,Errors Consumer 将它们转发到 replacements topic,并由 Replacement Consumer 执行。


events topic 必须按 Sentry project id 在语义上进行分区,以允许按顺序处理项目中的事件。目前为止,这是 alertsreplacements 的要求。


Sessions 与 Outcomes


SessionsOutcomes 以非常相似和更简单的方式工作。特别是 Sessions 增强 Release Health 功能,而 Outcomes 主要向 Sentry 统计页面提供数据。

两个管道都有自己的 Kafka topicKafka consumer,它们在 Clickhouse 中写自己的表。


变更数据捕获管道


这条管道仍在建设中。它使用 cdc topic 并填充 Clickhouse 中的两个独立表。

相关文章
|
4月前
|
存储 SQL 监控
数据中台架构解析:湖仓一体的实战设计
在数据量激增的数字化时代,企业面临数据分散、使用效率低等问题。数据中台作为统一管理与应用数据的核心平台,结合湖仓一体架构,打通数据壁垒,实现高效流转与分析。本文详解湖仓一体的设计与落地实践,助力企业构建统一、灵活的数据底座,驱动业务决策与创新。
|
4月前
|
数据采集 存储 分布式计算
一文读懂数据中台架构,高效构建企业数据价值
在数字化时代,企业面临数据分散、难以统一管理的问题。数据中台架构通过整合、清洗和管理数据,打破信息孤岛,提升决策效率。本文详解其核心组成、搭建步骤及常见挑战,助力企业高效用数。
1455 24
|
7月前
|
存储 消息中间件 SQL
数据中台架构与技术体系
本文介绍了数据中台的整体架构设计,涵盖数据采集、存储、计算、服务及治理等多个层面。在数据采集层,通过实时与离线方式整合多类型数据源;存储层采用分层策略,包括原始层、清洗层、服务层和归档层,满足不同访问频率需求;计算层提供批处理、流处理、交互式分析和AI计算能力,支持多样化业务场景。数据服务层封装数据为标准化API,实现灵活调用,同时强调数据治理与安全,确保元数据管理、质量监控、权限控制及加密措施到位,助力企业构建高效、合规的数据管理体系。
1900 13
|
9月前
|
SQL 分布式计算 大数据
深度剖析数据中台架构图,铸造数字文明的基石
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
8月前
|
存储 SQL 并行计算
【赵渝强老师】达梦数据库MPP集群的架构
达梦数据库提供大规模并行处理(MPP)架构,以低成本实现高性能并行计算,满足海量数据存储和复杂查询需求。DM MPP采用完全对等无共享体系,消除主节点瓶颈,通过多节点并行执行提升性能。其执行流程包括主EP生成计划、分发任务、各EP并行处理及结果汇总返回。为确保高可用性,建议结合数据守护部署。
224 0
|
10月前
|
消息中间件 存储 缓存
kafka 的数据是放在磁盘上还是内存上,为什么速度会快?
Kafka的数据存储机制通过将数据同时写入磁盘和内存,确保高吞吐量与持久性。其日志文件按主题和分区组织,使用预写日志(WAL)保证数据持久性,并借助操作系统的页缓存加速读取。Kafka采用顺序I/O、零拷贝技术和批量处理优化性能,支持分区分段以实现并行处理。示例代码展示了如何使用KafkaProducer发送消息。
|
消息中间件 存储 运维
为什么说Kafka还不是完美的实时数据通道
【10月更文挑战第19天】Kafka 虽然作为数据通道被广泛应用,但在实时性、数据一致性、性能及管理方面存在局限。数据延迟受消息堆积和分区再平衡影响;数据一致性难以达到恰好一次;性能瓶颈在于网络和磁盘I/O;管理复杂性涉及集群配置与版本升级。
443 1
|
消息中间件 Java Kafka
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
292 1
|
消息中间件 Java Kafka
Kafka不重复消费的终极秘籍!解锁幂等性、偏移量、去重神器,让你的数据流稳如老狗,告别数据混乱时代!
【8月更文挑战第24天】Apache Kafka作为一款领先的分布式流处理平台,凭借其卓越的高吞吐量与低延迟特性,在大数据处理领域中占据重要地位。然而,在利用Kafka进行数据处理时,如何有效避免重复消费成为众多开发者关注的焦点。本文深入探讨了Kafka中可能出现重复消费的原因,并提出了四种实用的解决方案:利用消息偏移量手动控制消费进度;启用幂等性生产者确保消息不被重复发送;在消费者端实施去重机制;以及借助Kafka的事务支持实现精确的一次性处理。通过这些方法,开发者可根据不同的应用场景灵活选择最适合的策略,从而保障数据处理的准确性和一致性。
1070 9
|
消息中间件 监控 Kafka
实时计算 Flink版产品使用问题之处理Kafka数据顺序时,怎么确保事件的顺序性
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。