建立一個有彈性的系統:我們在 Intercom 的可觀察性之旅

已發表: 2022-07-14

在 Intercom,我們首先關注客戶體驗——我們的服務可用性和性能是我們的首要任務。 這需要我們的團隊和系統具有強大的可觀察性文化。

因此,我們在應用程序的可靠性上投入了大量資金。 但是不可預知的失敗是不可避免的,當它們發生時,是人類來解決它們。

我們運行一個社會技術系統,它在面對逆境時恢復的能力被稱為複原力。 彈性的關鍵組成部分之一是可觀察性,即我們為使人類能夠“查看”他們運行的系統內部而採取的步驟。

這篇文章將探討建立更強大的可觀察性文化的道路,以及我們在此過程中學到的教訓。

對講機的可觀察性是什麼意思?

在對講機,我們是來學習的。 我們的生產環境是我們的代碼、基礎設施、第三方依賴項和我們的客戶共同創造客觀現實的地方——它是學習和驗證我們工作影響的唯一場所。 我們將可觀察性定義為人類提出有關生產的問題並獲得答案的持續過程*。

讓我們再分解一下:

  • 連續過程:成功的可觀察性意味著人們盡可能頻繁地觀察。
  • 關於生產的問題:我們希望我們的定義是廣泛的、通用的,並能代表我們所服務的廣泛的工作流程。
  • 答案*:注意星號。 沒有工具會給你答案,只有提供你可以跟隨的線索來找到真正的答案。 您必須使用自己的心智模型和對您運行的系統的理解。

第 1 階段:問題和解決方案

憑藉我們自己對可觀察性的定義,我們評估了我們現有的實踐並製定了問題陳述。 直到最近,我們的可觀察性工具一直主要基於指標。 一個典型的工作流程涉及查看一個充滿圖表的儀表板,其中的指標按各種屬性組合進行切片和切塊。 人們會尋找相關性,但往往在沒有實現見解的情況下離開。

“指標易於添加和理解,但缺少高基數屬性(例如客戶 ID),因此難以完成調查”

指標易於添加和理解,但缺少高基數屬性(例如客戶 ID),因此難以完成調查。 以前,少數可觀察性擁護者會使用輔助工具(例如日誌、異常等)繼續工作流程,嘗試訪問高基數信息並構建更全面的圖景。 這項技能需要不斷練習——對於大多數忙於交付產品的產品工程師來說,這是一個不切實際的要求。

我們將缺乏統一的可觀察性經驗確定為需要解決的問題。 我們希望任何人都可以輕鬆地提出關於生產的任意問題並獲得洞察力,而無需掌握一套不連貫、設置不足和昂貴的工具。 為了緩解這個問題,我們決定加倍跟踪遙測。

我們在加倍跟踪之前使用的典型操作儀表板

為什麼是痕跡?

任何可觀察性工具都只是一個有人類支持的工具——人類需要良好的可視化。 什麼樣的數據為可視化提供動力並不重要,只是該工具允許您在不同的可視化之間無縫切換並獲得有關問題的替代觀點。

與其他遙測數據相比,跟踪具有巨大的優勢——它們對有關交易的足夠信息進行編碼,以支持幾乎任何可視化。 在跟踪之上構建可觀察性工作流可確保平穩的整合體驗,而無需切換基礎數據或工具。

可以由跟踪驅動的一些可視化類型

第 2 階段:實施跟踪

在 Intercom,我們從小處著手,決定成功的樣子並監控整個過程中的進展。 我們的主要目標是確認跟踪將使可觀察性工作流程更加高效。 為此,我們需要盡快將痕跡交到工程師手中。

“我們沒有從頭開始使用跟踪來檢測我們的應用程序,而是使用了一個恰好已經在依賴項中的現有跟踪庫”

為了節省時間,我們使用現有的供應商 Honeycomb 進行概念驗證。 在過去使用他們的工具進行結構化事件時,我們已經與他們建立了良好的關係。

我們沒有從頭開始使用跟踪來檢測我們的應用程序,而是使用恰好已經在依賴項中的現有跟踪庫,並進行了小調整以將跟踪數據轉換為 Honeycomb-native 格式。 我們從一個簡單的確定性抽樣開始,保留了我們處理的所有交易的約 1%。

使隊友能夠採用痕跡

將組織轉移到痕跡上並非易事。 跟踪比指標或日誌更複雜,並且具有陡峭的學習曲線。 儀器、數據管道和工具都很重要,但最大的挑戰是讓您的隊友最大限度地利用跟踪。 隨著我們在生產中運行概念驗證,我們立即開始專注於建立可觀察性文化。

“我們不僅僅關注工程師——我們與主管、技術項目經理、安全團隊成員和客戶支持代表進行了交談,以強調跟踪如何幫助他們解決特定問題”

尋找盟友是成功的關鍵。 我們召集了一群已經擅長可觀察性的冠軍。 他們幫助證實了我們的假設,並在他們的團隊中傳播了有關痕蹟的信息。 但我們不僅僅關注工程師——我們與主管、技術項目經理、安全團隊成員和客戶支持代表進行了交談,以強調跟踪如何幫助他們解決特定問題。

定制我們的信息有助於鎖定支持。 引入新工具總是會帶來一定的風險——通過展示潛力並讓人們興奮,我們增加了成功的機會。

第 3 階段:確定合適的供應商

隨著啟用計劃的啟動,我們開始尋找以跟踪為中心的現代供應商,並製定了一套標準來評估潛在的候選人。

工作流程:我們認為探索性工作流程是最重要的——它將使工程師能夠任意分割生產數據,並通過可視化和高基數屬性獲得洞察力。 診斷問題的很大一部分是能夠發現它,這意味著了解“正常”的樣子。 我們希望通過盡可能頻繁地提出問題,而不僅僅是在出現問題時,讓工程師更容易地探索生產。

“我們希望完全控制數據的採樣和保留方式”

採樣和保留控制:我們希望完全控制數據的採樣和保留方式。 確定性採樣幫助我們快速啟動和運行,但我們希望在保持低於合同限制的同時,使用智能動態採樣更有選擇性並保留更多“有趣”的跟踪(例如錯誤、緩慢的請求)。

準確的數據可視化:我們希望確保無論我們使用什麼採樣技術,可觀察性工具通過在可視化中公開“真實”近似數字來透明地處理它。 每個供應商處理這個問題的方式不同——有些供應商需要將所有數據發送到全局聚合器,以推斷錯誤率、數量等關鍵指標的指標。鑑於我們豐富的儀器生成的大量數據,這不是我們的選擇。

定價:我們想要一個簡單、可預測的定價模式,該模式與我們從工具中獲得的價值相關聯。 對保留和暴露的數據量收費似乎是公平的。

參與度指標:我們希望供應商成為一個好的合作夥伴,並通過公開關鍵使用指標和參與度來幫助我們跟踪工具的採用和有效性。

沒有完美的供應商,所以要準備好做出一些妥協。 最後,我們得出結論,Honeycomb 不僅在我們確定的主要工作流程上工作得更好,而且在抽樣、定價和使用指標方面也打勾——因此我們避免了代價高昂的供應商遷移。

經過一年充滿挑戰的工作,我們完成了可觀測性計劃的技術部分。 這就是我們所取得的成就:

  • 我們的主要單體應用程序已經自動檢測了高質量的屬性豐富的跟踪。
  • 工程師有一小部分方便的方法可以將自定義檢測添加到他們的代碼中。
  • 我們部署了 Honeycomb Refinery 來動態採樣數據並保留更多“有趣”的痕跡。 我們鼓勵工程師配置自定義保留規則以進行更精細的控制。 對於最有價值的交易,在經濟可行的情況下,我們提供 100% 的保留,為人們提供他們需要的數據。

第 4 階段:提高采用率

在致力於 Honeycomb 並完成數據管道的工作後,我們將重點轉移到了啟用上。 為了建立一種可觀察性的文化,你必須讓人們更容易參與進來。 以下是我們幫助團隊採用新的可觀察性工具的一些方法:

在開發環境中跟踪

為了讓工程師熟悉跟踪工具並鼓勵他們將其添加到他們的代碼中,我們提供了來自本地開發環境的可選跟踪以及在 Honeycomb 中公開的跟踪。 這有助於人們以與代碼投入生產時看到的完全相同的方式可視化新的自定義檢測。

日誌可能難以閱讀和解釋,而跟踪視圖更加結構化和組織化

Slackbot 查詢快捷方式

當生產遇到麻煩時,您最不想做的就是必須爭奪正確的查詢。 我們為“向我展示網絡性能”消息添加了自定義機器人反應。 在 Slackbot 鏈接之後打開按服務細分的 Web 端點性能。

我們使用 Slackbot 簡化了我們的可觀察性工作流程,它為我們的可觀察性工具中的流行查詢提供了快捷方式

第 5 階段:反思和後續步驟

衡量採用率

衡量可觀察性工具的投資回報率 (ROI) 具有挑戰性。 跟踪活躍用戶的數量是工程師使用工具的頻率的一個很好的指標,我們從 Honeycomb 的使用指標中受益匪淺。

該圖表顯示了自啟用可觀察性以來活躍 Honeycomb 用戶數量的增加

我們更進一步,衡量了這些約定的有用性。 我們假設,如果從可觀察性工具中獲得的見解有價值,人們會與同行分享。 我們的工程工作流程嚴重依賴於 Github 問題,因此我們決定計算提及或鏈接到 Honeycomb 的問題或拉取請求的數量(跟踪、查詢結果等)作為採用指標的代理。 隨著我們在 2021 年底加倍支持,我們觀察到提到 Honeycomb 的問題數量呈爆炸式增長,這證明我們走在正確的軌道上。

條形圖顯示標題或描述中提到 Honeycomb 的 GitHub 問題數量

意外的工作流程

建立一個堅實的可觀察性基礎啟用了我們以前無法想像的工作流程。 這裡有一些我們的最愛:

通知成本計劃:因為我們跟踪所有流量並具有 SQL 查詢、Elasticsearch 請求等的跨度,所以我們可以調查基礎設施的單獨共享部分(例如數據庫集群)的利用率峰值,並將它們歸因於單個客戶。 將這些數據與單個基礎設施組件的成本相匹配,我們可以為我們服務的每筆交易貼上一個近似的價格標籤。 可觀察性出人意料地成為我們基礎設施成本計劃的一個組成部分。

改進安全審計:能夠保留 100% 的選定交易使我們能夠保留與生產數據控制台的所有交互,幫助安全性建立對客戶數據訪問的更好可見性。

下一步是什麼?

建立可觀察性文化將繼續成為我們技術計劃的一部分:我們將專注於改進我們的入職材料,通過跟踪我們的研發業務進一步編織可觀察性,並探索前端儀器。

有興趣加入我們的團隊嗎? 在此處查看我們的開放工程職位。

職業 CTA - 工程(水平)