业务组

夜莺中要管理很多东西,比如:告警规则、屏蔽规则、订阅规则、自愈脚本、仪表盘,在创建这些东西的时候,都要先选择一个业务组,因为这些东西都要归属到某个业务组。还有机器也是,安装了 categraf 之后,categraf 就会自动向夜莺注册机器信息,此时这个机器会出现在未归组机器列表种,管理员需要把这个机器归到某个业务组下,业务组的人才能使用。

业务组在夜莺中使用频繁,本篇讲解夜莺监控中的业务组的概念,以及相关的设计初衷。

需求来源

夜莺中要管理很多东西,比如:告警规则、屏蔽规则、订阅规则、自愈脚本、机器等。如果各个东西都放在一个表格里让大家查看、管理,那就比较混乱了,需要有个机制来分门别类。

于是,我们引入了“业务组”的概念。业务组就是一个分组机制,比如 DBA 把 MySQL 的告警规则放到一个业务组里(组名姑且叫 DBA/MySQL),把 Postgres 的告警规则放到另一个业务组里(组名姑且叫 DBA/Postgres);比如 Kubernetes 运维人员,按照集群对 Kubernetes 的宿主机做了拆分,不同的集群的机器放到不同的业务组下,比如分成 K8S/集群AK8S/集群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,可以新增业务组。

🎯 由于读者水平参差不齐,重口难调,社区小伙伴一直在持续更新优化文档内容,如果您觉得本页文档内容有误或不够完善,欢迎您参与到文档的编写中来,点击下方的 Edit this page on GitHub 即可编辑 👇