星尘节点管理用于管理维护各种客户端节点,其中典型的有星尘代理StarAgent和码神工具CrazyCoder。收集客户端节点的硬件信息和系统软件信息,监控性能以及执行特定操作。
在物联网领域,A2和A4工业计算机中安装StarAgent后,星尘节点管理摇身一变成为了网关设备管理平台。
星尘节点管理,离不开星尘代理的强力支持:[StarAgent]星尘代理
星尘平台的快速部署请参阅[Stardust]部署星尘服务端(StarServer&StarWeb)。
星尘平台的全貌总览请参阅星尘Stardust-分布式服务框架,节点管理只是其中一个子系统。
星尘节点管理所有页面由魔方Cube生成,如果在Model.xml中增加或修改字段(名字或注释),执行xcodetool.exe后,节点管理页面上自动改变。
基本信息
收集硬件和操作系统等基本信息。
企业领域,可管理服务器和办公电脑资产,某省所有机关单位数十万台电脑的资产管理系统,核心架构来自于此;
物联网领域,A2/A4工业计算机,大量客户直接使用星尘节点管理作为设备管理平台;
该模块足够强大,以至于IoT平台根本无需开发设备资产管理功能;
下图可以看到,平台所支持的操作系统种类很多,除了常见的Windows/Ubuntu/CentOS/Debian,还有树莓派、麒麟系统(飞腾)、Alpine、欧拉和SmartOS(新生命)等,这里仅出现一部分,还支持很多其它版本操作系统。资产的整体情况一目了然。
点开节点名称,可打开该节点的详情页。头部出现节点导航条,方便在不同功能模块之间切换。
详情页首先看到的是名称和节点唯一编码,以及StarAgent接入平台的密钥。版本也很重要,可用于判断是否需要升级。省份与城市,来自于IP地址识别。
(注:表单控件后面的文字,来自Model.xml模型中字段注释,可直接修改,下文同此)
系统信息页展示操作系统名称和版本,以及dotNet运行时相关信息。平台能够配置策略,根据节点架构和所安装的运行时版本,决定下发不同的应用更新包,也可以下发安装新的dotNet运行时,后续框架版本章节会有详细介绍。系统架构支持X86/X64/Arm/Arm64/Mips64/LoongArch64,系统种类在Windows上有详尽细分,支持WinXP/WinXP3以来的所有知名版本。
硬件信息页展示CPU、内存和硬盘信息。节点系统可能具有多个磁盘分区,在驱动器信息处列出所有分区类型、已用大小和总大小。
下方五大硬件标识是很多应用软件唯一识别终端硬件的关键,星尘在此独创了辨识度算法。
参数设置主要配置节点性能采样周期,默认每分钟上报一次。指定新服务器后,该节点将会自动切换到新的星尘平台。最后版本记录最后一次匹配到的节点版本,如果再次匹配将会跳过,避免代码BUG导致无限升级。
节点可以配置各种告警,重点是CPU、内存和磁盘。部分应用对连接数特别敏感,也可以做告警。针对本节点部分特殊进程,可以使用进程告警,如果StarAgent发现目标进程消失,将会发出告警。
所有告警都将通过告警机器人发出,该配置将来可能移除,统一由节点所属项目来配置告警机器人。
下线告警由服务端判断,长时间未取得StarAgent心跳时,发出告警。
登录信息页展示登录相关的信息,记录最后活跃以及在线时长。
节点历史
上线、下线、应用部署信息以及异常信息。平台端只记录节点上下线等简单信息,其它数据大部分来自客户端(如StarAgent)上报的各种事件。其中最多的数据就是StarAgent管理本地应用时的详细事件。使用节点历史,几乎可以不用登录节点所在机器查看StarAgent日志。
在线监控
CPU、内存、硬盘、连接数、进程、下线等告警。节点客户端(如StarAgent)每分钟向星尘平台发送一次心跳,其中带有各种监控指标,平台把监控指标记录下来,并更新在线记录表。
主动关闭。主动关闭后TimeWait的Tcp网络连接数,等待2MSL,确保四次挥手的最后一个ACK能够发出,下一步Closed。
被动关闭。作为客户端,收到服务器FIN后进入CloseWait的Tcp网络连接数,还没发送自己的FIN,主要原因是我方太忙。
节点命令
实时下发指令,为其它模块(如发布)提供链路支持。
节点命令由命令名和参数组成,此外还可以指定过期时间和未来执行时间。命令初始状态为就绪,借助WebSocket或心跳响应下发给客户端节点后,命令状态改变为处理中,最后由客户端上报执行结果,已完成或错误。如果客户端收到命令时,已经超过了过期时间,状态修改为已取消。处理中的命令,如果长时间没有返回结果,平台会再次下发,最大重发次数为10次。
节点在线页最为特别的地方在于有几个指令按钮,每一个都是通过WebSocket向几点即时下发指令,ws不可用时降级为心跳响应。
- 检查更新。通知节点马上检查一次版本更新,无需等10分钟定时周期。StarAgent和CrazyCoder支持。
- 重启服务。通知节点马上重启StarAgent服务。
- 重启系统。通知节点马上重启操作系统,StarAgent特有,一般用于IoT边缘网关等设备。
- 自定义命令。自定义命令名和参数,下发指令。
注:务必管控好“重启系统”功能的权限。有一次生产检测A2工业计算机的流程中,本应该选中一台A2设备进行重启,但由于账号权限配置错误,加上操作错误,妹子全选了所有节点执行重启,导致全球不同地区的NewLife服务器集体重启!o(╥﹏╥)o
应用在线
记录在该节点上运行且已接入星尘的应用系统。接入星尘的应用系统,每分钟向平台发送一次应用心跳App/Ping,其中带有节点编码NodeCode,平台因此得知该应用实例所在节点。
类似节点命令下发,应用实例也有命令下发通道,支持用户做一些自定义功能。例如:在自动浇花应用中,本身只是一个小型应用,不想做服务端,接入星尘后注册了test命令,星尘应用在线下发test命令后,应用马上执行浇水动作。
应用发布
管理发布到该节点的所有应用部署集,在此可以执行发布、启动、停止、重启和卸载等操作。
框架版本
升级星尘代理StarAgent,升级客户端dotNet运行时。
如下图,在节点版本里配置策略,并上传StarAgent的zip压缩包,在节点检查更新时取得匹配信息,即可实现自动更新。
产品名指定节点类型,如StarAgent/CrazyCoder。升级通道默认Release,开发测试需要可修改为Beta。
策略配置支持多条件,分号隔开,具体规则:
- node。指定要升级的节点编码,支持*通配符,多个编码逗号隔开;
- version。跟节点版本进行比较(支持=和>=以及<=三种),转为Version比较,而非字符串比较;
- category。节点分类,支持*通配符;
- runtime。节点当前运行时,支持*通配符;
- framework。节点框架(多个)相等比较,支持*通配符。同时支持最高版本框架的>=和<=比较;
- os。节点操作系统名,支持*通配符;
- oskind。节点操作系统类型,按照OSKinds枚举进行相等比较;
- arch。节点架构,常见x86/x64/arm/arm64/mips等,支持*通配符;
- province。节点所在省份,默认来自IP地址解析;
- city。节点所在城市,默认来自IP地址解析;
同时,节点版本还支持配置自动安装dotNet运行时的策略,规则同上。
版本号格式固定,指定版本v8.0.3,功能负载是aspnet,此外还有desktop和host。
自动安装dotNet运行时的策略,产品名恒定为dotnet,升级源设置为运行时下载目录。
某台A2自动安装net8运行时的节点历史如下:
(注:自动安装dotNet功能持续更新,支持新版net运行时,以及增加兼容新的操作系统,建议升级到2024.02以后的版本)
节点统计
多维度统计节点占比以及活跃度。共有版本、操作系统、芯片架构、运行时、最高框架、产品、制造商、项目、城市等维度。
版本维度如下,最活跃的是v2.9.2024.0125,这里包括所有节点版本,而不仅仅是StarAgent。总数来看,码神工具CrazyCoder毫无疑问更多。
操作系统维度如下,开发者机器还是Win10/Win11为主。
运行时维度,net8/net7为大,同样net4.x也很多,主要是旧版CrazyCoder。
最高框架维度,net8占据了绝大部分份额。
Redis监控
收集版本、容量、集群模式等基本信息。该功能由服务端直接连接Redis进行探测。
性能监控
Redis内存、速度、连接数、出入流量等告警。
Redis节点指定机器人和告警参数后,将能够自动告警。
消息队列
自动扫描识别Redis队列,采集消息数和积压数告警。
我们大力推荐RedisQueue/RedisStream等消息队列,星尘的Redis监控模块,很好弥补了Redis队列监控上的不足,并实现队列积压告警。
如下图,来自FIoT平台,这是IoT平台内部设备采集数据流转的核心队列,基于STREAM结构。消费组那里列出了所有正在消费该队列的消费组(6个),共有21个消费者,即部分消费组有多个消费者线程。队列总消息数100万,这是RedisStream默认保留的消息数,大概占用内存200M。
这6个消费组里面,积压最多的一个,已经积压39.75万消息。如果配置了最大积压字段,以及后面的告警机器人,那么星尘监控将发出告警。
总结
星尘节点管理,定位于管理分布式环境中的各种资源。除了Redis节点监控的持续优化,将来还会以插件形式增加MySql节点监控、RocketMQ节点监控和MQTT节点监控。