夜莺监控设计思考(四)关于机器那些事儿

这将是一个系列,讲解 夜莺监控 的设计思考,可以理解为原理+最佳实践+产品设计时的折中取舍。

本系列其他文章:

本篇聊聊夜莺里跟机器相关的那些事,机器的数据采集、机器的归组打标签、机器的元信息、机器的告警分派等。

前言

机器这个概念,在监控系统里具有比较特殊的场景。核心是因为两个原因:

  • 机器上面的服务有时会混部,导致机器和业务程序之间的对应关系不好搞(这就是对待机器不能像对待 Pod 的原因)
  • 采集器 agent 通常部署在机器上,对于机器的管理也会影响采集器的管理(很多新的可观测性厂商在宣传的 Fleet 机制,就是侧重在采集层面,agent 最终要部署到机器上,所以机器和采集器有很多关联)

Zabbix、Open-Falcon 等,对机器概念都有额外的抽象建模,Prometheus 生态则完全忽略机器概念的特殊性,走向了另一个极端。

夜莺监控(Nightingale)则站在二者中间,既想遵从 Prometheus 生态的玩法,又想给机器场景做一些额外的支持,稍微有点拧巴。不过产品是为业务场景服务的,场景就在那里,不是说想砍就能砍掉的。

夜莺体系里,对机器的相关支持比较零散,本文也会显得有点凌乱,望诸位看官见谅。

机器分类管理

夜莺里有个告警自愈功能,可以去机器上执行脚本,所以需要非常小心设计机器的权限。最简单的是每个机器跟人、角色绑定,但是不方便管理,所以给机器设计了一个业务组的概念。机器可以归属业务组,业务组关联的管理人员,这些人员可以对机器做操作。

业务组可能会划分的很细,比如每个 Service 作为一个业务组,比如 DBA/MySQL/Proxy 是也一个业务组,DBA/MySQL/DataNode/Mall 是另一个业务组。而同一台机器可能部署多个 Service,所以,机器要支持同时挂在多个业务组。

Prometheus 生态里,监控指标的各类维度信息都是通过标签来描述的(业务组是没法直接作为标签的,因为 Prometheus 里的标签不允许同 Key 多 Value),那夜莺要支持给机器打标签(在机器列表页面进行操作),给机器打的标签,会自动附加到机器的监控指标上。

所以,夜莺里,机器的归组提供了两个机制:

  • 业务组,通常以 Service 颗粒度划分,跟权限相关
  • 标签:如果想把某些维度信息附加到监控指标上,那就把这些维度信息做成标签

当然,这一切的前提,是你要使用 Categraf 作为采集器,并且把 Categraf 的 heartbeat 和 writer 的 url 都指向夜莺。

如果你没有使用 Categraf 采集器,机器列表里就是空的,用不了机器的归组、打标签的能力。其实也不是啥大事,不用 Categraf 也不会影响你对时序库中的数据做告警、看图。只是,使用 Categraf 会让体验更丝滑,可以获得额外一些能力。

Categraf 部署到所有待监控的目标机器上,采集机器的元信息、基础监控指标、执行脚本做告警自愈。

机器信息上报

如果使用 Categraf 作为采集器,在夜莺的机器列表里就会自动出现机器列表:

如果发现内存、CPU、时间偏移等列是 unknown,可能的原因是:

  • 你没有使用 Categraf 采集器
  • Categraf 配置文件里的 heartbeat 没有开启,或没有指向夜莺

这个表格里,机器标识是可以点击的,点击机器标识,可以打开一个侧拉板,展示机器的元信息:

多说一句:有些人会问,机器列表里可以看到机器的 CPU、内存等信息,但是仪表盘是空的,为啥?可能的原因:

  • Categraf 配置文件里 writer 部分配置的不对,没有指向夜莺
  • 如果配置是对的,那就要看 Categraf 的日志找线索了

机器告警

使用了 Categraf 之后,除了可以看到机器列表、机器元信息、给机器分组、打标签之外,还可以对机器做特殊的告警规则配置。

告警规则里,有个专门的 Host 类型,提供三种机器相关的告警规则:机器失联、机器集群失联、机器时间偏移。

注意,机器时间偏移并非是机器和 NTP Server 之间的时间偏移,而是 Categraf 所在的机器和夜莺服务端的时间偏移,如果用了 n9e-edge 边缘模块,就是 Categraf 所在的机器和 n9e-edge 所在机器的时间偏移。

机器时间偏移这个规则较为常用,另一个常用的是机器失联。因为 Categraf + Nightingale 的监控数据流向是典型的 PUSH 模型,没有 Prometheus 中的 up 指标,所以需要额外的机制来判定机器是否失联。

Question:机器挂载了业务组,我想对某些业务组做告警判定,应该怎么配置?

这个问题也很常见。在夜莺的体系里,性能最好的方式是使用变量,配置方式如下:

上图中,创建了一个 ident 变量,变量类型是 机器标识,机器范围是 Default Busi GroupDevOps 两个业务组下的机器。然后在 promql 中引用了 ident 标签作为过滤条件。

当然,如果你的监控指标里有标签可以很方便做过滤,则直接使用标签也是 OK 的。

上例用的变量模式,还有另一个好处,是用于特殊机器的阈值配置,比如 Default Busi GroupDevOps 两个业务组下的机器默认 CPU 阈值都是 80,但是其中有1台机器很特殊,平时负载就很高,CPU 阈值要设置为 88,那就可以再加一个阈值变量,同时继续配置 变量筛选 条件:

这个配置方式稍微有点复杂,不过没办法,问题场景本身就是复杂的。

老版本没有 启用变量 这个配置,只有 仅在本业务组生效 的配置,那个方式性能不好。其原理是:

拿着告警规则里的 promql 去查询时序库里的所有满足条件的数据,可能查到很多机器都告警了,然后再根据机器的归属关系做过滤,只保留自己业务组下的机器的相关告警。

仪表盘只查看业务组下的机器

既然在夜莺里维护了机器和业务组的关系,那在仪表盘里查看机器的时候,能否只查看当前业务组下的机器呢?是可以的。

我们可以导入内置的机器相关仪表盘(在 Linux 类别下),打开 机器常用指标 那个仪表盘,默认是查看所有机器,因为 ident 变量配置是 label_values(system_uptime, ident),如下:

然后,我们修改一下 ident 变量,如下:

保存仪表盘然后刷新,就会看到机器的变量下拉框里,只有当前业务组下的机器,如果仪表盘所属的业务组下面没有机器,那就看不了数据了。

其他机器相关的功能

开源版本,跟机器相关的功能主要就是上面罗列的那些。商业版会有额外的功能,比如:

  • Categraf 的采集规则中心化管理和下发
  • 专门的网络设备管理里需要采集器探针的管理,会和机器管理有联动
相关推荐
liyi_hz200813 小时前
云原生 + 国产化适配:O2OA (翱途)开发平台后端技术栈深度解析
java·后端·开源软件
悟空CRM服务2 天前
我用一条命令部署了完整CRM系统!
java·人工智能·开源·开源软件
千桐科技5 天前
qKnow 知识平台开源版 v1.0.3 发布:Docker Compose 部署 & 多项稳定性优化和关键问题修复
知识图谱·开源软件·rag·大模型应用·qknow·知识平台·知识推理
悟空CRM服务6 天前
开源的力量:如何用开源技术构建高效IT架构?
java·人工智能·架构·开源·开源软件
计算机小手6 天前
快速搭建一个 GitHub 开源项目导航网站,提供便捷的信息抓取、智能摘要、分类管理功能
经验分享·docker·github·开源软件
kuankeTech7 天前
大豆进口管理新突破:外贸ERP软件全流程数字化解决方案
大数据·低代码·开源软件·软件开发·erp
liyi_hz200810 天前
O2OA(翱途)开发平台 v9.5 前端框架设计|开放 · 安全 · 可控 · 信创优选
java·前端框架·开源软件
Tigshop开源商城系统12 天前
Tigshop 开源商城系统 php v5.1.9.1版本正式发布
java·大数据·开源·php·开源软件
小白跃升坊12 天前
数据分析报表如何选?详解 DataEase 四大表格:明细表、汇总表、透视表与热力图的适用场景与选择策略
数据挖掘·数据分析·开源软件·数据可视化·dataease
天天开源13 天前
操作教程 | OpenHIS医院版:⑨住院开立医嘱
开源软件·智慧医院·医院his系统·医疗软件·医疗信息化