sysAK(青囊)系統(tǒng)運(yùn)維工具集:如何實(shí)現(xiàn)高效自動(dòng)化運(yùn)維?
系統(tǒng)運(yùn)維 SIG 已在龍蜥社區(qū)建立 SIG 組。目前 sysAK 工具集已經(jīng)在龍蜥社區(qū)開源,并且在系統(tǒng)運(yùn)維 SIG、跟蹤診斷 SIG 一起共建,希望大家后期加入 SIG 一起討論共建。本文將從技術(shù)角度分享 sysAK 系統(tǒng)。
一、 What is sysAK
sysAK 是我們?nèi)ツ瓴盘岬母拍?,但里面的功能來自于我們多年來在阿里百萬規(guī)模的服務(wù)器運(yùn)維經(jīng)驗(yàn)。在系統(tǒng)運(yùn)維過程中,資源監(jiān)控與利用、問題排查與解決是核心訴求,因此 sysAK 覆蓋系統(tǒng)運(yùn)維的三大典型場(chǎng)景。
1、系統(tǒng)監(jiān)控。除了常規(guī)的一些系統(tǒng)健康指標(biāo)外,sysAK 還會(huì)針對(duì)各種系統(tǒng)資源提供更精細(xì)化的資源監(jiān)控,幫助業(yè)務(wù)運(yùn)維實(shí)現(xiàn)細(xì)粒度的運(yùn)維調(diào)度和資源控制,進(jìn)而高效運(yùn)用資源。
2、系統(tǒng)診斷。這是對(duì)于典型的問題做分析的覆蓋,比如說負(fù)載異常、網(wǎng)絡(luò)抖動(dòng)、內(nèi)存泄漏、IO 毛刺、性能瓶頸、應(yīng)用異常等等。
3、系統(tǒng)介入。這塊更重要的一點(diǎn)是故障修復(fù),因?yàn)槲覀兊南到y(tǒng)運(yùn)維終極目標(biāo)是減少或者避免業(yè)務(wù)損失,故障總是不可預(yù)期的會(huì)發(fā)生,發(fā)生之后我們能快速發(fā)現(xiàn)和分析,也需要對(duì)這個(gè)問題本身做一些修復(fù)或止血,所以 sysAK 也會(huì)提供一些系統(tǒng)不具備但常用的故障修復(fù)手段在里面。
覆蓋比較全的場(chǎng)景做了可用工具集,其實(shí)還是不夠的,另外一個(gè)目標(biāo)是工具怎么做的好用。好用有很多因素,我認(rèn)為至少要具備以下三點(diǎn):
1、 對(duì)普通用戶來說易懂。比如說現(xiàn)在的一些服務(wù)越來越多,系統(tǒng)越來越復(fù)雜,現(xiàn)在一些工具對(duì)運(yùn)維來說要去了解背后的專業(yè)知識(shí)才能使用。運(yùn)維工具輸出結(jié)果要直達(dá)問題的核心,用戶直接能看懂,不管是診斷結(jié)果或是修復(fù)建議。
2、 對(duì)運(yùn)行系統(tǒng)來說影響少。工具本身要盡量減少對(duì)系統(tǒng)的擾動(dòng),sysAK 通過高性能實(shí)現(xiàn)來做,并通過統(tǒng)一的資源框架來做管理,工具可以隨時(shí)隨地常態(tài)化運(yùn)行。這樣的話,對(duì)系統(tǒng)問題及時(shí)發(fā)現(xiàn)是非常有好處的。
3、 對(duì)其他平臺(tái)接口友好,便于被集成。sysAK 工具集可以做成標(biāo)準(zhǔn)化輸出形式,在大型集群平臺(tái)上也可以做集群化運(yùn)維。
二、典型工具介紹
下面可根據(jù)一些分類場(chǎng)景的典型工具來看 sysAK 是怎么達(dá)到這些目的。
系統(tǒng)運(yùn)維的話,Load 作為服務(wù)器運(yùn)行負(fù)載的一個(gè)典型指標(biāo),經(jīng)常被運(yùn)維人員用于評(píng)價(jià)系統(tǒng)運(yùn)行是否良好的一個(gè)關(guān)鍵因素,其計(jì)算本身是比較簡單的,就只是簡單恒量運(yùn)行任務(wù)和 IO 等待任務(wù)的數(shù)量。對(duì)于運(yùn)維人員來說,他可以方便的拿到當(dāng)前是哪些進(jìn)程導(dǎo)致 Load 高,但背后是什么導(dǎo)致,原因各種各樣。系統(tǒng)錯(cuò)誤或者硬件錯(cuò)誤都可能會(huì)導(dǎo)致 Load 高,只是拿到進(jìn)程情況,沒有專業(yè)的操作系統(tǒng)知識(shí)是無法繼續(xù)分析的。所以 loadtask 工具會(huì)進(jìn)行全方位的系統(tǒng)分析,除獲取進(jìn)程運(yùn)行棧外,還自動(dòng)分析內(nèi)存壓力、cpu 壓力、IO 壓力、系統(tǒng)錯(cuò)誤,并將這些因素和進(jìn)程棧進(jìn)行關(guān)聯(lián),跟當(dāng)前進(jìn)程對(duì)照,上下文結(jié)合,給出最后精確的 Load 異常原因,讓運(yùn)維人員直接根據(jù)這個(gè)作出決策。
內(nèi)存泄露是內(nèi)存問題的典型場(chǎng)景,對(duì)于內(nèi)存泄露問題,通常我們的一些工具也是通過分配和釋放、是否匹配的模式去識(shí)別泄露點(diǎn)在哪里,但這只是第一步工作。第二步工作才是最關(guān)鍵的,因?yàn)榉峙浜歪尫挪黄ヅ淦鋵?shí)是正常情況下也會(huì)出現(xiàn),我們要對(duì)這個(gè)數(shù)據(jù)特征模式做分析,排除干擾因素,才能知道是否真的泄露了,而這塊的工作花的時(shí)間是最多的,所以我們對(duì)于內(nèi)核內(nèi)存,通過以前的歷史經(jīng)驗(yàn)總結(jié)出來了一些模型,把數(shù)據(jù)分析的過程總結(jié)放在工具里面,我們通過這個(gè)工具可以自動(dòng)快速的找到泄露點(diǎn)在哪個(gè)地方。
鎖競爭分析工具,鎖競爭是比較常見的業(yè)務(wù)效率低下或突發(fā)抖動(dòng)的原因之一,通過靜態(tài)分析我們可以找到鎖的持有者是誰,但是一般業(yè)務(wù)抖動(dòng)、長時(shí)間性能上不去,這是動(dòng)態(tài)的鎖的過程,ulockcheck 工具會(huì)跟蹤鎖的持有釋放流程,對(duì)持有鎖的時(shí)間時(shí)長和頻率進(jìn)行分析,真正判斷出來到底是因?yàn)槟骋恍┤蝿?wù)持有過長還是業(yè)務(wù)競爭鎖比較激烈,并且給出競爭場(chǎng)景的上下文,幫助業(yè)務(wù)開發(fā)人員精準(zhǔn)判斷出優(yōu)化點(diǎn)在哪兒。
第四個(gè)是網(wǎng)絡(luò)類問題,網(wǎng)絡(luò)問題分析更是專業(yè)性極強(qiáng)的事情,通常需要抓包并分析數(shù)據(jù)報(bào)文,耗費(fèi)大量時(shí)間。我們開發(fā)的 PingTrace 工具通過在內(nèi)部封裝自定義網(wǎng)絡(luò)報(bào)文協(xié)議,在 server、clinent 對(duì)報(bào)文經(jīng)過的全鏈路流程進(jìn)行記錄,除各個(gè)時(shí)間段進(jìn)行精準(zhǔn)時(shí)間統(tǒng)計(jì)外,還包括這個(gè)過程中所有的系統(tǒng)中斷或者調(diào)度因素的影響,做綜合性判斷,把數(shù)據(jù)聚合出來,最后給出時(shí)延的精確原因。
第五個(gè)是性能瓶頸快速界定工具。業(yè)界有太多針對(duì)不同場(chǎng)景(從應(yīng)用到硬件)的專業(yè)性能調(diào)優(yōu)工具,找到性能瓶頸從程序或者系統(tǒng)級(jí)別去修改優(yōu)化,我們接下來有一個(gè)議題也會(huì)講性能調(diào)優(yōu)工具。appscan 工具可能更側(cè)重于運(yùn)維人員,對(duì)運(yùn)維人員來說,通常不會(huì)涉及到業(yè)務(wù)或系統(tǒng)具體怎么調(diào)優(yōu)這么細(xì)致的力度,他更關(guān)注的是系統(tǒng)是否滿足業(yè)務(wù)運(yùn)行,哪一類資源是瓶頸,是否可以從運(yùn)維手段上得到解決,因而除了幫助優(yōu)化外,appscan 工具盡可能的從應(yīng)用可能使用到資源的上去分析,幫助運(yùn)維做出決策。
最后一個(gè)工具是ossre,這不是單獨(dú)的工具,它其實(shí)是我們內(nèi)部運(yùn)行的自動(dòng)化診斷專家系統(tǒng),前端會(huì)分析數(shù)據(jù)、采集數(shù)據(jù),后端會(huì)有大數(shù)據(jù)人工智能的方式去分析這個(gè)系統(tǒng)能存在的問題或者是已知問題。其前端集成到了 sysAK 中,也可單獨(dú)使用,對(duì)于一些不需要后端大量數(shù)據(jù)也可分析出的已知問題給出解決方案。
三、開源
由于不斷發(fā)展和變化的復(fù)雜業(yè)務(wù)環(huán)境,工具集也需要持續(xù)迭代,以覆蓋更多的場(chǎng)景,因此希望通過社區(qū)合作,共同打造出這個(gè)跨平臺(tái)的統(tǒng)一工具集,為此,工具集支持多種語言格式,c、shell、python、go 等,方便不同語言習(xí)慣的開發(fā)者進(jìn)行開發(fā),快速集成;同時(shí)針對(duì)需要采集系統(tǒng)內(nèi)核數(shù)據(jù)的情況,也同時(shí)兼容 Linux kernel module 和 eBPF 兩種技術(shù),對(duì)內(nèi)核版本不做限制。
目前 sysAK 工具集的代碼已經(jīng)在龍蜥社區(qū)進(jìn)行了托管,并且在系統(tǒng)運(yùn)維 SIG、跟蹤診斷 SIG 中進(jìn)行開源,希望大家后期加入 SIG 一起討論共建。謝謝!
原文鏈接:https://developer.aliyun.com/article/811850?utm_content=g_1000309913
本文為阿里云原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。