夜鶯監控中的業務組概念和設計初衷
夜鶯中要管理很多東西,比如:告警規則、抑制規則、訂閱規則、自癒指令稿、儀表板,在建立這些東西的時候,都要先選擇一個業務組,因為這些東西都要歸屬到某個業務組。還有機器也是,安裝了 categraf 之後,categraf 就會自動向夜鶯註冊機器資訊,此時這個機器會出現在未歸組機器列表種,管理員需要把這個機器歸到某個業務組下,業務組的人才能使用。
業務組在夜鶯中使用頻繁,本篇講解夜鶯監控中的業務組的概念,以及相關的設計初衷。
需求來源
夜鶯中要管理很多東西,比如:告警規則、抑制規則、訂閱規則、自癒指令稿、機器等。如果各個東西都放在一個表格裡讓大家查看、管理,那就比較混亂了,需要有個機制來分門別類。
於是,我們引入了「業務組」的概念。業務組就是一個分組機制,比如 DBA 把 MySQL 的告警規則放到一個業務組裡(組名姑且叫 DBA/MySQL),把 Postgres 的告警規則放到另一個業務組裡(組名姑且叫 DBA/Postgres);比如 Kubernetes 維運人員,按照叢集對 Kubernetes 的宿主機做了拆分,不同的叢集的機器放到不同的業務組下,比如分成 K8S/叢集A、K8S/叢集B 等等。
演進
早期版本的夜鶯,業務組渲染為扁平的列表,後來發現,其實業務組需要層級結構,比如上面的四個業務組:
DBA/MySQLDBA/PostgresK8S/叢集AK8S/叢集B
渲染為樹形結構的話就更方便查看:
DBA
├── MySQL
└── Postgres
K8S
├── 叢集A
└── 叢集B
所以新版本的夜鶯,為了相容老版本,業務組儲存到 DB 的時候,仍然是扁平的列表,但在前端展示的時候,可以根據名稱裡的分隔符渲染為樹形結構。比如上面的例子,名稱裡的分隔符是 /,當然你也可以使用其他分隔符,比如 -、_ 等等。在夜鶯的選單 系統設定-站點設定 裡,可以設定業務組展示模式和分隔符。
🟢 推薦使用
/作為分隔符。
問題
在夜鶯裡,業務組是全域共享的,既可以把規則掛到業務組上,也可以把機器掛到業務組上,這有個好處,就是方便複用業務組,即業務組建立一次之後,在多個地方都可以使用。
但是這樣做也有一個問題,那就是不同的東西,其分組的顆粒度是不同的。比如我們對機器分組的話,可能會分的比較細,比如:
DBA/MySQL/Proxy/RegionADBA/MySQL/Proxy/RegionB
但當我們對告警規則、儀表板這些東西分組的時候,可能就不會分的那麼細了,比如 DBA 所有的儀表板,可能全部放在 DBA 下面就好了。
這個問題目前不好解決,除非業務組不搞成全域複用的,機器有機器的分組,告警規則有告警規則的分組,儀表板有儀表板的分組,這樣就會導致有些業務組要重複建立,在機器那建立完了還要在告警規則那再建立一次。魚與熊掌不可兼得。
劃分業務組的最佳實踐
雖然業務組既可以用於各類規則的分類,也可以用於機器的分組,但是顆粒度不同,通常機器的分組顆粒度更細,而規則的分組顆粒度較粗。通常,先按照機器分組來規劃業務組,然後各類規則、儀表板等掛到中間層級的業務組上就差不多了。下面咱們先說機器的分組。
不知道讀者是否聽過「服務樹」這個概念,業務組的劃分和「服務樹」是類似的,通常來講,頂層是對組織結構的建模,即頂層節點是部門、業務、團隊之類的這種資訊,比如:
基礎架構/維運/容器雲是維運團隊裡的容器雲團隊基礎架構/維運/資料庫是維運團隊裡的資料庫維運團隊XBU/業務1/產品1是某個 BU 下面的業務1下面的產品1團隊XBU/業務1/產品2是某個 BU 下面的業務1下面的產品2團隊
如果公司的組織架構比較扁平,這個資訊的層級會少一些,如果公司組織架構的層級比較多,可以多加幾層。
頂層是對組織結構的建模,中層是對系統服務建模,通常中層分兩層,系統-模組,比如 Kubernetes 是一個系統,裡邊的 apiserver、etcd、scheduler 等是不同的模組。
最後說業務組的底層,底層通常是按照叢集劃分,比如量確實很大,叢集上面還可以引入地域的概念,如果量沒那麼大,只需要按叢集劃分即可,如果只有一個叢集,取消底層叢集節點都是可以的。
於是,最終容器雲平台的業務組可能是這麼劃分的:
基礎架構/維運/容器雲/KubeUI/Webapi/華南叢集基礎架構/維運/容器雲/KubeUI/Webapi/華北叢集基礎架構/維運/容器雲/KubeUI/Report/華南叢集基礎架構/維運/容器雲/KubeUI/Report/華北叢集基礎架構/維運/容器雲/Kubernetes/etcd/華南叢集基礎架構/維運/容器雲/Kubernetes/etcd/華北叢集基礎架構/維運/容器雲/Kubernetes/apiserver/華南叢集基礎架構/維運/容器雲/Kubernetes/apiserver/華北叢集基礎架構/維運/容器雲/Kubernetes/scheduler/華南叢集基礎架構/維運/容器雲/Kubernetes/scheduler/華北叢集基礎架構/維運/容器雲/Kubernetes/node/華南叢集基礎架構/維運/容器雲/Kubernetes/node/華北叢集
業務組按照機器的顆粒度劃分完了之後,規則之類的應該掛在上層,比如 Webapi 的告警規則,可以專門建立一個 基礎架構/維運/容器雲/KubeUI/Webapi-Rules 的業務組,然後把 Webapi 的告警規則掛到這個業務組上。
如果 Webapi 和 Report 的告警規則都很少,直接一併建立一個 基礎架構/維運/容器雲/KubeUI-Rules 的業務組,把 Webapi 和 Report 的告警規則都掛到這個業務組上,也是可以的。
儀表板通常更少,直接建立一個 基礎架構/維運/容器雲-Dashboards 的業務組,容器雲團隊所有的儀表板都掛到這個業務組上,就可以了。
當然,上面的劃分邏輯只是一個思路參考,無法適合所有公司,比如有些企業主要用夜鶯監控一堆裝置(分散在不同地域、工廠),不是服務,那在業務組劃分的時候,可以考慮按照地域、工廠等維度進行劃分。
FAQ
找不到業務組操作入口
Question:V8 新版本,在人員組織下面怎麼找不到業務組的選單了,那如何對業務組增刪改查?
Answer:業務組出現在很多個功能選單下面,比如告警規則、抑制規則、儀表板、自癒指令稿等,可以直接在這些地方對業務組進行增刪改查,不需要到一個單獨的業務組選單去操作了。滑鼠挪到業務組上,會自動出現編輯 icon,點擊編輯 icon 可以對業務組進行編輯、刪除,業務組上面有個小加號的 icon,可以新增業務組。
常見問題
Q1:業務組怎麼命名?
A:建議 <業務>-<環境> 風格(如 pay-prod、pay-test、risk-prod),看到名字立刻知道是哪個團隊的哪個環境。別全用中文 — API 呼叫不友善。
Q2:業務組拆得太細 / 太粗的問題?
A:
- 太細(幾十上百個):UI 卡頓、管理負擔大;
- 太粗:權限隔離不夠,所有人能看所有資源。
- 推薦:按「團隊 + 環境」維度拆分,單個元件少的可以一個業務組裡多個元件。