Skip to content

6.17 服务器监控 ​

概述

服务器监控是无表模块:单接口聚合返回运行时、内存、磁盘、数据库连通、缓存模式与调度器健康。磁盘读取按平台分文件实现(windows/other build tags)。路由 GET /api/server/info(登录即可)。

接口 ​

text
GET /api/server/info   登录即可,log "服务器监控-查询信息"
权限:无 permission 节点(登录即可)

返回结构(ServerInfoRes) ​

text
Server      hostname / goVersion / arch / numCPU / goroutines / uptime
            (procStart 为包加载时刻)
Mem         allocMB / totalAllocMB / sysMB / heapAllocMB / heapSysMB /
            heapObjects / gccycles(runtime.ReadMemStats,MB 保留两位小数)
Disk        平台分支实现:
            windows(//go:build windows):GetDiskFreeSpaceEx 读工作目录所在盘符
                      (wd[:3] 如 "E:\"),返回 totalGB/freeGB/usedPercent
            other(!windows):syscall.Statfs
Db          SELECT VERSION() 计时(pingMs)+ 版本号;
            数据库不通不视为整体失败(版本留空,err 置 nil 返回)
Cache       cache.UsingMemory() → {mode:"memory", connected:false}
            否则 Redis PING → {mode:"redis", connected:true/false}
Scheduler   调度器健康:统计 gcron 中 "job:" 前缀条目数(mounted)与
            goframe_job status=1 计数(expected);enabled=DaemonInit 已执行;
            healthy = mounted >= expected(挂载失败或数据被外部改动会出现差值)

平台分支实现(文件组织示例) ​

text
internal/logic/server_monitor.go            公共组装
internal/logic/server_monitor_windows.go    //go:build windows —— GetDiskFreeSpaceEx
internal/logic/server_monitor_other.go      //go:build !windows —— syscall.Statfs

Go build tags 实现"同函数名、按平台选实现"——编译期裁剪,零运行时分支

调度器健康判定(运维关键) ​

text
mounted  = gcron 中 "job:" 前缀条目数(实际挂载)
expected = goframe_job status=1 计数(应该挂载)
healthy  = mounted >= expected

差值排查:
  mounted < expected   部分任务挂载失败(cron 表达式无效?)
                       或任务数据被外部改动(直接改库没走 API)
  mounted > expected   摘除遗漏(API 路径应先摘除再处理)
注意口径:daemonStatus.running 是 gcron 全部条目数(含 CleanTemp 等非任务条目),
         Scheduler.mounted 只统计 "job:" 前缀——两处口径不同

运维用法 ​

text
日常巡检:GET /api/server/info 一眼看全(CPU 核数/内存/磁盘余量/DB/缓存/调度)
磁盘告警阈值:usedPercent > 85% 关注
内存观察:heapObjects 持续增长 + gccycles 低 → 疑似泄漏
调度异常:healthy=false → 逐条核对任务 cron 与 status

排障 ​

症状原因
Disk 数据异常windows 读的是工作目录所在盘符(wd[:3])——服务在哪个盘就读哪个盘
Db 版本为空数据库不通(不视为整体失败的设计);查 database 配置
Cache mode=memoryRedis 不可用已降级(限流/锁/黑名单退化单机语义)
Scheduler healthy=false见上方差值排查;对照 /api/job/daemonStatus
uptime 很长但内存高procStart 是包加载时刻——优雅重启才会重置

小蚂蚁云团队 · 提供技术支持