Honeycomb 是用于觀察和關(guān)聯(lián)分布式系統(tǒng)中各事件的工具。它的方法與現(xiàn)有工具(例如Zipkin)不同。Honeycomb由原有的單一請求跟蹤模型轉(zhuǎn)變?yōu)楦杂尚问降哪P?,能夠跨?layers)、跨維度(dimensions)地收集和查詢數(shù)據(jù)。
Honeycomb與Zipkin這樣的軟件有什么區(qū)別?Zipkin是基于Google Dapper paper的分布式跟蹤系統(tǒng),由Twitter編寫和開放源代碼。InfoQ近日與Honeycomb聯(lián)合創(chuàng)始人Charity Majors聯(lián)系,了解到該產(chǎn)品的更多信息。Majors指出,與使用全球唯一的UUID進(jìn)行請求跟蹤不同,“對大家來說通常更有用的是某種用戶ID或應(yīng)用程序ID,以及其他類型的ID。這些請求ID便于將具有您可能想要計算或聚合的共同特征進(jìn)行分組。”
這在實踐中意味著什么?基于如Zipkin之類的跟蹤工具的請求,假設(shè)每個請求都附有唯一的ID。從請求進(jìn)入系統(tǒng)的時間起,ID通過各種子系統(tǒng)調(diào)用(可用于微服務(wù))來傳遞,而子系統(tǒng)調(diào)用是由初始調(diào)用的結(jié)果觸發(fā)的。如果在每個步驟都記錄下此ID,并且設(shè)定中心區(qū)域來聚合和索引這些日志,那么在請求ID已知的前提下,在系統(tǒng)中搜索和跟蹤特定請求將變得很容易。這種日志聚合器的一個典型例子是ELK(Elasticsearch/Logstash/Kibana)。
Honeycomb打破了這種模式,盡量在每個級別分別獲取數(shù)據(jù)(如負(fù)載均衡器、微服務(wù)和數(shù)據(jù)庫),標(biāo)記數(shù)據(jù),便于用戶今后對這些數(shù)據(jù)進(jìn)行混合匹配(mix-an-match)和即時查詢(ad-hoc queries)。Majors解釋說,Honeycomb采用這種方法是因為跟蹤本身給你留下一個亟待解決的問題。這個問題就是“哪些是有代表性,值得首先研究的請求”。一旦用Honeycomb展示數(shù)據(jù),用戶可以跨系統(tǒng)、跨時間,將不同層的數(shù)據(jù)聯(lián)系整合,進(jìn)行運算,從而理解它的性能。例如,跨越多個系統(tǒng)的請求響應(yīng)時間的增加可能是由于來自多個因素(包括時間)的集體效應(yīng)。這不利于請求跟蹤,因為請求一般代表的是給定時間段內(nèi)相關(guān)事件的單個線程。
數(shù)據(jù)一般可以通過API調(diào)用發(fā)送到Honeycomb。以下示例表示如何用API調(diào)用來記錄Web請求數(shù)據(jù):
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”參數(shù)可用于獲取JSON對象。這個JSON對象具有便于以后查詢的任何應(yīng)用程序特定信息。數(shù)據(jù)收集為一系列事件,對于其中每個事件都應(yīng)該進(jìn)行跟蹤。這些事件可以捆綁成名為“數(shù)據(jù)集”的單個實體。Honeycomb可以通過所謂的“連接器”與應(yīng)用程序集成。連接器是從特定軟件中提取數(shù)據(jù)并將其發(fā)送到Honeycomb的適配器。用戶還可以使用SDK以及名為honeytail的工具將數(shù)據(jù)從現(xiàn)有日志集成到Honeycomb。
為了:給正在收集的數(shù)據(jù)添加上下文,Honeycomb還標(biāo)記各事件是由誰觸發(fā)的:是操作員還是像計劃任務(wù)cron之類的什么(部署、腳本或一次性動作)。這些操作垂直排列,上面附加了一些信息,例如誰運行腳本以及指向部署代碼的鏈接。這有點類似于Etsy的運營團(tuán)隊使用Graphite的情況(但Graphite缺乏相應(yīng)的背景信息)。
Honeycomb收集了大量數(shù)據(jù),那它是如何處理大規(guī)模查詢的呢?Majors說,由于接近100%用戶發(fā)出的查詢都是關(guān)于最近一兩個星期的,他們現(xiàn)在正專注于近期的調(diào)試任務(wù),以便于采用有效的抽樣保留技巧。
為了處理大量的數(shù)據(jù),Honeycomb使用自己的列存儲:
Majors說,我們開始構(gòu)建Honeycomb時研究了大量現(xiàn)有的解決方案,但沒有一個能完美解決問題。我們最終發(fā)現(xiàn),絕大多數(shù)的預(yù)構(gòu)建解決方案都需要對功能性進(jìn)行權(quán)衡,在那些我們不需要的功能(例如事務(wù))和犧牲那些我們認(rèn)為至關(guān)重要的功能(例如能夠快速訪問原始輸入事件)之間取舍。
Honeycomb目前還不支持與其他告警系統(tǒng)集成,如Nagios、Zabbix、PagerDuty。目前只有受邀請者可以注冊該服務(wù)。
查看英文原文:Honeycomb - A Tool for Debugging Complex Systems