背景
首先說一些平常工做場景:前端
- 你的羣裏是否常常會發送一些巡檢報告,好比qps峯值統計,cpu利用率,機器使用數量統計等等
- 你的領導是否須要你每週發送一次公司業務層級的運行報告,包括上週有沒有故障,上週全部業務的qps峯值是多少,週期內的一些業務變動或者運營活動等。
因此你可能會看到相似這樣的一些圖:
shell
初步思考
基於上述的背景,咱們常規的實現方式有如下幾種:後端
- 平常的巡檢報告,咱們可能會用一個腳本按期的獲取數據,而後發送到企業微信機器人、郵箱、釘釘等
- 周、月巡檢報告運營報告這些,咱們可能須要手動建立一個md文件,寫上一些數據,截上一些監控圖,加上一部分解讀和批註,最終發到羣裏給你們看。
那麼基於上述的實現方式,咱們是否能夠進一步的去考慮自動化
或者說是平臺化
。好比是否能夠設想一下:微信
- 把平常的報告、通知發送集中起來管理(目前多是一我的一個腳本,不知道跑在哪一個機器的定時任務上)
- 是否能夠模板化,好比定製一些模板,而後拿着這個模板去渲染真實的數據,最終發送出來
- 還能夠增長定時任務,好比針對這個模板,我想要按期發送,這樣就更簡單的託管起來咱們分部在各個機器上的定時腳本了
功能指望
針對上述的思考,咱們團隊作了一些建設,目前一期建設想要產出一個穩定性運營平臺
,這個平臺目前的任務主要有如下幾個:markdown
- 接管咱們當前的平常報告的功能(目前的報告都是自動化腳本實現,按期發送qps數據,帶寬數據,網關數據等)
- 提供自定義模板功能,能快速定義想要的數據模板
- 能夠實現監控圖的發送(目前更多的是grafana的圖片)
- 接管咱們當前每週的穩定性運營報告的工做,可自動渲染數據,可自定義標註,最終發送
終版報告
給到用戶
- 歷史數據的存儲,目前監控平臺會存儲全量數據,這個平臺只是想要存儲一些特定數據或者叫作過濾後有效的數據
- 實現按期發送的功能,可配置定時任務
平臺設計
首先這個平臺分紅了三個大的部分:前端
、後端接口
、定時任務端
框架
這裏主要講解一下非前端部分,首先功能模塊分了幾個大塊:分佈式
儀表盤模塊 模板模塊 變量註冊模塊 報告模塊 數據存儲模塊 定時任務模塊
儀表盤模塊
這一塊主要是總覽展現的功能模塊,包括整個平臺有多少模板,有多少報告等。 這一快的功能放到二期了,一塊兒暫時沒作,不過有一個第一版的樣子能夠看看。阿里雲
模板模塊
模板模塊和變量註冊模塊是相輔相成的。模板目前主要劃分了幾種類型:設計
模板類型 | 說明 |
---|---|
基礎模板 | 基礎模板主要提供接入能力,好比我定義好了域名QPS統計的能力,那麼你只須要提供你的域名,我就能夠幫你完成統計動做 |
開放模板/週期模板 | 這類模板就相對自由,你能夠自定義模板內容,變量,最終定義定時任務來定時的渲染該模板,而後選擇發送等 |
模板定義主要的原理就是:建立一個markdown主體內容,而後寫上一些變量,最終這些變量都會被真實的值所替換。因此建立模板須要你重要的能力就是:會寫markdown
。3d
建立模板大體長這樣:
變量註冊模塊
變量註冊主要是定義你在模板中設置的變量,好比這個變量的獲取方式是什麼樣子的,獲取的數據字段是哪一個。 對比變量的說明,主要劃分了幾種:內置變量
、模板變量
、圖片變量
針對這三種變量有一個簡單的說明:
變量類型 | 變量說明 | 提供信息 |
---|---|---|
內置變量 | 全部模板均可以使用的,能夠理解爲公共變量 | 提供獲取地址 |
模板變量 | 屬於模板特有的 | 提供獲取地址 |
圖片變量 | 專門下載grafana圖片的 | 提供grafana地址 |
好比我舉個例子:
我在模板中定義了一個變量`DATE`,那麼我在變量註冊的時候須要提供這些信息: 變量獲取地址:https://abc.com/var/date 變量獲取字段:data 等到真正渲染模板動做執行的時候,就會去請求這個地址,拿到返回數據中data字段的值來具體的替換個人`DATE`數據,來達到渲染的目標。
我在模板中定義了一個變量`QPS__TREND_IMG`,這個主要是一個圖片變量,獲取的數據就是一個域名在某段時間的qps趨勢圖,那他提供的信息就是: grafana地址:http://grafana.c.com/**** grafana的key:這個固然你能夠放到服務端配置中去,也能夠自定義,隨意 等到真正渲染模板動做執行的時候,就會去請求這個下載這個grafana圖片,而後上傳到你本身的存儲,好比阿里雲的oss,華爲雲的obs,最終提供一個圖片地址而後替換這個變量,達到渲染的目標。
報告模塊
對於報告模塊來說,就是咱們最終要發送和呈現的產物,那麼咱們能夠從幾個維度來說解一下:報告如何產生
、報告產生的來源
、報告的狀態
報告如何產生
報告產生的惟一入口就是經過模板,咱們能夠在模板處選擇對應的模板,而後建立報告,建立報告須要幾個信息須要填寫:
- 模板名稱(選哪一個就用哪一個)
- 報告名稱
- 時間範圍(全部數據都依賴於時間範圍,有了時間範圍咱們才能產生數據,而後渲染報告)
報告產生的來源
關於報告的來源,平臺的規劃主要有兩個,第一個是手動生成的報告
,第二個是定時任務產生的報告
報告的狀態
針對報告,咱們須要有幾種狀態:未渲染
、渲染中
、待標註
、已發佈
(NotRendered、RenderedIng、ToBeLabeled、Published)
數據存儲模塊
對於數據存儲模塊,咱們前面定義的是歷史數據的存儲,目前監控平臺會存儲全量數據,這個平臺只是想要存儲一些特定數據或者叫作過濾後有效的數據
。
舉個例子,當前咱們平臺存儲的數據有哪些:
1.qps峯值數據(咱們監控存的是5s一個點的qps數據,不過該平臺會每小時取一次時間段內的峯值qps做爲存儲) 2.snat峯值數據(對於nat網關,咱們也是採用相似的方式,存儲過去一小時的峯值數據) 3.帶寬峯值數據 4.彈性機器峯值數據(目前k8s集羣的機器是彈性的,因此會存儲每一小時的峯值數據)
當咱們有了這些數據,咱們能作的就比較多了,好比:
- 咱們基礎的監控數據在獲取大範圍時間內的數據,都是對峯值等數據作了聚合,因此會低於真實峯值,有了每小時的峯值數據,能準確的描繪業務峯值。
- 當咱們須要週報、月報、年報的時候,咱們均可以對這些峯值數據作一些處理和分析
- 從必定角度上講,咱們能夠分析峯值的走勢,來輔助業務作一些判斷,好比業務的峯值時間愈來愈晚,是否是說明用戶睡的愈來愈晚呢?
定時任務模塊
定時任務,毋庸置疑,他承擔着控制咱們報告的發送時間和頻率。好比我在平臺能夠針對模板建立一個定時任務:什麼時間、哪一個模板、發送到哪裏。
目前咱們使用的定時任務是對接開源的分佈式定時任務框架xxl-job
,二開了一些定時任務接口給到平臺使用。
那麼須要瞭解的主要可能有幾點:
1.定時任務的發送地方:目前支持發送到企業微信應用、企業微信機器人 2.定時任務的發送頻率:主要取決你定時任務表達式的書寫
最後說一句
對於這個平臺來講,其實總體功能不難,不過我的感受能接管很多分散的服務和腳本,也使得趨於統一化。 不過弊端也有,說實話當前的功能還比較單一,後續拓展有,可是尚未想好,因此對於單一的功能平臺化,就是有點太捲了。