写点什么

Honeycomb - 调试复杂系统的工具

  • 2016-11-07
  • 本文字数:1660 字

    阅读完需:约 5 分钟

Honeycomb 是用于观察和关联分布式系统中各事件的工具。它的方法与现有工具(例如 Zipkin )不同。Honeycomb 由原有的单一请求跟踪模型转变为更自由形式的模型,能够跨层 (layers)、跨维度 (dimensions) 地收集和查询数据。

Honeycomb 与 Zipkin 这样的软件有什么区别?Zipkin 是基于 Google Dapper paper 的分布式跟踪系统,由Twitter 编写和开放源代码。InfoQ 近日与Honeycomb 联合创始人Charity Majors 联系,了解到该产品的更多信息。Majors 指出,与使用全球唯一的UUID 进行请求跟踪不同,“对大家来说通常更有用的是某种用户ID 或应用程序ID,以及其他类型的ID。这些请求ID 便于将具有您可能想要计算或聚合的共同特征进行分组。”

这在实践中意味着什么?基于如Zipkin 之类的跟踪工具的请求,假设每个请求都附有唯一的ID。从请求进入系统的时间起,ID 通过各种子系统调用(可用于微服务)来传递,而子系统调用是由初始调用的结果触发的。如果在每个步骤都记录下此ID,并且设定中心区域来聚合和索引这些日志,那么在请求ID 已知的前提下,在系统中搜索和跟踪特定请求将变得很容易。这种日志聚合器的一个典型例子是ELK( Elasticsearch/Logstash/Kibana )。

Honeycomb 打破了这种模式,尽量在每个级别分别获取数据(如负载均衡器、微服务和数据库),标记数据,便于用户今后对这些数据进行混合匹配(mix-an-match)和即时查询 (ad-hoc queries)。Majors 解释说,Honeycomb 采用这种方法是因为跟踪本身给你留下一个亟待解决的问题。这个问题就是“哪些是有代表性,值得首先研究的请求”。一旦用 Honeycomb 展示数据,用户可以跨系统、跨时间,将不同层的数据联系整合,进行运算,从而理解它的性能。例如,跨越多个系统的请求响应时间的增加可能是由于来自多个因素(包括时间)的集体效应。这不利于请求跟踪,因为请求一般代表的是给定时间段内相关事件的单个线程。

数据一般可以通过 API 调用发送到 Honeycomb。以下示例表示如何用 API 调用来记录 Web 请求数据:

复制代码
curl https://api.honeycomb.io/1/events/Quickstart -X POST \
-H "X-Honeycomb-Team: YOUR_WRITE_KEY" \
-d '{"status":200,"path":"/docs/","latency_ms":13.1,"cached":false}'

在这个例子里, “-d”参数可用于获取 JSON 对象。这个 JSON 对象具有便于以后查询的任何应用程序特定信息。数据收集为一系列事件,对于其中每个事件都应该进行跟踪。这些事件可以捆绑成名为“数据集”的单个实体。Honeycomb 可以通过所谓的“连接器”与应用程序集成。连接器是从特定软件中提取数据并将其发送到Honeycomb 的适配器。用户还可以使用 SDK 以及名为 honeytail 的工具将数据从现有日志集成到 Honeycomb。

为了:给正在收集的数据添加上下文,Honeycomb 还标记各事件是由谁触发的:是操作员还是像计划任务 cron 之类的什么(部署、脚本或一次性动作)。这些操作垂直排列,上面附加了一些信息,例如谁运行脚本以及指向部署代码的链接。这有点类似于 Etsy 的运营团队使用 Grap hite 的情况(但 Graphite 缺乏相应的背景信息)。

Honeycomb 收集了大量数据,那它是如何处理大规模查询的呢?Majors 说,由于接近 100% 用户发出的查询都是关于最近一两个星期的,他们现在正专注于近期的调试任务,以便于采用有效的抽样保留技巧。

为了处理大量的数据,Honeycomb 使用自己的列存储:

Majors 说,我们开始构建 Honeycomb 时研究了大量现有的解决方案,但没有一个能完美解决问题。我们最终发现,绝大多数的预构建解决方案都需要对功能性进行权衡,在那些我们不需要的功能(例如事务)和牺牲那些我们认为至关重要的功能(例如能够快速访问原始输入事件)之间取舍。

Honeycomb 目前还不支持与其他告警系统集成,如 Nagios、Zabbix、PagerDuty。目前只有受邀请者可以注册该服务。

查看英文原文 Honeycomb - A Tool for Debugging Complex Systems


感谢冬雨对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-11-07 18:003088
用户头像

发布了 22 篇内容, 共 58090 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

ByteHouse实时导入技术演进

字节跳动数据平台

大数据 数据仓库 Clickhouse 数据仓库服务 企业号 3 月 PK 榜

2022 IoTDB Summit:天谋科技刘海《Timecho:孵化于Apache IoTDB的开源商业化公司及其核心产品》

Apache IoTDB

大数据 分布式 开源数据库 IoTDB

淘宝 APP 网络架构演进与弱网破障实践

阿里技术

架构 网络

Vineyard 论文被 SIGMOD'2023 接收,助力计算引擎之间高效数据交换

阿里巴巴中间件

阿里云 计算引擎

OceanBase 生态产品:时序数据库CeresDB 正式发布 1.0 版本

OceanBase 数据库

数据库 oceanbase

TypeScript 与 JavaScript:你应该知道的区别

京东科技开发者

JavaScript typescript 前端 后端 企业号 3 月 PK 榜

React等前端框架如何与小程序结合

Onegun

前端 前端框架 React Vue 3

Caffeine高性能本地缓存框架初探

FunTester

SSH和VNC的四个区别简单讲解

行云管家

SSH 行云管家

技术沙龙 | 探索软件测试前沿技术及最佳实践,体验ChatGPT在测试领域中的应用

测试人

软件测试 沙龙 ChatGPT

精选案例 | 博睿数据30w+监测节点护航新华网、人民网两会重保工作

博睿数据

可观测性 智能运维 博睿数据 精选案例 主动式拨测

瓴羊Quick BI和Tableau哪个更适合复杂表格呢?

夏日星河

2022 IoTDB Summit:用友郭关飞《用友在 Apache IoTDB 应用与生态建设方面的探索与实践》

Apache IoTDB

大数据 开源 时序数据库 IoTDB

技术沙龙 | 探索软件测试前沿技术及最佳实践,体验ChatGPT在测试领域中的应用

测吧(北京)科技有限公司

测试

动转静两大升级!一键转静成功率领先,重点模型训练提速18%+

飞桨PaddlePaddle

人工智能 百度 飞桨 PaddlePaddle 框架解析

搬得进来,搬得出去!快来过一把数据迁移的“瘾”

OceanBase 数据库

数据库 oceanbase

面试官:请说一下如何优化结构体的性能?

王中阳Go

Go golang 高效工作 学习方法 高效学习

2022 IoTDB Summit:东方国信王超《Apache IoTDB 在东方国信的商业化及应用》

Apache IoTDB

大数据 开源 时序数据库 IoTDB

NFTScan:怎么使用 NFT API 开发一个 NFT 数据分析平台?

NFT Research

数据分析 API NFT

秒懂算法 | 搜索基础

TiAmo

DFS BFS 搜索算法

瓴羊Quick BI:“3端4表4擎、3+NPlus”得到众多行业内部人士的认可!

对不起该用户已成仙‖

探索以小程序提升运维效率

Onegun

运维 小程序容器

数据测试实践:从一个bug开始的大数据引擎兼容性探索

京东科技开发者

大数据 bug修复 引擎 测试数据构造 企业号 3 月 PK 榜

DevOps 与平台工程:企业该如何选择?

SEAL安全

DevOps IdP 平台工程 企业号 3 月 PK 榜

性能平台数据提速之路

百度Geek说

大数据 百度 提效 企业号 3 月 PK 榜 性能平台

用户分享 | 达梦第三方客户端DockQuery使用体会

BinTools图尔兹

数据库 用户体验 国产数据库工具

京东云RASP云原生安全免疫创新实践

京东科技开发者

Web 安全 漏洞 业务安全 企业号 3 月 PK 榜

Dubbo Triple 协议

昵称不能为null

dubbo RPC triple协议

瓴羊Quick BI和Power BI哪个比较好呢?

巷子

等保联盟是什么机构?有什么用?

行云管家

等保 等级保护 等保联盟

MMMBSC互助基金系统开发智能合约部署

薇電13242772558

智能合约 dapp

Honeycomb - 调试复杂系统的工具_DevOps & 平台工程_Hrishikesh Barua_InfoQ精选文章