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

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

本系列其他文章:

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

前言

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

  • 机器上面的服务有时会混部,导致机器和业务程序之间的对应关系不好搞(这就是对待机器不能像对待 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 的采集规则中心化管理和下发
  • 专门的网络设备管理里需要采集器探针的管理,会和机器管理有联动
相关推荐
许彰午17 小时前
CacheSQL:一个面向政务系统的内存缓存数据库中间件
java·数据库·缓存·中间件·面试·开源软件·政务
ClkLog-开源埋点用户分析1 天前
在信创环境下,如何判断一套用户行为分析系统是否“真正可用”?
数据分析·开源·开源软件·用户画像·埋点系统
CoderIsArt1 天前
类comsol的开源软件
开源软件
Alex艾力的IT数字空间2 天前
大模型的“Think 模式”(思考模式)关闭的配置方式
人工智能·机器人·web3·github·开源软件·量子计算·开源协议
好运的阿财3 天前
OpenClaw工具拆解之browser+agents_list
前端·人工智能·机器学习·开源软件·ai编程·openclaw·openclaw工具
Teable任意门互动5 天前
多维表格哪家最好用最容易上手?国产开源 Teable 测评
开发语言·数据库·开源·excel·飞书·开源软件
__土块__5 天前
知识库上线后检索静默失效:一次从监控盲区到分层治理的RAG故障复盘
可观测性·系统稳定性·故障排查·监控告警·生产故障·rag系统·检索质量
观测云6 天前
观测云产品更新 | 统一目录、Obsy AI、错误中心、场景、基础设施等
人工智能·可观测性·产品迭代·观测云
Days20506 天前
免费短视频去水印解析下载移动端
人工智能·开源软件
__土块__7 天前
AI 会话记忆模块静默失效:一次从链路耦合到分层治理的工程复盘
可观测性·系统稳定性·生产故障·ai工程·会话记忆·故障复盘·后台设计