Telltale:看Netflix如何簡化應用程式監控體系

livevideostack 發佈 2020-08-21T19:10:03+00:00

作者:Andrei Ushakov, Seth Katz, Janak Ramachandran, Jeff Butsch, Peter Lau, Ram Vaithilingam, and Greg Burrell。


為了解決流媒體平台應用程式監控的諸多痛點:警報太多、滾動螢幕太多、配置和維護太多......Netflix推出了Telltale —— 一個建立在「用不著不斷調整警報配置」前提上的應用程式監控系統。

作者:Andrei Ushakov, Seth Katz, Janak Ramachandran, Jeff Butsch, Peter Lau, Ram Vaithilingam, and Greg Burrell

原文連結:https://netflixtechblog.com/telltale-netflix-application-monitoring-simplified-5c08bfa780ba

Netflix的願景


半夜,警報忽然被拉響,你從睡夢中驚醒,發現是一個度量標準跨過了限定的閾值。半夢半醒間,你迷迷糊糊地想,「這是真的出現了什麼嚴重的問題嗎? 還是只是一個有待調整的(小小的)預警而已? 上一次有人調整我們的警報閾值是什麼時候?也許只是因為上下游服務出了什麼問題? 」。

但無論如何這是一個非常重要的應用程式,所以你不得不把自己從床上拽起來,打開你的筆記本電腦,然後開始瀏覽dashboard以獲取更多信息。你還不能確信這是一個真正嚴重的問題,但你也意識到當自己在茫茫數據中尋找線索的時候,時間正在飛速流逝。


有效運作 Netflix 服務對該平台的用戶體驗至關重要。畢竟當用戶坐下來看《Tiger King》(Netflix在疫情期間大火的一部自製劇)時,他只希望這部劇能夠流暢地播放(不要出其他任何么蛾子)


《Tiger King》海報


多年來,Netflix從24小時隨時待命的工程師那裡學到了應用程式監控的痛點: 警報太多、滾動螢幕太多、配置和維護太多。流媒體平台的播放團隊需要一個能夠使他們快速診斷和補救問題的監控系統,對他們來說,意外發生時的每一秒都是非常寶貴的。


而Netflix發現自己的Node team也需要一個能夠助力小規模團隊運行一系列大型應用的強大系統。

為此,Netflix創建了 Telltale


Telltale Timeline


Telltale 綜合了多種數據源,以創建應用程式運行狀況的整體視圖。同時,它可以不斷學習應用程式的典型運行狀況(是否健康、良好)而不需要警報調優。

Telltale也因此知道到底什麼是「運行狀況良好」,所以當程序所有者的服務有運行狀況不夠「良好」或僅僅是有「運行不良好」的趨勢時,Netflix都可以及時地通知他們。

度量是了解應用程式運行健康狀況的關鍵部分。但有時候你可能有太多的指標、圖表以及太多的dashboard。Telltale只顯示應用程式和上下游服務的相關數據,Netflix則會用顏色來標識問題的嚴重程度(除了顏色,用戶也可以選擇用數字來顯示) ,這樣就可以一眼看出應用程式的運行狀況。


除此之外,Netflix還會highlight一些更廣泛更有趣的應用,比如區域流量疏散和附近程序部署,這些信息對於全面了解系統運行狀況至關重要,尤其是在事故發生的時候。


以上就是Netflix對於Telltale的願景。而今天,這個願景已經成為現實,Netflix在上周的科技博客中寫道,Telltale現在監控著100多個面向 Netflix 生產端的應用程式的運行狀況。



應用程式健康模型


任何Microservice(微服務)都不可能獨立存在,它通常具有相應的依附關係,需要與其他相關服務互聯互通,同時還存在於不同的 AWS 區域。


上文顯示的調用圖相對簡單,它其實可以有更深的層次並囊括幾十種服務。應用程式是系統的一部分,可能會受到屬性變化的微妙影響,或者因為某些區域事件而發生根本性改變。一個Canary(https://netflixtechblog.com/automated-canary-analysis-at-netflix-with-kayenta-3260bc7acc69)的啟動也會影響應用程式,上下游的部署也是同樣的道理。


Canary:原意是金絲雀,這裡指一個新版本的軟體,該軟體通常只在運行穩定的情況下部署到一小部分用戶中,以減少將新版本軟體部署到生產環境中的風險。這種方法可以在不影響大多數用戶的情況下快速發現新發布版本的問題。

Telltale使用多個來源的不同信號組裝了一個不斷進化、健康運行的應用程式模型:

  • Atlas時間序列度量
  • 區域流量疏散
  • Mantis實時播放數據
  • 基礎設施改變事件
  • Canary落地及部署
  • 上下游服務的健康運行
  • 客戶端度量和QoE變化
  • 警報由Netflix的警報平台觸發


不同的信號對應用程式運行的健康狀況有不同程度的影響。例如,延遲增加沒有錯誤率增加的問題那麼嚴重,某些錯誤代碼也不如其他錯誤那麼重要。在下游部署雙重Canary可能不像立即在上游部署Canary那麼重要。

區域流量轉移意味著一個區域的流量歸零,而另一個區域的流量翻倍。你可以想像失去度量標準將產生什麼樣的影響,度量標準的含義決定了平台應該如何理解它。


Netflix稱,在構建應用程式健康視圖時,Telltale 考慮了以上所有這些因素。


應用程式健康模型則是 Telltale 系統的的核心。


智能監控


每個服務運營商都知道警報調校的難度:設置的閾值太低,你會得到一大堆虛假的警報。繼而你可能會過度補償之前的誤差——放寬警報設定標準——以至於錯過了真正重要的警報。最終結果是團隊對於現有的警報系統缺乏信任。而Telltale 就建立在一個「你用不著不斷調整警報配置」的前提上。


Netflix稱自己通過提供策劃和管理的信號包,方便了應用程式所有者的相關設置和配置工作。這些信號包組合成應用程式配置文件,用來解決最常見的服務類型中的普遍問題。

Telltale 自動跟蹤各項服務之間的依從關係,從而構建應用程式健康模型中使用的網絡拓撲結構。信號包和網絡布局檢測能夠以最小的代價保持最新的配置,同時那些偏愛實用方法的人群仍然可以進行手動配置和調優。

沒有一個單一的算法可以解釋Netflix所使用的(各種各樣的)信號。因此,Netflix採用了混合算法,包括統計、規則和機器學習。Telltale 還配有相應的分析器來檢測長期趨勢或內存泄漏。

也就是說,智能監控意味著用戶完全可以信任Telltale,也意味著(在意外發生時)更快速地檢測與解決問題。

智能警報


有了智能監控系統,自然也就產生了智能警報。當 Telltale 檢測到應用程式系統運行中的問題時,會自動生成一個issue。團隊可以選擇通過 Slack、電子郵件或 PagerDuty (全部由Netflix內部警報系統提供支持)進行下一步警報生成。


如果問題是由上下游系統引起的,那麼 Telltale 的上下文感知路由會向團隊發出警告。智能警報也意味著只有一個相關團隊會收到該通知,而所有團隊都被警報轟炸的時代已經成為了過去。



當問題出現時,獲得正確的信息是至關重要的。Netflix的 Slack 警報也會啟動一個只包含事件最相關上下文背景的線程,包括被Telltale識別為運行不健康的信號及其原因。這也為工程師們提供了對應用程式當前狀態更好的理解,隨時待命的他們也因此能夠更容易地將程序恢復到正常狀態。

意外事件總是在不斷進化並擁有自己的生命周期,因此不斷更新系統是非常重要的。情況到底是在變好還是在變壞?是否有新的信號或事件需要考慮?這些都需要平台和工程師們不斷思考。


Telltale 隨著當前事件的不斷展開持續更新著 Slack 線程。相關線程在恢復到健康狀態時會被標記為「已解決」,這樣用戶可以一目了然地知道哪些意外事件正在發生、哪些事件已經被成功補救。

但是這些 Slack 線程並不僅僅是為了Telltale而存在,團隊成員還可以使用它們來分享附加的數據、相應的觀察、理論和關於事件的討論等等。事件數據和討論都集中在一個線程中,有助於團隊成員分享、理解以及更快地解決問題,同時也便於進行結果分析。


Netflix稱自己也在努力提高Telltale系統中的警報質量。其中一個方法是從用戶反饋中學習,他們在 Slack中創建了反饋按鈕,並通過用戶反饋來抑制未來警報出現的機率。同時,用戶還可以給Netflix一些為什麼某些警報不可操作的理由。這樣一來,智能警報也意味著是用戶可以信任的警報。


為什麼我的服務運行狀況不佳?


各種各樣的信號、應用程式系統的相關知識以及跨服務端的信號相關性有助於 Telltale 檢測應用程式健康狀況惡化的可能原因。這些可能的原因包括(但不限於)異常實例、Canary或非獨立服務的部署、不健康的資料庫或僅僅是流量激增等原因。將可能的原因進行highlight(在意外事件發生時)可以節省寶貴的時間。


事故管理


當 Telltale 發送警報時,它還會參考相關的不健康信號創建一張快照,而隨之到來的新信息也會被添加到該快照中。這簡化了許多團隊的事後評審過程。當需要回顧過去的問題時,應用程式事件摘要(Application Incident Summary)特性會在單一地點展示近期遇到的問題的方方面面,包括總停機時間和MTTR(Mean Time To Resolution 平均解決時間)等關鍵指標。Netflix希望團隊看到這些意外事件背後的模式和規律,以便他們能夠提高總體服務可用性。


部署監控


Telltale 的應用程式健康模型和智能監控強大的可靠性已經被有力地證明,以至於Netflix也在使用它來進行更安全的平台部署。


Netflix選擇從 Spinnaker (Netflix的開源交付平台)開始。在 Spinnaker 推出新構建的漫長過程中,Netflix使用 Telltale 來持續監視新構建運行的健康狀況。持續監控意味著該部署在出現第一個問題跡象時便會停止部署並重新運行。這也意味著該問題衍生的破壞力更小、持續時間也更短。


持續改善

在一個複雜的系統中運行微服務是具有挑戰性的。Telltale 的智能監控和報警系統幫助Netflix的服務運營商提高可用性、減少人力,也讓工程師們在晚上睡得更好。但這還不算完,Netflix還在不斷探索新的算法來提高警報的準確性。


Netflix仍然在思考和評估對應用程式健康模型的改進。Netflix相信在服務日誌和跟蹤數據中存在著大量有用信息,以及使用更高解析度的度量標準的好處。

在 Telltale 上擴展新的應用程式已經十分成熟了,但對於Netflix來說,肯定還有更好的啟發模式來幫助運營商發現影響服務運行健康與否的諸多因素,而Netflix也需要繼續改進其服務介面。

Telltale是簡化了的應用程式監控系統

一個健康的、運行狀況良好的 Netflix 服務系統是該平台用戶得以休閒娛樂的保障,但將不同信號與健康模型實時地聯繫起來仍然是一個挑戰。再加上數以千計的流媒體設備類型、不斷發展的架構以及不斷增長的內容生產生態系統,這個問題變得非常有趣。

關鍵字: