Honeycomb - 调试复杂系统的工具

简介:

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的运营团队使用Graphite的情况(但Graphite缺乏相应的背景信息)。

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

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

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

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

本文转自d1net(转载)

目录
相关文章
|
3天前
|
JSON 监控 安全
LabVIEW测试和调试Web服务
LabVIEW测试和调试Web服务
|
2月前
|
存储 编译器 程序员
【调试方法】基于vs环境下的实用调试技巧
【调试方法】基于vs环境下的实用调试技巧
|
4月前
|
Ubuntu Linux Go
搭建调试环境
搭建调试环境
39 0
|
5月前
|
NoSQL 编译器 开发工具
音视频源码调试前准备vs2019+qt5.15.2搭建可调试环境
音视频源码调试前准备vs2019+qt5.15.2搭建可调试环境
41 0
|
5月前
|
C#
C#调试与测试 | DebuggerDisplay使用技巧
DebuggerDisplay可以让你在调试器中显示你自己定义的字符串,代替默认的显示方式。换句话说,它可以让你在调试器中更加方便地查看对象的信息。 当你在调试一个复杂的对象时,往往会发现默认的显示方式不能满足你的需求。这时,你可以使用 DebuggerDisplay 来自定义你想要显示的信息。例如,你可以将一些比较重要的属性或字段的值显示在调试器中,这样你就可以更加方便地了解对象的状态。另外,如果你使用了一些自定义的类,这些类可能没有默认的 ToString 方法,调试器默认的显示方式就会非常简陋,这时你可以使用 DebuggerDisplay 来定义一个更加友好的显示方式。
33 0
|
10月前
|
程序员 Windows
学C的第十九天【实用调试技巧:1. 调试;2. Windows环境调试介绍;3. 一些调试的实例;4. 一些调试的实例】-2
查看调用堆栈(调用堆栈) 通过调用堆栈,可以清晰地反应函数的调用关系以及当前调用所处的位置。
|
10月前
|
NoSQL 程序员 Linux
学C的第十九天【实用调试技巧:1. 调试;2. Windows环境调试介绍;3. 一些调试的实例;4. 一些调试的实例】-1
1. 调试 (1). 调试是什么? 调试(Debugging / Debug),又称出错,是发现和减少计算机程序或电子仪器设备中程序错误的一个过程(一系列动作)。
|
Java 开发工具 C#
如何以超快的方式调试?
如何以超快的方式调试?
|
缓存 小程序 前端开发
小程序云开发和调试 | 学习笔记
快速学习小程序云开发和调试
212 0
小程序云开发和调试 | 学习笔记
|
消息中间件 存储 JSON
源码环境调试|学习笔记
快速学习源码环境调试
95 0
源码环境调试|学习笔记