背景
螞蟻金服業務自定義監控是螞蟻金服監控産品中的一個重要功能,主要是通過自定義日志資料源并配置大盤的方式來解決螞蟻金服業務實時監控的需求。在産品功能上,使用者可以通過對一系列日志資料源的建立、組織、管理及表單配置化的方式,簡單、快速組織出一個多元監控大盤。這項能力在當時是一個具有創新性的能力,從功能到産品體驗上很好解決了當時螞蟻金服複雜業務監控的痛點。
但是,随着螞蟻金服監控産品的不斷疊代更新,以及雲原生可觀測性對于監控大盤的高要求,大家對自定義監控的體驗訴求也越來越多,包括更便捷的互動方式、更豐富的圖表、更豐富的資料源、更多擴充點等,是以對監控大盤的更新也勢在必行。
本文将介紹螞蟻金服監控産品在監控大盤方面的創新設計與嘗試,新版自定義監控大盤 Barad-Dur 目标成為業界體驗最優秀的自定義監控大盤,在互動、體驗與設計理念上有諸多創新點,同時将以子產品的形式釋出,支援二次開發,可以同時為螞蟻金服内外監控系統服務。
産品體驗
WYSIWYG
目前優秀的監控大盤産品都标配一個“所見即所得(WYSIWYG)”編輯器,這方面能力是螞蟻金服監控産品一直缺失的。在螞蟻金服監控産品中配置大盤還是通過傳統的表單方式,對使用者非常不友好、學習曲線陡峭、配置效率不高。導緻使用者經常将配置大盤作為一項需求提給監控團隊,由監控團隊的“大盤配置專家”來進行配置,不僅存在較高的溝通成本,也給監控團隊增加了很大的負擔。
在新版監控大盤 Barad-Dur 中,對 WYSIWYG 編輯器的互動體驗進行了大量工作,力求做到市面上最優秀的編輯體驗。
體驗1:縮放
Barad-Dur 的縮放是可以在四周以及四角上進行的,而市面上常見的大盤産品隻支援右下角的縮放。由于坐标系統一般采用的是
(left, top, width, height)
來定義一個矩形,最容易實作的就是右下角縮放,隻需要變動 width 和 height 兩個參數即可。最難實作的是左上角的縮放,四個參數需要同時變動,且關系比較複雜。特别是在引入網格布局後,縮放時要自動“吸附”臨近的網格點,難上加難。

體驗2:拖動
Barad-Dur 的圖表拖動可以實作圖表位置的一步交換,而市面上常見的大盤産品需要進行多次拖動才能實作兩個圖表的交換。且在拖動過程中,圖表的整體布局會被打亂,而 Barad-Dur 不會存在這樣的問題。
體驗3:自動重布局
Barad-Dur 的自動重布局功能非常強大,可以支援實時布局預覽(當然市面上常見的大盤産品也支援),同時大盤的布局調整會根據具體操作(縮放、拖動)的方向進行。而市面上常見的大盤産品隻能在垂直方向上進行布局調整,因為所用的算法非常簡單,隻是粗暴地把所有圖表向頁面上“推”。
體驗4:任意位置
Barad-Dur 的布局支援圖表在任意位置擺放,而市面上常見的大盤産品由于上述的簡陋算法,不支援此功能,所有的圖表必須堆疊在頁面的頂部。
體驗5:布局複位
Barad-Dur 的自動重布局能夠在對單個圖表進行調整時将其他圖表“推開”,然後更強大的是可以再将被推開的圖表複位。這裡找到了市面上常見的大盤産品直接拿來用的開源布局架構進行對比。該架構其實提供了上述的任意位置功能,然而由于沒有布局複位的功能,導緻該功能一旦啟用,會令整個大盤在編輯過程中布局被擾亂,對使用者起不到任何幫助,是以市面上常見的大盤産品沒有啟用這個功能。
體驗6:文字編輯
Barad-Dur 支援在大盤中添加靜态文字以及對于文字的編輯。靜态文字可用于公告、标題、說明等一些常見的大盤場景。
功能對比
Barad-Dur | 市面上常見的大盤産品 | |
---|---|---|
任意拖動 | ✔︎ | |
任意縮放 | ✘ | |
多樣圖表 | ||
圖表實時編輯 | ||
圖表導入導出 | ||
任意布局 | ||
添加文字 |
綜上對比,可以看出 Barad-Dur 的 WYSIWYG 編輯器在各項功能上已經領先于市面上常見的大盤産品。
控制器
大盤,即 Dashboard (in an automobile or similar vehicle) a panel beneath the front window having various gauges and accessories for the use of the driver; instrument panel。其本意是指汽車上的儀表闆,這裡的儀表闆包括了兩類組成部分:螢幕、控制器。在儀表闆上不僅能看到汽車的目前狀态,也能對汽車進行各種控制。這是大盤的本意,但是就目前看來,市面上所有的監控大盤産品都缺失了控制器這個重要的組成部分,導緻監控大盤其實隻是監視大盤。如果隻是用來監視的,那大盤獨立存在就沒有意義,就像汽車的儀表闆上隻有轉速表、時速表、裡程表,卻沒有油門、刹車、換擋杆。
我們再來看幾個工業産品的大盤:
面向普通消費者的量産産品
面向專業消費者的量産産品
面向專家的定制産品
控制器是不可或缺的組成部分,甚至比螢幕更加重要。Barad-Dur 提供了在大盤中設定控制按鈕的功能,可以實作一些簡單的控制,比如關閉/啟動報警、打開釘釘聊天視窗、啟動控制預案等。日後會不斷加入更加強大的控制功能,讓螞蟻金服監控大盤變成一個完整的監控系統。
技術實作
自定義資料源
上文提到 Barad-Dur 支援二次開發,支援自定義資料源,僅需一點點工作即可接入自己的資料源:
- 繼承 AbstractDatasource,并實作 doRequestData 接口;
- 調用 registerDatasource 将資料源注冊至 Barad-Dur(如果使用 Barad-Dur 的資料源編輯器,可在注冊時指定自定義的資料源的編輯器);
Barad-Dur 會對所有的資料源進行包裝,提供緩存、增量加載、請求合并等功能。
統一時序資料源
為了實作自定義資料源能夠在任意圖表中正确展現,Barad-Dur 定義了一種 universal 的時序資料格式,支援多 key 以及多 value。所有的時序資料源(以後可能會支援非時序資料源)都會将查詢結果轉換為這種格式,所有的圖表也都會使用這種資料格式進行展現。
使用統一資料格式的優勢在于,圖表和資料源都是按照同樣的資料接口(約定)來實作的,是以圖表和資料源是可以獨立變化的。即圖表可以任意切換而不需要改動資料源配置,資料源也可以任意切換而不需要調整圖表配置。這是市面上常見的大盤産品做不到的。
另一大優勢在于計算。Barad-Dur 支援資料源的簡單前端計算(如計算比率的場景需要将資料 A 與資料 B 相除),在使用了統一的資料格式之後,将計算也視為一個時序資料源,它的輸入是一組時序資料源,也就是說一個計算資料源可以引用另一個計算資料源。這也是市面上常見的大盤産品做不到的。
Scene Graph
Scene Graph 的概念常用于遊戲引擎對于場景的渲染。由于場景中各個節點有父子關系且子節點的空間關系常常用相對于父節點的量來表示,是以需要一種資料結構來将這些 local 空間的量(translation、rotation)轉變為 global 空間的量,才能最終轉換成螢幕空間的量用于渲染。這種父子關系恰好對應了大盤中的各個圖表以及整個大盤的關系。就拿一個最常見的需求來舉例說明:大盤上有全局回放的功能(這是一個非常重要的功能,沒有這個功能大盤就對排查問題毫無意義),而每個圖表又有自己的設定:
- 時間跨度:分鐘級的圖表與秒級的圖表不會展現同樣範圍的資料;
- 時間偏移:圖表資料産生存在不同的延時;
我們可以使用類似 Scene Graph 的資料結構來儲存每個圖表自己的時間軸配置以及全局大盤的時間軸配置,最後計算出查詢資料所需的時間參數。
同時,未來還會引入技術棧的概念,即一個預定義的圖表組,可以直接放入到自定義的大盤中,隻需要做少量配置。例如,使用者可以一步建立一台實體機的 CPU、Memory、Disk 監控圖表,隻需要修改這個圖表組的 ip 參數。
是以在 Barad-Dur 中借鑒了 Scene Graph 的設計理念,并融入了大盤的設計需求。
總體是一個樹形結構,但是每個節點都會有一個 MVC 結構,将資料源、視圖以及控制資料分離,控制流與資料流分離。同時資料源部分可以互相依賴,使 Barad-Dur 可以優化資料查詢,做到緩存、增量查詢、合并查詢等。
未來展望
目前 Barad-Dur 已經内置支援 OpenTSDB、CeresDB(螞蟻自研的高性能、分布式、高可靠時序資料庫,支援 PromQL)以及部分螞蟻金服内部資料源,計劃将相容更多資料源,如 PromQL、InfluxDB、MySQL 等常用監控資料源。本文提到的可以預定義一組圖表以及一組變量,建立大盤時可以快速添加相應的圖表元件,同時也支援導入從其他大盤産品直接導出的大盤,使使用者可以快速平滑遷移。
希望本文的介紹可以為大家在雲原生監控領域的設計帶來一些思考與啟發,也歡迎關注該領域的優秀的你,跟我們交流更多想法~
關于我們
歡迎來到「螞蟻智能運維」的世界。本公衆号由螞蟻智能監控團隊出品,面向關注智能運維技術的同學,将不定期與大家分享雲原生時代下螞蟻金服在智能監控的架構設計與創新方面的思考與實踐。
螞蟻智能監控團隊,負責螞蟻金服的基礎設施和業務應用的監控需求,正在努力建設一個支撐百萬級機器叢集、億萬規模服務調用場景下的,覆寫名額、日志、性能和鍊路等監控資料,囊括采集、清洗、計算、存儲乃至大盤展現、離線分析、告警覆寫和根因定位等功能,同時具備智能化 AIOps 能力的一站式、一體化的監控産品,并服務螞蟻金服衆多業務和場景。
關于「智能運維」有任何想要交流、讨論的話題,歡迎留言告訴我們。
PS:螞蟻智能監控正在招聘 AIOps 專家,歡迎加入我們,有興趣聯系 [email protected]