Skip to content

Hardware Monitor

源码路径:modules/monitor/hardware/

概述

硬件监控模块包含四个 RecurrentRunner 子类,分别监控 GPS、ESD CAN、SocketCAN 和系统资源(磁盘/CPU/内存/磁盘负载)。所有监控器由 MonitorComponent 主循环定时调用。

核心类

类名文件职责
GpsMonitorgps_monitor.h/cc检查 GPS 设备状态
EsdCanMonitoresdcan_monitor.h/cc检查 ESD CAN 总线状态
SocketCanMonitorsocket_can_monitor.h/cc检查 SocketCAN 接口状态
ResourceMonitorresource_monitor.h/cc检查磁盘空间、CPU、内存、磁盘负载

所有类继承 RecurrentRunner,实现 RunOnce(current_time) 方法。

ResourceMonitor

cpp
class ResourceMonitor : public RecurrentRunner {
 public:
  ResourceMonitor();
  void RunOnce(const double current_time) override;
 private:
  static void UpdateStatus(const ResourceMonitorConfig& config,
                           ComponentStatus* status);
  static void CheckDiskSpace(const ResourceMonitorConfig& config,
                             ComponentStatus* status);
  static void CheckCPUUsage(const ResourceMonitorConfig& config,
                            ComponentStatus* status);
  static void CheckMemoryUsage(const ResourceMonitorConfig& config,
                               ComponentStatus* status);
  static void CheckDiskLoads(const ResourceMonitorConfig& config,
                             ComponentStatus* status);
};

核心函数

ResourceMonitor::RunOnce()

职责:遍历 HMI 模式中配置的所有 ResourceMonitorConfig,对每个组件执行资源检查

ResourceMonitor::CheckDiskSpace()

职责:检查配置路径的磁盘剩余空间,低于阈值时上报 WARN/ERROR

ResourceMonitor::CheckCPUUsage()

职责:通过读取 /proc/<pid>/stat 计算指定进程的 CPU 使用率,超阈值告警

ResourceMonitor::CheckMemoryUsage()

职责:通过读取 /proc/<pid>/status 中 VmRSS 计算内存使用率,超阈值告警

ResourceMonitor::CheckDiskLoads()

职责:通过 /proc/diskstats 计算磁盘 IO 负载,超阈值告警

配置

资源监控阈值通过 ResourceMonitorConfig protobuf 配置(在 HMI 模式文件中定义):

字段类型说明
disk_spacesrepeated磁盘路径及空间阈值
cpu_usagesrepeated进程 DAG 路径及 CPU 阈值
memory_usagesrepeated进程 DAG 路径及内存阈值
disk_load_usagesrepeated设备名及 IO 负载阈值

调用关系

  • 被调用方MonitorComponent 主循环通过 Tick() 调用各监控器
  • 依赖MonitorManager(获取配置和状态)、SummaryMonitor::EscalateStatus()(上报告警)
  • 数据源:Linux /proc 文件系统、boost::filesystem

贡献者

页面历史