中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

通過機(jī)器學(xué)習(xí)和時(shí)間序列數(shù)據(jù)理解軟件系統(tǒng)行為

2018-08-10    來源:raincent

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

關(guān)鍵要點(diǎn)

• 在深入了解使用機(jī)器學(xué)習(xí)來了解軟件系統(tǒng)行為之前,必須先了解傳統(tǒng)的時(shí)間序列方法。

• 時(shí)間序列數(shù)據(jù)的值缺失可能會在分析時(shí)導(dǎo)致意外結(jié)果,Pandas庫可以幫為你填充合理的默認(rèn)值。

• 當(dāng)人們在使用你的服務(wù)時(shí),你應(yīng)該期望數(shù)據(jù)具有季節(jié)性。在設(shè)計(jì)預(yù)測算法時(shí)要考慮到這一點(diǎn)。

• 請注意你為異常檢測設(shè)置的閾值。在單個(gè)服務(wù)器上不太可能發(fā)生的事件在對應(yīng)用程序進(jìn)行擴(kuò)展之后很可能會發(fā)生。

在分析時(shí)間序列時(shí),需要了解你想要實(shí)現(xiàn)的目標(biāo)。確保不要只是使用簡單的確定性SQL分析工具。了解你的算法的行為,了解你是否正在自動化對算法的解釋,或者你是否正在將數(shù)據(jù)轉(zhuǎn)換為預(yù)測殘差并使用它們。

在2018年QCon.ai大會上,David Andrzejewski呈現(xiàn)了“通過機(jī)器學(xué)習(xí)和時(shí)間序列數(shù)據(jù)來理解軟件系統(tǒng)行為”的演講。David是Sumo Logic的工程經(jīng)理,Sumo Logic是一個(gè)基于云的機(jī)器數(shù)據(jù)分析平臺。運(yùn)行軟件系統(tǒng)(如應(yīng)用程序或云群集)的開發(fā)人員可以將Sumo Logic作為日志記錄的后端。Sumo Logic為機(jī)器數(shù)據(jù)提供持續(xù)智能。

我們使用軟件來解決很多問題,而人工智能技術(shù)開始進(jìn)入到軟件世界。在深入研究機(jī)器學(xué)習(xí)對軟件系統(tǒng)行為的影響之前,必須先了解傳統(tǒng)的時(shí)間序列方法。了解傳統(tǒng)方法的局限性可以讓你在選擇技術(shù)時(shí)做出明智的權(quán)衡。首先,問問自己是否知道要完成什么任務(wù)。然后再試著問自己是否可以通過簡單或確定性的分析來實(shí)現(xiàn)這一目標(biāo)。只有在其他方法不可行的情況下才考慮是否使用機(jī)器學(xué)習(xí)。

了解軟件的運(yùn)行狀況以及為什么會發(fā)生故障可能很困難。公司在部署服務(wù)時(shí),如果這些服務(wù)依賴了其他多個(gè)主機(jī)上的微服務(wù),那么可以列出這些微服務(wù)之間的依賴關(guān)系,并繪制成圖表,這樣有助于理清服務(wù)之間的關(guān)系。在繪制這些圖標(biāo)之后,你可能會得到一個(gè)人們稱之為微服務(wù)死亡之星的圖像:

?

?

 

很多應(yīng)用程序每天都生成數(shù)TB的日志,包括千兆字節(jié)的源代碼,并且每分鐘輸出數(shù)百萬個(gè)度量指標(biāo)。手動分析這些數(shù)據(jù)是不現(xiàn)實(shí)的,因此你需要機(jī)器智能的幫助。但是,通過分析數(shù)據(jù)來找出系統(tǒng)運(yùn)行狀況是一項(xiàng)艱巨的任務(wù),即使不是不可能完成。有一篇有趣的論文深入研究了數(shù)據(jù)的粒度——“神經(jīng)科學(xué)家可以理解一個(gè)微處理器嗎?”。論文的作者使用模擬器來玩大金剛游戲。因?yàn)樗麄兛梢栽L問模擬的內(nèi)存,所以可以訪問系統(tǒng)的完整狀態(tài)。從理論上講,這意味著有可能可以通過分析數(shù)據(jù)從較高層面了解系統(tǒng)正在做什么。不過,盡管這種策略可以提供小的見解,但只通過查看數(shù)據(jù)似乎并不能讓你從更高級層次完全理解大金剛游戲的運(yùn)行狀態(tài)。

當(dāng)你僅使用原始數(shù)據(jù)來理解復(fù)雜、動態(tài)、多尺度的系統(tǒng)時(shí),這種剖析變得非常重要。將原始數(shù)據(jù)聚合到時(shí)間序列視圖中可以讓我們更容易看清問題。谷歌的“Site Reliability Engineering”是一本非常好的參考書,可以免費(fèi)在線閱讀。

了解復(fù)雜、動態(tài)、多尺度的系統(tǒng)對于輪班待命的工程師來說尤為重要。當(dāng)系統(tǒng)出現(xiàn)故障時(shí),他或她必須能夠知道系統(tǒng)在做什么。為此,工程師既需要原始數(shù)據(jù),也需要可視化的方法,以及能夠聚合數(shù)據(jù)的更高級別的指標(biāo)。在這種情況下,工程師通常需要將故障服務(wù)器與其他服務(wù)器的行為做對比,或與昨天的行為做對比,或與進(jìn)行軟件更新之前的行為做對比。

?

 

百分位的好處和不足

在查看一長串日志數(shù)據(jù)時(shí),你不會只看連續(xù)幾毫秒的數(shù)據(jù)細(xì)節(jié)。你可以按照時(shí)間來量化數(shù)據(jù)。最基本的方法是使用min、max、average、sum和count等函數(shù)。很多人在聚合數(shù)據(jù)時(shí)也喜歡使用百分位。百分位的優(yōu)勢在于它們可以用明確的語言來表達(dá)你的數(shù)據(jù)。例如,“加載一個(gè)請求最長的時(shí)間是4,300毫秒”,這句話很精確,但無法用來確定它與正常操作之間有多少差距。但是,如果說成“p99小于2,000毫秒”,它就可以告訴我們,不超過1%的客戶請求需要超過兩秒的加載時(shí)間。

百分位的缺點(diǎn)是難以將數(shù)據(jù)組合成有意義的東西。雖然50%左右的值趨于穩(wěn)定,但較高的百分位會有很大差異,并且可能值會呈現(xiàn)出長尾分布。另一個(gè)問題是很容易就聚合成對幾個(gè)數(shù)據(jù)集的簡單分析。你可以基于兩個(gè)數(shù)據(jù)集的最小值來計(jì)算它們的整體最小值。但是,你不能簡單地使用百分位方法。從數(shù)學(xué)角度來講,我們不可能將數(shù)據(jù)集X的p95與數(shù)據(jù)集Y的p95組合在一起。這意味著如果沒有進(jìn)一步的分析,只是組合多個(gè)數(shù)據(jù)集并不一定是有意義的。

重要的時(shí)間序列概念

最基本的時(shí)間序列監(jiān)控是比較時(shí)間移位。如果你要將一個(gè)群集的寫入延遲與前一天相同主機(jī)的寫入延遲進(jìn)行比較,這一點(diǎn)就尤為重要。它也可以與窗口數(shù)據(jù)結(jié)合在一起,稱為“按時(shí)間分組”。更多信息可以在Tyler Akidau的2016年洛杉磯QCon的演講中找到,他基于Apache Beam討論了這個(gè)概念。

處理缺失的數(shù)據(jù)也很重要。在應(yīng)用機(jī)器學(xué)習(xí)之前,你必須知道如何處理缺失值。使用常數(shù)值(如零或無窮大)來代替缺失值可能會導(dǎo)致意外結(jié)果。但是,如果不處理缺失值可能會在運(yùn)行時(shí)產(chǎn)生異常。這個(gè)問題可以通過使用Python的Pandas數(shù)據(jù)分析庫來解決,它簡直就是處理數(shù)據(jù)操作問題的瑞士軍刀。你可以使用fillna()方法,該方法會提供一些合理的默認(rèn)值。需要注意的是,有很多有趣的方法可以填補(bǔ)數(shù)據(jù)中的空白,還有其他很多可以使用的研究成果和方法。有些領(lǐng)域稱其為“預(yù)測”缺失數(shù)據(jù),有些領(lǐng)域稱其為“插補(bǔ)”、“推斷”或“抽樣”。你可以進(jìn)行向前填充,回填或插入。

 

??

 

應(yīng)用數(shù)據(jù)

在搭建日志記錄系統(tǒng)時(shí)需要考慮如何設(shè)置固定閾值警報(bào)。設(shè)置警報(bào)的目的是在網(wǎng)站出現(xiàn)故障或發(fā)生其他意外事件時(shí)能夠喚醒某人。在開發(fā)警報(bào)系統(tǒng)時(shí),很多人會聘請可以為系統(tǒng)設(shè)置合理閾值的領(lǐng)域?qū)<摇@,你可以設(shè)置一個(gè)警報(bào),在5%的請求需要兩秒以上的處理時(shí)間時(shí)觸發(fā)警報(bào),此時(shí)它會通知正在待命的工程師。

然而,人類專家難以擴(kuò)展。你可能希望能夠自動將機(jī)器行為與其他機(jī)器行為進(jìn)行比較,尤其是當(dāng)你有很多機(jī)器并輸出很多時(shí)間序列時(shí)。你無法自己分析和比較所有的時(shí)間序列,并且當(dāng)機(jī)器非常多時(shí),更不可能這樣做了。此時(shí),你可以嘗試應(yīng)用機(jī)器學(xué)習(xí)。

預(yù)測模型和異常值

一種方法是使用預(yù)測建模進(jìn)行異常值檢測。通過預(yù)測機(jī)器的正常行為,就可以在機(jī)器的行為超出預(yù)測結(jié)果范圍時(shí)檢測出它們。但是,在能夠?qū)崿F(xiàn)這樣的操作之前,你需要考慮很多因素。你需要問自己四個(gè)關(guān)鍵問題:

•  這種行為是否有規(guī)律性?
•  如何為這種行為建模?
•  如何基于期望定義主要偏差?
•  檢測意外情況和偏差是否真的很有價(jià)值?

在進(jìn)行預(yù)測建模時(shí)需要考慮的重要事項(xiàng)是數(shù)據(jù)的季節(jié)性或節(jié)奏。任何有人類參與的服務(wù)都有潛在的節(jié)奏。例如,大多數(shù)人在工作中使用Sumo Logic,這意味著任何給定國家的Sumo Logic使用數(shù)據(jù)將顯示出在正常工作時(shí)間內(nèi)有大量的活動,但在這些時(shí)間之外不會有太多活動。但是,Netflix的使用數(shù)據(jù)可能會顯示出相反的趨勢。你可以通過手動調(diào)整數(shù)據(jù)或使用傅里葉變換對此進(jìn)行建模,也有很多人會使用隱藏馬爾可夫模型。

??

 

基于距離的時(shí)間序列數(shù)據(jù)挖掘

當(dāng)你有多臺計(jì)算機(jī)時(shí),可能希望將計(jì)算機(jī)的行為進(jìn)行相互比較。如果你看到一臺機(jī)器出現(xiàn)奇怪的行為,就會想知道其他機(jī)器的行為是否相同。也許他們運(yùn)行的是不同版本的軟件,也許它們在同一個(gè)數(shù)據(jù)中心中,或者可能正在發(fā)生其他事情。要分析這些問題,你需要比較時(shí)間序列之間的距離。

??

 

你應(yīng)該使用什么指標(biāo)來確定兩個(gè)時(shí)間序列之間的相似性?只是通過簡單的基于時(shí)間的相減肯定會得出錯(cuò)誤的結(jié)果。在上圖中,雖然時(shí)間序列非常相似,但得出的指標(biāo)會告訴你,它們是完全不同的。

你可以使用一整套指標(biāo)。有一種非常流行的技術(shù),叫作動態(tài)時(shí)間扭曲,它會詢問你為了讓時(shí)間序列更好地對齊將如何對時(shí)間序列進(jìn)行修改、扭曲或破壞,以及你需要為這些操作付出什么代價(jià)。有了這個(gè)指標(biāo),你就可以找到N個(gè)具有最類似行為的主機(jī),也可以繪制出主機(jī)相似性圖表。通過查看譜聚類圖像就可以知道主機(jī)間的結(jié)構(gòu)情況。

?

?

 

使用日志數(shù)據(jù)進(jìn)行異常檢測和事件分類

有一些方法可以用于將日志數(shù)據(jù)轉(zhuǎn)換為時(shí)間序列。當(dāng)你擁有大量的半結(jié)構(gòu)化字符串時(shí),可以對消息進(jìn)行計(jì)數(shù)或從中提取信息。這些日志是近似的程序執(zhí)行跟蹤。你的機(jī)器一旦進(jìn)入生產(chǎn)環(huán)境就無法再使用調(diào)試器,只能通過這些日志消息推斷軟件的行為。如果你的程序的每個(gè)請求在超時(shí)時(shí)都會打印一個(gè)字符串,就可以計(jì)算每小時(shí)的超時(shí)次數(shù)。這樣你就可以得到一個(gè)時(shí)間序列,然后將它們用在分析上!

你可能想要為某個(gè)時(shí)間序列的值設(shè)置閾值。但是,你又不想欺騙自己,比如把一個(gè)沒有意義的事件當(dāng)成是一個(gè)有趣的事件。想象一下,你擁有一個(gè)超精確的模型,它會在模式發(fā)生的可能性僅為0.01%時(shí)發(fā)送警報(bào)。當(dāng)你的服務(wù)有一百萬個(gè)時(shí)間序列時(shí),大約會有一百個(gè)誤報(bào)。Baron Schwartz在他的演講“為什么沒人關(guān)心你的異常檢測”中詳細(xì)介紹了應(yīng)該用什么技術(shù)來確定閾值。

深度學(xué)習(xí)領(lǐng)域近來出現(xiàn)了很多新進(jìn)展,你可能希望在預(yù)測和異常檢測上使用深度學(xué)習(xí),但深度學(xué)習(xí)仍然無法讓你擺脫理解問題域。你仍然需要找到解決問題的方法,一種可能的方法是使用遞歸神經(jīng)網(wǎng)絡(luò)進(jìn)行預(yù)測。如果你碰巧可以訪問大量的訓(xùn)練數(shù)據(jù),那么這會是個(gè)好主意。但如果沒有,你的首要任務(wù)應(yīng)該是在嘗試使用數(shù)據(jù)之前聚合數(shù)據(jù)。

總之,在檢查數(shù)據(jù)方面需要做很多深入的工作。機(jī)器與我們的生活息息相關(guān)。這些機(jī)器產(chǎn)生數(shù)據(jù),但分析數(shù)據(jù)很復(fù)雜,所以我們需要借助機(jī)器學(xué)習(xí)。防止噪音和誤報(bào)非常重要,要做到這一點(diǎn),必須確保你明白自己想要做什么,要知道為什么沒有使用確定性的SQL分析工具,并從數(shù)學(xué)角度理解你所使用的方法。最后,要知道你自己是否在自動化解釋你的算法,或者在將數(shù)據(jù)轉(zhuǎn)換為預(yù)測殘差,并將其用于異常預(yù)測。

作者Roland Meertens

查看英文原文:Understanding Software System Behaviour With ML and Time Series Data

標(biāo)簽: 代碼 服務(wù)器 谷歌 數(shù)據(jù)分析 網(wǎng)絡(luò)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:TOP 3大開源Python數(shù)據(jù)分析工具!

下一篇:探訪騰訊北方最大數(shù)據(jù)中心:馬化騰有多在乎你的數(shù)據(jù)安全?