业务组
On this page
夜莺中要管理很多东西,比如:告警规则、屏蔽规则、订阅规则、自愈脚本、仪表盘,在创建这些东西的时候,都要先选择一个业务组,因为这些东西都要归属到某个业务组。还有机器也是,安装了 categraf 之后,categraf 就会自动向夜莺注册机器信息,此时这个机器会出现在未归组机器列表种,管理员需要把这个机器归到某个业务组下,业务组的人才能使用。
业务组在夜莺中使用频繁,本篇讲解夜莺监控中的业务组的概念,以及相关的设计初衷。
需求来源
夜莺中要管理很多东西,比如:告警规则、屏蔽规则、订阅规则、自愈脚本、机器等。如果各个东西都放在一个表格里让大家查看、管理,那就比较混乱了,需要有个机制来分门别类。
于是,我们引入了“业务组”的概念。业务组就是一个分组机制,比如 DBA 把 MySQL 的告警规则放到一个业务组里(组名姑且叫 DBA/MySQL
),把 Postgres 的告警规则放到另一个业务组里(组名姑且叫 DBA/Postgres
);比如 Kubernetes 运维人员,按照集群对 Kubernetes 的宿主机做了拆分,不同的集群的机器放到不同的业务组下,比如分成 K8S/集群A
、K8S/集群B
等等。
演进
早期版本的夜莺,业务组渲染为扁平的列表,后来发现,其实业务组需要层级结构,比如上面的四个业务组:
DBA/MySQL
DBA/Postgres
K8S/集群A
K8S/集群B
渲染为树形结构的话就更方便查看:
DBA
├── MySQL
└── Postgres
K8S
├── 集群A
└── 集群B
所以新版本的夜莺,为了兼容老版本,业务组存储到 DB 的时候,仍然是扁平的列表,但在前端展示的时候,可以根据名称里的分隔符渲染为树形结构。比如上面的例子,名称里的分隔符是 /
,当然你也可以使用其他分隔符,比如 -
、_
等等。在夜莺的菜单 系统配置-站点设置
里,可以设置业务组展示模式和分隔符。
🟢 推荐使用
/
作为分隔符。
问题
在夜莺里,业务组是全局共享的,既可以把规则挂到业务组上,也可以把机器挂到业务组上,这有个好处,就是方便复用业务组,即业务组创建一次之后,在多个地方都可以使用。
但是这样做也有一个问题,那就是不同的东西,其分组的颗粒度是不同的。比如我们对机器分组的话,可能会分的比较细,比如:
DBA/MySQL/Proxy/RegionA
DBA/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,可以新增业务组。