
論大數(shù)據(jù)對運維的意義
從三個層面論述大數(shù)據(jù)對運維的意義:
1、工程數(shù)據(jù),譬如工單數(shù)量,SLA 可用性,基礎(chǔ)資源,故障率,報警統(tǒng)計
2、業(yè)務(wù)數(shù)據(jù),譬如業(yè)務(wù) DashBoard,Trace 調(diào)用鏈,業(yè)務(wù)拓?fù)淝袚Q,業(yè)務(wù)指標(biāo),業(yè)務(wù)基準(zhǔn)數(shù)據(jù),業(yè)務(wù)日志挖掘
當(dāng)然,這篇文章談的是運維都有哪些數(shù)據(jù),哪些指標(biāo),以及數(shù)據(jù)呈現(xiàn)。并沒有談及如何和大數(shù)據(jù)相關(guān)的架構(gòu)做整合,從而能讓這些數(shù)據(jù)真的變得活起來。
上面的文字算引子,在步入正式的探討前,有一點我覺得值得強(qiáng)調(diào):
雖然這里講的是如何將大數(shù)據(jù)思維/架構(gòu)應(yīng)用于運維,平臺化運維工作,但是和大數(shù)據(jù)本質(zhì)上沒有關(guān)系,我們只是將大數(shù)據(jù)處理的方式和思想應(yīng)用在運維工作上。所以,即使你現(xiàn)在所在的公司沒有數(shù)據(jù)團(tuán)隊支撐,也是完全可以通過現(xiàn)有團(tuán)隊完成這件事情的。
1 運維監(jiān)控現(xiàn)狀
很多公司的運維的監(jiān)控具有如下特質(zhì):
只能監(jiān)控基礎(chǔ)運維層次,通過 zabbit 等工具提供服務(wù)器,CPU,內(nèi)存等相關(guān)的監(jiān)控。這部分重要,但確實不是運維的核心。
對業(yè)務(wù)的監(jiān)控是最復(fù)雜的,而現(xiàn)在很多公司的要么還處于 Shell 腳本的刀耕火種階段,要么開發(fā)能力較強(qiáng),但是還是東一榔頭西一棒子,不同的業(yè)務(wù)需要不同的監(jiān)控系統(tǒng),人人都可以根據(jù)的自己的想法開發(fā)一個監(jiān)控的工具也好,系統(tǒng)也好,平臺也好??傊潜容^凌亂的。
使用第三方的監(jiān)控平臺。這個似乎在 Rails/NodeJS/Pythone 相關(guān)語系開發(fā)的產(chǎn)品中比較常見。我不做過多評價,使用后冷暖自知。
當(dāng)然也有抽象得很好的,比如點評網(wǎng)的運維監(jiān)控?fù)?jù)說就做得相當(dāng)好,運維很閑,天天沒事就根據(jù)自己的監(jiān)控找開發(fā)的茬,讓開發(fā)持續(xù)改進(jìn)。不過他們的指導(dǎo)思想主要有兩個:
運維自動化。怎么能夠?qū)崿F(xiàn)這個目標(biāo)就怎么搞,這嚴(yán)重依賴于搞的人的規(guī)劃能力和經(jīng)驗。
抽象化,根據(jù)實際面臨的問題做出抽象,得到對應(yīng)的系統(tǒng),比如需要發(fā)布,于是又發(fā)布系統(tǒng),需要管理配置文件,所以有配管系統(tǒng),需要日志分析所以有了有日志分析系統(tǒng)。然而這樣是比較零散的。
有點扯遠(yuǎn),我們還是 focus 在監(jiān)控上。
如果以大數(shù)據(jù)的思維去思考,我們應(yīng)該如何做好監(jiān)控這件事情?
2 羅列出你的數(shù)據(jù)源
所有的數(shù)據(jù)源都有一個共性,就是日志。無論文本的也好,二進(jìn)制的也好。所以日志是整個信息的源頭。日志包含的信息足以讓我們追查到下面幾件事情:
系統(tǒng)健康狀況監(jiān)控
查找故障根源
系統(tǒng)瓶頸診斷和調(diào)優(yōu)
追蹤安全相關(guān)問題
從日志我們可以挖掘出什么?
我覺得抽象起來就一個:指標(biāo)。
指標(biāo)可以再進(jìn)行分類:
業(yè)務(wù)層面,如團(tuán)購業(yè)務(wù)每秒訪問數(shù),團(tuán)購券每秒驗券數(shù),每分鐘支付、創(chuàng)建訂單等
應(yīng)用層面,每個應(yīng)用的錯誤數(shù),調(diào)用過程,訪問的平均耗時,最大耗時,95線等
系統(tǒng)資源層面,如 cpu、內(nèi)存、swap、磁盤、load、主進(jìn)程存活等
網(wǎng)絡(luò)層面,如丟包、ping 存活、流量、tcp 連接數(shù)等
每個分類里的每個小點其實都是一個指標(biāo)。
3 如何統(tǒng)一實現(xiàn)
千萬不要針對具體問題進(jìn)行解決,大數(shù)據(jù)架構(gòu)上的一個思維就是:我能夠提供一個平臺讓大家方便解決這些問題么? 而不是,這個問題我能解決么?
先來看看架構(gòu)圖:
因為目前我負(fù)責(zé)應(yīng)用層的研發(fā),業(yè)務(wù)還比較少,主要就需要監(jiān)控三個系統(tǒng):
1、推薦
2、搜索
3、統(tǒng)一查詢引擎
所以監(jiān)控的架構(gòu)設(shè)計略簡單些。如果你希望進(jìn)行日志存儲以及事后批量分析,則可以采用淘寶的這套架構(gòu)方式:
稍微說明下,日志收集 Agent 可以使用 Flume,鷹眼 Storm 集群,其實就是 Storm 集群,當(dāng)然有可能是淘寶內(nèi)部 Java 版的,Storm(或第一幅圖的 SparkStreaming)做兩件事情。
將日志過濾,格式化,或存儲起來
進(jìn)行實時計算,將指標(biāo)數(shù)據(jù)存儲到 HBase 里去
到目前為止,我們沒有做任何的開發(fā),全部使用大數(shù)據(jù)里通用的一些組件。至于這些組件需要多少服務(wù)器,就看對應(yīng)的日志量規(guī)模了,三五臺到幾百臺都是可以的。
需要開發(fā)的地方只有兩個點,有一個是一次性的,有一個則是長期。
先說說一次性的,其實就是大盤展示系統(tǒng)。這個就是從 HBase 里取出數(shù)據(jù)做展示。這個貌似也有開源的一套,ELK。不過底層不是用的 HBase 存儲,而是 ES。這里就不詳細(xì)討論。
長期的則是 SparkStreaming(淘寶是使用 Storm,我建議用 SparkStreaming,因為 SparkStreaming 可以按時間窗口,也可以按量統(tǒng)一做計算),這里你需要定義日志的處理邏輯,生成我上面提到的各項指標(biāo)。
這里有一個什么好處呢,就是平臺化了,對新的監(jiān)控需求響應(yīng)更快了,開發(fā)到上線可能只要幾個小時的功夫。如果某個系統(tǒng)某天需要一個新的監(jiān)控指標(biāo),我們只要開發(fā)個 SparkStreaming 程序,丟到平臺里去,這事就算完了。
第一幅圖的平臺我是已經(jīng)實現(xiàn)了的。我目前在 SparkStreaming 上只做了三個方面比較基礎(chǔ)的監(jiān)控,不過應(yīng)該夠用了。
狀態(tài)碼大盤。HTTP 響應(yīng)碼的 URL(去掉 query 參數(shù))排行榜。比如你打開頁面就可以看到發(fā)生500錯誤的 top 100 的 URL,以及該 URL 所歸屬的系統(tǒng)。
響應(yīng)耗時大盤。URL 請求耗時排行榜。比如你打開頁面就可以看到5分鐘內(nèi)平均響應(yīng)耗時 top 100 的 URL(去掉 query 參數(shù))。
還有就是 Trace 系統(tǒng)。類似 Google 的 Dapper,淘寶的 EagleEye。給出一個唯一的 UUID,可以追蹤到特定一個 Request 的請求鏈路。每個依賴服務(wù)的響應(yīng)情況,比如響應(yīng)時間。對于一個由幾個甚至幾百個服務(wù)組成的大系統(tǒng),意義非常大,可以方便的定位出到底是那個系統(tǒng)的哪個 API 的問題。這個最大的難點是需要統(tǒng)一底層的 RPC/HTTP 調(diào)用框架,進(jìn)行埋點。因為我使用的是自研的 ServiceFramework 框架,通訊埋點就比較簡單。如果是在一個業(yè)務(wù)線復(fù)雜,各個系統(tǒng)使用不同技術(shù)開發(fā),想要做這塊就要做好心理準(zhǔn)備了。
現(xiàn)在,如果你想要監(jiān)控一個系統(tǒng)是不是存活,你不在需要取寫腳本去找他的 pid 看進(jìn)程是不是存在,系統(tǒng)發(fā)現(xiàn)在一定的周期內(nèi)沒有日志,就可以認(rèn)為它死了。而系統(tǒng)如果有異常,比如有大量的慢查詢,大盤一定能展示出來。
描述到這,我們可以看到,這套架構(gòu)的優(yōu)勢在哪:
基本上沒有需要自己開發(fā)的系統(tǒng)。從日志收集,到日志存儲,到結(jié)果存儲等,統(tǒng)統(tǒng)都是現(xiàn)成的組件。
可擴(kuò)展性好。每個組件都是集群模式的,沒有單點故障。每個組件都是可水平擴(kuò)展的,日志量大了,加機(jī)器就好。
開發(fā)更集中了。你只要關(guān)注日志實際的分析處理,提煉指標(biāo)即可。
4 大數(shù)據(jù)思維
對于運維的監(jiān)控,利用大數(shù)據(jù)思維,需要分三步走:
1、找到數(shù)據(jù)
2、分析定義從數(shù)據(jù)里中我能得到什么
3、從大數(shù)據(jù)平臺中挑選你要的組件完成搭積木式開發(fā)
所有系統(tǒng)最可靠的就是日志輸出,系統(tǒng)是不是正常,發(fā)生了什么情況,我們以前是出了問題去查日志,或者自己寫個腳本定時去分析?,F(xiàn)在這些事情都可以整合到一個已有的平臺上,我們唯一要做的就是 定義處理日志的的邏輯 。
這里有幾點注意的:
如果你擁有復(fù)雜的產(chǎn)品線,那么日志格式會是一個很痛苦的事情。以為這中間 Storm(或者 SparkStreaming)的處理環(huán)節(jié)你需要做大量的兼容適配。我個人的意見是,第一,沒有其他更好的辦理,去兼容適配吧,第二,推動大家統(tǒng)一日志格式。兩件事情一起做。我一個月做不完,那我用兩年時間行么?總有一天大家都會有統(tǒng)一的日志格式的。
如果你的研發(fā)能力有富余,或者有大數(shù)據(jù)團(tuán)隊支撐,那么可以將進(jìn)入到 SparkStreaming 中的數(shù)據(jù)存儲起來,然后通過 SparkSQL 等做即席查詢。這樣,有的時候原先沒有考慮的指標(biāo),你可以直接基于日志做多維度分析。分析完了,你覺得好了,需要固化下來,那再去更新你的 SparkStreaming 程序。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
訓(xùn)練與驗證損失驟升:機(jī)器學(xué)習(xí)訓(xùn)練中的異常診斷與解決方案 在機(jī)器學(xué)習(xí)模型訓(xùn)練過程中,“損失曲線” 是反映模型學(xué)習(xí)狀態(tài)的核心指 ...
2025-09-19解析 DataHub 與 Kafka:數(shù)據(jù)生態(tài)中兩類核心工具的差異與協(xié)同 在數(shù)字化轉(zhuǎn)型加速的今天,企業(yè)對數(shù)據(jù)的需求已從 “存儲” 轉(zhuǎn)向 “ ...
2025-09-19CDA 數(shù)據(jù)分析師:讓統(tǒng)計基本概念成為業(yè)務(wù)決策的底層邏輯 統(tǒng)計基本概念是商業(yè)數(shù)據(jù)分析的 “基礎(chǔ)語言”—— 從描述數(shù)據(jù)分布的 “均 ...
2025-09-19CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-19SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計學(xué)領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學(xué)計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學(xué)計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11