作者簡介
運小堯? ? 百度高級研發(fā)工程師
負責百度運維大數(shù)據(jù)存儲平臺的設計和研發(fā),致力于追求大規(guī)模存儲系統(tǒng)的高性能和高可用瘫拣。
干貨概覽
百度運維大數(shù)據(jù)平臺的時序數(shù)據(jù)存儲系統(tǒng)(Time Series Database,TSDB)是智能運維團隊于 2014 年自研的一套分布式監(jiān)控數(shù)據(jù)存儲系統(tǒng)误堡。發(fā)展至今,經(jīng)歷過幾次大的架構(gòu)更迭空民,現(xiàn)在 TSDB 作為百度監(jiān)控系統(tǒng)的底層存儲服務锅铅,承載了公司諸多核心產(chǎn)品線的監(jiān)控數(shù)據(jù)存儲和查詢需求酪呻,日均寫入數(shù)據(jù)點數(shù)以萬億計,承載?50K QPS的查詢請求盐须。百度大規(guī)模時序數(shù)據(jù)存儲系列文章將介紹 TSDB 在監(jiān)控場景的應用和系統(tǒng)設計實踐玩荠,本文將介紹 TSDB 在監(jiān)控場景下的應用以及系統(tǒng)設計面臨的技術(shù)挑戰(zhàn)。
一贼邓、監(jiān)控時序數(shù)據(jù)
百度的監(jiān)控時序數(shù)據(jù)來源于監(jiān)控系統(tǒng)在全網(wǎng)數(shù)十萬臺服務器上部署的Agent阶冈,Agent 采集各類監(jiān)控對象的監(jiān)控項,并以不同的頻率向 TSDB 上報這些監(jiān)控項的測量值塑径。通過一張 CPU 空閑率趨勢圖可以直觀地看到監(jiān)控時序數(shù)據(jù)女坑。
圖1 ? ?CPU 空閑率趨勢圖
1 監(jiān)控對象(Object)
監(jiān)控對象可以分為三類:
機器級:物理機、虛擬機统舀、操作系統(tǒng)等
實例級:容器匆骗、進程、日志等
服務級(邏輯對象):服務誉简、服務組碉就、集群等?
圖2 ? ?監(jiān)控對象
2 監(jiān)控項(Metric)
監(jiān)控對象的一些需要關(guān)注的指標,如機器的 CPU 空閑率描融、內(nèi)存使用率铝噩、網(wǎng)卡帶寬以及磁盤 I/O等衡蚂,稱為監(jiān)控項窿克。除了這些通用的機器監(jiān)控項以外,根據(jù)不同的需求還可以自定義監(jiān)控項毛甲,比如數(shù)據(jù)服務的緩沖對列長度年叮、查詢請求的平均響應時間等。
3 標簽(Tag)
標簽是一對?Key-Value玻募,標識了監(jiān)控對象在某個維度(Key)的特征(Value)只损,一個監(jiān)控對象也可以從多個維度來標識,比如部署在多地域七咧、多運營商的服務可以有地域和運營商兩個維度跃惫,根據(jù)不同的維度取值可以生成不同標簽,如 (“機房=杭州”, “運營商=電信”) 和 (“機房=北京”, “運營商=聯(lián)通”)艾栋。
4 時間序列(Time Series)
把監(jiān)控對象的監(jiān)控項測量值爆存,按照時間的順序排列起來就構(gòu)成了時間序列:
時間序列 = 監(jiān)控對象 + 標簽列表 + 監(jiān)控項 + 數(shù)據(jù)點
其中數(shù)據(jù)點由時間戳和取值構(gòu)成,每個時間序列對應到趨勢圖上的一條曲線蝗砾。
二先较、監(jiān)控時序數(shù)據(jù)的特點1數(shù)據(jù)的使用場景
通過?Web 頁面携冤、HTTP API 或命令行工具,用戶可以方便地從 TSDB 種獲取到自己關(guān)注的數(shù)據(jù):
在日常運維工作中闲勺,運維工程師通過 Web 頁面人工查看趨勢圖曾棕、同環(huán)比報表和熱力圖等來了解系統(tǒng)的最新或歷史狀態(tài)
一些自動化的服務通過高頻、批量地查詢時序數(shù)據(jù)來進行數(shù)據(jù)分析菜循,進一步地挖掘數(shù)據(jù)的價值翘地,如異常檢測、匯聚計算癌幕、根因定位等
2 數(shù)據(jù)的讀寫特點
在時序數(shù)據(jù)的大多數(shù)使用場景中子眶,我們更加關(guān)注最近一段時間的數(shù)據(jù),而這些數(shù)據(jù)的產(chǎn)生卻是 7 *24 小時不間斷的序芦,這就導致時間序列的讀請求與寫請求特征迥異且量級懸殊:
隨機寫:不同的時間序列按照不同頻率各自寫入數(shù)據(jù)點
順序讀:指定時間范圍讀取一段連續(xù)的數(shù)據(jù)點
寫多讀少:寫入請求量占比達九成以上
3 數(shù)據(jù)的多維度
前面提到臭杰,可以使用標簽來從多個維度標識一個監(jiān)控對象,在獲取數(shù)據(jù)時谚中,也可以通過標簽渴杆,將監(jiān)控對象按維度進行篩選聚合。如宪塔,對于一個多地域磁奖、多運營商部署的服務,獲取其在某段時間內(nèi)某筐、不同地域相同運營商的總流量:
圖3 ? ?多維度聚合查詢
三比搭、面臨的挑戰(zhàn)
1高負載和高可用
在百度,有數(shù)千萬的監(jiān)控對象南誊,時間序列的總量近?10 億身诺。監(jiān)控項的采集周期通常為 10s,在高時效性要求的場景下要求?5s?的采集周期抄囚,這意味著每一秒鐘都有數(shù)千萬個數(shù)據(jù)點要寫入 TSDB霉赡,每天產(chǎn)生的數(shù)據(jù)點規(guī)模達到萬億量級。與此同時幔托,TSDB 每秒鐘還要處理數(shù)萬次查詢請求穴亏,由于查詢有一定的突發(fā)性,峰值的查詢流量可達到常態(tài)流量的數(shù)百倍重挑,且根據(jù)業(yè)務的需求嗓化,絕大多數(shù)的請求都應該能在?500ms?返回結(jié)果給用戶。
在處理 7 * 24 小時持續(xù)高并發(fā)寫入的同時谬哀,還要應對高并發(fā)的查詢請求刺覆,負載不可謂不重,高吞吐和低延遲是對 TSDB 的基本要求玻粪。此外隅津,打鐵還需自身硬诬垂,作為監(jiān)控系統(tǒng)自身的基礎服務,其可用性必須有所保障伦仍,根據(jù)業(yè)務需求结窘,我們制定的可用性目標至少是?99.99%。
2 復雜的數(shù)據(jù)保存策略
前文提到監(jiān)控時序數(shù)據(jù)的使用場景有很多充蓝,包括匯聚值報警隧枫、查看指標的歷史趨勢圖、實時的數(shù)據(jù)報表(天/周/季/年的同/環(huán)比)谓苟、趨勢異常檢測以及歷史數(shù)據(jù)離線分析等官脓,這些場景分別有著獨特的查詢特點:
場景時間范圍查詢數(shù)據(jù)量查詢頻率時效性要求
匯聚值報警最近數(shù)分鐘或數(shù)小時小高高
異常檢測多個時間區(qū)間小高高
實時報表最近數(shù)小時或數(shù)天大高低
歷史趨勢圖自定義時間范圍小低低
離線分析數(shù)天、數(shù)周或數(shù)月大低低
可以看到涝焙,每種場景的查詢數(shù)據(jù)量卑笨、數(shù)據(jù)的分布以及對數(shù)據(jù)時效性的需求不盡相同,TSDB 需要在這些場景下都能夠高效地獲取數(shù)據(jù)仑撞。
3 不斷增長的業(yè)務規(guī)模
百度的產(chǎn)品線數(shù)量赤兴、業(yè)務規(guī)模在不斷地增加,相應地隧哮,監(jiān)控系統(tǒng)的體量也隨著增長桶良,TSDB 的規(guī)模也勢必增長,必然會面臨容量沮翔、成本和可用性的壓力陨帆。低成本地換取系統(tǒng)容量的增加和可用性的提升,是在系統(tǒng)設計時需要考慮的重點之一采蚀。
4 多樣化的數(shù)據(jù)保存需求
不同的業(yè)務對監(jiān)控數(shù)據(jù)的保存時長有不同的要求疲牵,不同的場景對數(shù)據(jù)的粒度也有不同的要求埠褪,例如钳枕,想要知道某服務過去一天的總流量相比去年同期的變化,需要數(shù)據(jù)至少保存一年,但數(shù)據(jù)的粒度可以是天級璧眠;而對于最近一個小時的流量,希望能夠支持更細粒度的監(jiān)控數(shù)據(jù)读虏,以便能夠發(fā)現(xiàn)短暫的流量突變责静。
總結(jié)
本文主要介紹了監(jiān)控場景時序數(shù)據(jù)的特點,以及我們在設計時序數(shù)據(jù)存儲時面臨的挑戰(zhàn)盖桥,對于百度在應對這些挑戰(zhàn)時的設計實踐灾螃,