阿里智能運維實踐|阿里巴巴DevOps實踐指南
編者按:本文源自阿里云云效團隊出品的《阿里巴巴DevOps實踐指南》,掃描上方二維碼或前往://developer.aliyun.com/topic/devops,下載完整版電子書,了解阿里十年DevOps實踐經驗。
阿里巴巴的運維團隊致力於打造無人值守的運維平台,用智能化推動高效率、低成本的應用運維。智能運維是運維平台實現信息化和數字化之後的自然發展,利用紮實的技術基礎,把機器學習、優化算法和各個專業領域方面的知識完美結合起來,針對具體運維場景提供令人滿意的解決方案。
智能運維( AIOps )是依託於阿里巴巴 DevOps 經驗沉澱而來的智能化運維平台,通過運維大數據的積累,以及算法團隊多種算法的校對,我們將運維提升到新的高度,通過 AI 來幫我們查看數據、判斷異常、決策運維操作,形成監、管、控一體化的運維平台。
運維體系面臨的挑戰
DevOps 運維時代,阿里巴巴運維體系面臨如下挑戰:
第一,規模化。阿里巴巴的基礎設施規模呈指數級增長,在服務器數量是千級別、萬級別的時候還勉強可以通過人為操作來運維,但發展到百萬級別的時候,任何一個步驟依賴純人為操作都是不現實的。服務器規模百萬級的時候,如何保證整體運維安全、高效的進行是第一個挑戰。
第二,高複雜。阿里巴巴業務的多樣性及高速發展也對系統穩定性提出了更高的要求,對運維體系帶來更大的挑戰。曾經我們考核系統可用率 7 個 9,存儲方面達到 6 個 9 就很好,但是盒馬鮮生這樣的業務是要求 100%可用。作為線下業務,在盒馬店有半小時不能支付是無法接受。我們要從全鏈路視角出發,關注每個環節的穩定性建設。
第三,成本優化。成本是門檻,做不到一定的門檻,進入這個市場的機會都沒有。除了固定資產投入,運營成本也是很重要的一部分。利用技術進行流程優化,降低各個部分的成本,是提高業務的核心競爭力的關鍵。
第四,安全。雲計算最關心的是安全。系統越來越大,變化越來越快,所面臨的內部和外部的風險也越來越大。每天無數變更升級同時進行,如何在系統變更時保持穩定,是需要面對的另一個巨大挑戰。
阿里巴巴基礎設施的體量和複雜性,顯然都超過了人腦的處理能力,需要從新的視角,應用機器智能來解決這些複雜的問題。
智能運維實踐
基於上面的挑戰,我們在阿里巴巴集團各個業務場景落地了無人值守發佈、無人介入運維的解決方案。
無人值守發佈 (Unmanned Deploy)
全新一代發佈平台支持滾動、藍綠、金絲雀等多種發佈模式。通過算法,機器學習方法對應用發佈過程進行異常檢測,從而避免由於代碼變更導致的故障。基於大量監控數據、日誌數據的積累,並有算法的加持,我們推出了無人值守發佈系統。
無人值守發佈 riskfree 系統上線以來,從探索到實現再到優化經歷了將近三年的時間。目前業務範圍定義在應用發佈時故障預防。接入無人值守發佈的應用在提交發佈單後,系統會對整個發佈過程中的監控數據進行分析,如果有異常會自動暫停發佈,並提示異常指標和攔截原因,開發確認有問題則可以選擇關閉或回滾,沒有問題則繼續發佈。
線上發佈之痛
以往線上發佈的時候,工程師們一般做了如下「精心」工作:
- 發佈前
測試人員對代碼進行全方位的單元測試、集成測試,如果發現 Bug,會讓開發人員返工。這裡有兩個問題:第一,有些業務團隊由於人員問題,根本就沒有測試人員,自己既是開發也是測試;第二,不是所有的 Bug 都能通過測試發現,難免有漏網之魚。
- 發佈中
進行預發、灰度、分批發佈、金絲雀發佈。在每一個環境緩慢發佈過程中,要到監控平台,查看各個監控,甚至登錄到機器上「刷」日誌,通過自己的「火眼金睛」,期望能在眾多的日誌中,找到某個特殊模式的異常日誌;另外,如果是多方依賴的應用,還要查看上下游的應用監控有沒有問題。
- 發佈後
檢查一下應用的機器是否都正常啟動,將失敗的機器下線或者置換掉,看看故障系統有沒有報警,看看上下游團隊有沒有「叫」起來,如果有,得馬上回滾。總之,這個過程是既耗時又耗力,而且還不能保證沒有漏掉一處細節,並且不同發佈人員的經驗不一樣,熟手和新手對一個發佈的穩定性保障程度有巨大差別。
我們的解法
我們設計了一套無人值守發佈系統
系統分為兩大部分:
- 在線分析,無人值守發佈系統會對系統監控、業務監控、日誌監控、調用鏈路等維度進行異常檢測,檢測到異常後,會對發佈單進行攔截或回滾。當用戶認為無異常時,會進行反饋,繼續發佈。
- 離線分析,在第一步中用戶反饋後,這個反饋數據對我們的算法非常有用,可以對我們的算法進行自動的調整。當反饋數據積累一段時間之後,異常檢測的準確率就非常高。
算法平台
在發佈的過程中,系統會採集各個監控源的數據,對數據的採集、清洗、存儲要求很高,我們設計了算法平台來承接各個平台的數據源、算法檢測、算法驗證、算法上線等流程,系統架構如下圖所示。
主要包含三大部分:
- 數據採集存儲:對各個監控數據源的數據進行採集,包含系統監控、業務監控、中間件監控、日誌監控、數據庫監控、雲監控等。數據採集後,根據不同數據的特性,存在時序數據庫或者關係數據庫中。
- 算法結果存儲:對於每次檢測的結果都會進行存儲,以方便結果排查和效果評估。
- 數據打標:對每次異常檢測結果,都可以打標,利用打標數據來重新訓練算法,形成正向循環,檢測的結果也可以通過郵件、釘釘實時通知給發佈者,且可以自動對接前面介紹的運維編排自愈流程,比如,將異常的機器直接自動置換掉。
智能算法
在上面的算法平台中,我們設計了眾多異常檢測算法。異常檢測在無人值守發佈系統中有着舉足輕重的地位,主要分為三個部分:
- 數據採集:我們綜合了各個維度的監控數據、調用鏈路分析等,在觀測的廣度上是人工盯屏所不能相比的。
- 異常檢測:我們精心調校的異常檢測算法,完全不依賴於傳統的基於閾值、3Sigma 等檢測算法,全部自動判定,泛化能力好,支持單指標檢測、多指標檢測、前後對比檢測、已發佈未發佈對比檢測等多種模式,檢測算法包含 ArimaKSigma、BoxplotDetect 方法(Tukey 方法)、GrubbsTest 方法、Donat 等。
- 排除正常波動:通過歷史數據、用戶反饋數據,精準過濾正常的波動,讓用戶得到精準的異常檢測結果,示意圖如下:
實踐效果
無人值守發佈自上線以來,覆蓋了阿里巴巴集團所有的應用發佈過程,為發佈的安全穩定保駕護航,異常檢測結果如下圖所示:
至此,接入無人值守發佈後,開發可以在點擊發佈後專註別的事情,不需要時時關注發佈過程。如果發佈過程出現異常,系統會通過釘釘消息、郵件通知到開發,再介入即可,如果過程是機器異常則自動替換異常機器,開發無需人工介入,發佈將繼續。
簡單總結一下,無人值守發佈是一個智能化變更故障檢測和異常推薦系統。通過對變更執行過程中的多維度監控數據進行分析,判斷當前變更是否會造成故障,在發佈出現異常的情況下進行攔截和智能推薦。
無人介入運維-ChatOps (Unmanned Operations)
日常運維有很多類別,目前我們專註於其中兩類運維工作的「無人介入」:1. 用戶接到告警或事件而發起的運維操作;2. 日常運維答疑或諮詢。
針對第一種情況,通過「運維診斷」,給應用來一次 360 度全方位「體檢」,找到異常點並一鍵修復;針對第二種情況我們發佈了 ChatOps 機械人來加強 DevOps 之間溝通與合作,幫助研發完成一些「臟活」、「累活」、「機械式」任務,目標是達到「0」人工介入的諮詢和答疑。
ChatOps 簡介
運維小蜜(簡稱「維蜜」),是 chatbot 在運維領域的實踐,也是 ChatOps 的具體實現,是 DevOps 的重要工具。維蜜的定位是面嚮應用的智能 DevOps 服務助理,那麼攤開來講:
- 面嚮應用:將應用的開發、測試、運維的同學集合起來,加強溝通與合作,縮短產品上線時間,降低人力成本,在產品出現問題時能夠快速檢測並修復,減少甚至消滅產品服務中斷可能性,保證開發和運維的同學時刻處於同一個上下文中,時刻了解應用所處的狀態。
- DevOps:強調快速迭代,持續交付,力求信息共享、技術學習與合作、加快信息反饋周期。
- 智能:理解用戶輸入的指令,根據命令槽位的元信息和用戶自身的信息確定命令各個參數的值,通過自然語言處理和理解用戶指令。
維蜜就是希望通過一觸即達,秒級響應的體驗,把服務做到極致,讓研發、測試、運維同學幸福地工作,是我們的終極目標。
ChatOps 優勢
我們再來看運維小蜜有哪些價值:
第一,從員工個人的角度來看,能夠提升員工的工作效率。運維小蜜可以幫助用戶處理簡單、重複、枯燥的工作,例如日誌查看、命令執行、開關報警、查看機器狀態、查看監控、運維事件推送等。
第二,從團隊溝通的角度來看,能夠降低協作成本。在團隊內部,ChatOps 是一種透明、合作、會話驅動的開發模式,群里所有人都知道 what/when happening & who/how fixing it ,也就實現了事件發生場景完整、透明,事件解決過程共享、可查詢、可記錄,便於其他同學對同類事件處理的學習參考,即所謂「Teachby doing」。
ChatOps 也是一種會話驅動的運維模式,通過聊天機械人對接各種系統後台,將軟件開發、交付過程中涉及的開發、測試、運維人員、工具、環境、自動化進程等串聯起來,使得聊天室里的所有人能夠圍繞某個特定話題進行信息共享、技術學習與合作,加快應用的測試、發佈、監控、診斷,整個工作的展開全員可見。
運維機械人帶來的好處包括:
- 方便,把很多系統的常用操作聚合到機器,就不用登陸多個系統找信息。
- 協作,事件發生的全部信息推送至聊天室,所有成員均能夠了解你這兒發生了什麼。
- 快速,定位問題時,能夠讓大家都看到所有的信息,不必讓每個人重複的搜索資料。
ChatOps 實現
我們再來看運維小蜜的實現架構圖:
主要包含三個模塊, 分別是 dialogue manager 、nlp tools 和 intent dispatcher manager 。其中dialogue manager 用於判斷用戶的 utterance 的意圖是什麼, 是發起一輪新的對話還是承接上面已有的意圖, 它調用 nlp tools 的處理器輔助判斷。intent dispatcher manager 負責對接具體的業務系統, dialogue manager 處理後的結果傳到它調用具體的業務邏輯觸發任務的執行。
ChatOps 實踐
我們再來看運維小蜜在阿里巴巴集團的幾個落地場景:
1、 智能問答
2、 查詢應用的監控信息
3、 機器置換
總之,ChatOps 可以幫助我們提升開發效率,提升開發幸福感。
總結
隨着智能化算法的成熟和大量運維數據的積累,智能化在運維場景的落地也會越來越多,阿里巴巴運維從阿里集團大量研發場景出發,打磨出一系列智能化運維產品,並賦能中小企業。我們的理念是把複雜留給自己,把簡單留給用戶。智能化是運維的終極狀態,未來我們將在自動化、無人化和智能化上做更大的投入,打造世界級的智能運維平台。
【關於雲效】
雲效,雲原生時代一站式BizDevOps平台,支持公共雲、專有雲和混合雲多種部署形態,通過雲原生新技術和研發新模式,助力創新創業和數字化轉型企業快速實現研發敏捷和組織敏捷,打造「雙敏」組織,實現 10 倍效能提升。