Netflix 開源實時監(jiān)控平臺 Mantis:故障平均檢測時間縮減到秒級
Netflix 開源了自己開發(fā)的 Mantis 平臺,該平臺能讓開發(fā)者在最小化觀察和操作系統(tǒng)的成本的情況下,實時地監(jiān)控并分析運維事件,并將故障平均檢測時間從幾十分鐘減少到了幾秒鐘。
2019 年 10 月 21 日,我們很高興地宣布,Netflix 將 Mantis(螳螂)開源了,這個平臺能夠幫助 Netflix 的工程師們更好地理解他們所開發(fā)的應(yīng)用程序的各種行為,以確保為 Netflix 的會員提供最高質(zhì)量的體驗。而且我們相信,我們在 Netflix 所遇到的種種挑戰(zhàn)并不一定是 Netflix 所獨有的,這就是為什么我們要在更廣泛的開發(fā)社區(qū)來分享這個平臺。
作為一個流媒體微服務(wù)生態(tài)系統(tǒng),在不影響運維判斷力的情況下,Mantis 平臺為開發(fā)工程師提供了讓觀察和操作復(fù)雜分布式系統(tǒng)的成本降至最低的能力。開發(fā)工程師們已經(jīng)基于 Mantis 平臺構(gòu)建了性價比頗高的應(yīng)用程序,以實現(xiàn)快速識別問題、觸發(fā)警報、以及實施補救措施,從而最大程度地降低 Netflix 服務(wù)的宕機時間,甚至完全避免發(fā)生宕機事故。而遇到類似的指標(biāo)故障,其他系統(tǒng)可能需要花上十多分鐘才能完成精確處理,而 Mantis 將這一過程從幾十分鐘減少到了幾秒鐘,卓然有效地減少了我們的故障平均檢測時間。這點是至關(guān)重要的,因為任何宕機時間對于 Netflix 都是致命的,并且會對我們的訂閱用戶產(chǎn)生非常大的負(fù)面影響,因此,宕機過程中每流逝的一秒對我們來說都很重要。
隨著 Netlix 在全球日益增長的會員基數(shù),以及隨著這些會員越來越多地使用 Netflix 提供的服務(wù),我們對 Netflix 的系統(tǒng)運營健康狀況如何進行經(jīng)濟適用、便捷快速且精確無誤的監(jiān)控分析就變得越來越重要。例如,距離我們發(fā)表上一篇 關(guān)于 Mantis 博客文章(2016 年 3 月)已經(jīng)有兩年半的時間,今日 Netflix 五分鐘的宕機的影響體量已經(jīng)相當(dāng)于那時候兩小時的宕機。
Matins 讓回答未知問題變得容易
對于規(guī)模巨大又日益增長的系統(tǒng)而言,只使用指標(biāo)度量和日志分析的傳統(tǒng)方法已不能滿足當(dāng)前的系統(tǒng)需求。指標(biāo)衡量和日志分析方法的前提是,在事故發(fā)生之前你預(yù)先就知道需要回答什么樣的問題。而另一方面,Mantis 讓我們完全避開這個缺點,這個平臺讓我們能夠回答事先并未預(yù)料到的新問題,且不需要添加任何新的工具或配置。Mantis 并沒有使用日志或度量指標(biāo),而是支持將事件普遍化,開發(fā)人員可以根據(jù)需要從任何能收集數(shù)據(jù)的應(yīng)用程序?qū)κ录鲗崿F(xiàn)訪問。通過這種“按需消費”的模式,你就可以自由地將所有數(shù)據(jù)發(fā)布給 Mantis。
Matins 以經(jīng)濟合算的方式回答問題
如果為了能夠在未來回答新的問題就發(fā)布 100% 的運維數(shù)據(jù),這么做在傳統(tǒng)意義上成本會是非常昂貴的。而 Mantis 使用了一種隨需應(yīng)變的、響應(yīng)式的模型,在這些事件被訂閱成為事件流之前,你并不需要為這些事件付出任何成本。而為了進一步降低成本,Mantis 會為等效的訂閱者重新發(fā)布相同的數(shù)據(jù)。通過這種方式,Mantis 與其他系統(tǒng)的顯著不同之處在于,Mantis 允許我們對事件實現(xiàn)基于流的可觀察性,同時允許開發(fā)工程師使用工具來降低成本,否則過高的成本將有害于業(yè)務(wù)。
從一開始構(gòu)建 Mantis,我們就把這個指導(dǎo)原則準(zhǔn)確無誤地銘記于心:讓我們確保最小化觀察和操作系統(tǒng)的成本,同時也保證了不會犧牲那些必要的和機遇性的監(jiān)控要點。
構(gòu)建 Mantis 的指導(dǎo)原則
以下是構(gòu)建 Mantis 平臺背后的指導(dǎo)原則。
1. 我們應(yīng)該保證能夠?qū)υ际录M行訪問。 將事件發(fā)布到 Mantis 中的應(yīng)用程序應(yīng)該可以自由地發(fā)布每個事件。如果我們在這個階段過早地把原始事件轉(zhuǎn)換為其他形式,那么在洞察事件原因方面可能就已經(jīng)處于劣勢了,因為這樣一來已經(jīng)丟失了原始形式的數(shù)據(jù)。
2. 我們應(yīng)該能夠做到實時訪問這些事件。 很多運維性用例在本質(zhì)上是時間敏感的。而傳統(tǒng)的方法采用發(fā)布、存儲、然后批量聚合事件等步驟,這樣處理起來太慢了。與之相反的是,我們應(yīng)該在事件到達時逐個地對它們進行處理和服務(wù)。隨著系統(tǒng)規(guī)模的擴張,更短的時間內(nèi)事件的影響會變得更顯著,實時處理這一點會變得越來越重要。
3. 我們應(yīng)該在不需要向應(yīng)用程序添加新的工具和配置的情況下,基于這些收集的數(shù)據(jù)回答那些未知的新問題。 無論怎么為系統(tǒng)打造足夠的彈性,我們都不可能做到事先悉知系統(tǒng)可能會遇到的每一種可能的故障模式。所以,當(dāng)這些未知故障不可避免地發(fā)生時,最重要的是我們可以從這些收集的數(shù)據(jù)中獲取針對未知問題的新見解。因此,你應(yīng)該做到能夠發(fā)布具有任意上下文、任意大小的事件。這樣,當(dāng)你未來某次想起要向系統(tǒng)詢問一個未知的新問題時,可以運用這些數(shù)據(jù)來回答這些新問題。
4. 我們應(yīng)該能夠以一種經(jīng)濟適用的方式來實現(xiàn)上述所有這些需求。 隨著 Netflix 這個業(yè)務(wù)關(guān)鍵系統(tǒng)規(guī)模不斷擴大,我們需要確保為該業(yè)務(wù)關(guān)鍵系統(tǒng)所打造的支撐性系統(tǒng),其最終的成本不會超過業(yè)務(wù)關(guān)鍵系統(tǒng)本身。
請記住這些指導(dǎo)原則,接下來讓我們來看看 Mantis 是如何為 Netflix 帶來更多價值的。
Mantis 如何為 Netflix 帶來更多價值
Mantis 投入生產(chǎn)的實際應(yīng)用已經(jīng)超過四年了。在此期間,在 Mantis 平臺上已經(jīng)構(gòu)建了幾個關(guān)鍵的運維洞察性應(yīng)用程序。
在這些洞察性應(yīng)用程序中,一些值得注意的例子包括:
- 實時監(jiān)控 Netflix 流媒體健康狀況,該應(yīng)用程序?qū)崟r地檢查 Netflix 的所有流媒體視頻流量,并以精細粒度準(zhǔn)確地識別那些對觀看體驗的負(fù)面影響。該系統(tǒng)為 Netflix 服務(wù)整體健康狀況承擔(dān)了預(yù)警指示的作用,并將在幾秒鐘內(nèi)觸發(fā)警告并通知相關(guān)團隊。
- 上下文警報,這個應(yīng)用程序會實時地分析數(shù)十種 Netflix 微服務(wù)之間數(shù)以百萬計的互動,從而識別出異常,并為運營商提供與該異常所相關(guān)的豐富的上下文信息。這些由 Mantis 在背后支持的聚合具有天然的實時特性,從而使得異常的平均檢測時間從幾十分鐘減少到幾秒鐘??紤]到 Netflix 如此巨大的規(guī)模,這帶來的影響確實十分深遠。
- Raven 允許用戶使用我們的 Mantis 查詢語言(MQL)對來自數(shù)百個流媒體源的實時數(shù)據(jù)進行各種形式的探測。
- Cassandra 健康檢查則提供了對豐富的運維事件的實時分析,并為 Netflix 里每個 Cassandra 集群生成整體性的健康狀況報告。
- 日志警報,通過實時處理來自數(shù)千個 Netflix 服務(wù)器的日志數(shù)據(jù),來檢測應(yīng)用程序錯誤。
- 混沌實驗監(jiān)控,實時地跟蹤混沌實驗中的用戶體驗變化,并在遇到負(fù)面影響時觸發(fā)中斷混沌實驗。
- 實時個人身份信息(PII)數(shù)據(jù),跨越所有流媒體源實時地檢測個人身份信息數(shù)據(jù)樣本,以快速識別敏感數(shù)據(jù)的傳輸。
歡迎嘗試開源的 Mantis
如果想要了解更多關(guān)于 Mantis 的信息,可以查看 Mantis 的主頁?,F(xiàn)在,可以嘗試讓你自己的第一個 Mantis 集群運轉(zhuǎn)起來,可以選擇在本地使用 Docker,也可以在云端用 Mantis CLI 在 AWS 中構(gòu)建一個小集群。你也可以在 Github 上獲取 Mantis 的開源代碼,通過用戶或 開發(fā)者 郵件列表與社區(qū)進行交流,為 Mantis 做出你的一份貢獻。
Mantis 主頁:https://netflix.github.io/mantis/