首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【分布式节点监控系统的设计】

【分布式节点监控系统的设计】

作者头像
贺公子之数据科学与艺术
发布于 2025-12-18 09:27:02
发布于 2025-12-18 09:27:02
2690
举报
节点信息采集

Agent负责采集各类节点的健康数据,每3秒主动访问一次。根据采集的数据和预设规则,节点的健康状态分为错误、警告和正常三种,对应Dashboard中的红、黄、绿三种颜色。

Redis节点监控 通过Jredis API连接Redis实例并进行简单读写测试。操作成功则状态正常,失败则为错误。

MQ节点监控 使用MQ API检测是否有活跃消费者及队列积压消息数量。无活跃消费者或积压消息超过阈值则为错误。

数据库节点监控 通过JDBC连接数据库并执行简单表操作。操作成功则状态正常,失败则为错误。 这三类节点仅支持正常和错误两种状态,无警告状态。

Web应用监控 采集功能与性能数据:

  • 最近3秒的接口调用次数
  • 接口平均响应时间
  • 接口出错次数
  • 节点健康状态及错误信息

示例请求与响应:

代码语言:javascript
复制
{
  "status": "warning",
  "avg_time": "583.0",
  "call_count": "10",
  "error_count": "0",
  "error_info": "orderListGet: current average time=583.0, total average time=109.84, 调用次数=10"
}

Agent独立部署,节点配置信息存储在数据库中,启动时从Monitor Service获取并定期刷新。

节点接入监控系统

Redis/MQ/DB节点 仅需提供配置信息,无需额外开发。

Web应用接入 需代码改造:

  1. 在接口中调用SDK的logHealthInfo方法记录调用耗时及错误信息:
代码语言:javascript
复制
try {
  result = service.invoke(request);
  HealthUtil.logHealthInfo("xxx_method", (System.currentTimeMillis() - start), null);
} catch (Exception e) {
  HealthUtil.logHealthInfo("xxx_method", (System.currentTimeMillis() - start), e.getMessage());
}
  1. 提供HTTP接口返回健康状态:
代码语言:javascript
复制
@RequestMapping(value = "/agent/check")
public String reportData() {
  return HealthUtil.healthCheck();
}

SDK内部逻辑

  • 使用HashMap存储接口调用数据(调用次数、出错次数、总耗时)。
  • 健康状态规则:
    • 错误次数:0次正常,1-5次警告,>5次错误。
    • 响应时间:>10倍正常值为错误,5-10倍为警告。
  • 正常响应时间通过历史总耗时/总调用次数动态计算。
  • 最终状态取所有接口中最差结果。
前端信息展示

Dashboard每3秒刷新,展示层级为:分组 → 应用 → 节点。

动态布局实现

  • 后台定义布局(类似HTML Table的TR/TD语法),存储于数据库。
  • 前端根据布局信息动态渲染,支持灵活调整。

示例布局:

  • "应用层"分组:1行1列(单应用)。
  • "依赖服务"分组:2行2列(多应用)。

大盘监控 支持全局视图展示所有系统节点状态,便于快速定位问题。

架构图

通过上述设计,系统实现了高效、灵活的节点监控与可视化展示。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 节点信息采集
  • 节点接入监控系统
  • 前端信息展示
  • 架构图
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档