跳到主要内容

Infra:监控、缓存与外部存储

服务器监控配置与时序数据​

核验日期:2026-09-18。证据级别:当前源码静态核验 + 测试环境统一只读元数据采集。

物理类型、可空性、默认值、完整索引及约束见 MySQL 实测字典 与 TDengine 实测字典;源码与实库差异见 infra 总览。

MySQL infra_server_monitor_config 保存服务器配置,TDengine server_monitor 保存监控序列;两者按服务器 name 逻辑连接,不能跨引擎建立数据库外键。

返回 infra 总览。以下列名为 MyBatis 映射或显式 SQL 预期,类型栏是 Java 类型,不推断数据库长度、默认值及可空性;所有 BaseDO 子类均包含总览所列五个继承字段。

业务流程与读写职责​

运维人员维护服务器 name、宝塔/Nginx 接口和默认磁盘网卡;Job 设计链路为取启用配置、按时间窗口锁定、拉指标、写 TDengine。管理端先用 name 查 MySQL 配置,再到对应子表取最新/历史指标,转换 JSON 详情和 MB 单位形成展示。name 是跨库稳定标识,alias_name 只负责展示;default_disk/default_network 选择默认展示对象,不产生新的指标表。当前调度运行与写入成功仍未验证。

关系与存储规则​

  • ik_project/yudao-cloud/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/tdengine/ServerMonitorDataMapper.java:20 明确 @DS("tdServerMonitor"),查询以服务器名称作为子表名。
  • ik_project/yudao-cloud/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/servermonitor/InfraServerMonitorConfigServiceImpl.java:64 创建时校验 name 以字母开头且仅含字母、数字、下划线;更新时禁止修改 name。查询字段由白名单控制,SqlProvider:33 实际将驼峰转 snake_case。
  • server_monitor 由 DO 注释声明为超级表,serverName/server_name 声明为 TAG;tbname 是子表定位信息,getTbname() 返回 serverName,不列为普通数据列。无 BaseDO 审计列。
  • DO 未标注专用 TAG 注解或 @TableField(exist=false) 排除 tbname。Job:97 调普通 BaseMapper.insert,当前模块未找到显式 CREATE STABLE / USING TAGS SQL,因此静态模型不能证明自动建子表或正确写入。
  • Job:64 的 @Scheduled 已注释;注释所述“五秒采集”只能描述对齐意图,不能证明当前定时任务运行。锁键为时间窗口,见 Redis 页。
  • 内存字段源码单位 MB,响应转换为 KB;网络流量单位 KB。network_detail/disk_detail/iostat_detail 是 JSON 文本;memPercent、diskUsedPercent 等响应计算值不是 DO 持久化字段。

infra_server_monitor_config​

源码:ik_project/yudao-cloud/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/servermonitor/InfraServerMonitorConfigDO.java:28。

继承:BaseDO(五个审计/软删除字段见下表末尾)。主键候选为 id(实体主键注解或 MyBatis 约定);二级索引、唯一性和物理外键以实际结构核对,不由字段名推定。

预期列名Java 属性 / 类型业务含义与映射源码行
idid: Long配置编号28
namename: String服务器名称(唯一标识,不可修改)32
alias_namealiasName: String别名36
default_diskdefaultDisk: String列表/详情默认展示的磁盘设备名(如 sda)40
default_disk_partitiondefaultDiskPartition: String列表/详情默认展示的磁盘分区(如 /)44
default_networkdefaultNetwork: String列表/详情默认展示的网卡(如 ens3)48
bt_panel_urlbtPanelUrl: String宝塔面板基础地址(如 https://ip:port)52
bt_keybtKey: String宝塔面板API密钥56
nginx_urlnginxUrl: StringNginx状态监控地址(为空则不监控Nginx)60
enableenable: Integer是否开启监控:0-关闭 1-开启64
remarkremark: String备注68
create_timecreateTime: LocalDateTime创建时间,INSERT 自动填充BaseDO:30
update_timeupdateTime: LocalDateTime修改时间,INSERT_UPDATE 自动填充BaseDO:35
creatorcreator: String创建者标识,VARCHAR 映射BaseDO:42
updaterupdater: String更新者标识,VARCHAR 映射BaseDO:49
deleteddeleted: Boolean逻辑删除字段BaseDO:54

server_monitor​

源码:ik_project/yudao-cloud/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/servermonitor/ServerMonitorDataDO.java:34。

继承:无 BaseDO 继承。server_name 经实测确认为标签,ts 为时序时间戳;完整物理定义见 TDengine 实测字典。

预期列名Java 属性 / 类型业务含义与映射源码行
tsts: Timestamp时间戳34
server_nameserverName: String服务器名称(TAG,对应 config 表 name 字段,即子表名)41
load_oneloadOne: Double1分钟负载57
load_fiveloadFive: Double5分钟负载61
load_fifteenloadFifteen: Double15分钟负载65
load_maxloadMax: Integer最大负载阈值69
load_limitloadLimit: Integer负载限制73
load_safeloadSafe: Double安全负载值77
cpu_percentcpuPercent: DoubleCPU使用率(%)84
cpu_corescpuCores: IntegerCPU核心数88
cpu_modelcpuModel: StringCPU型号92
cpu_usercpuUser: DoubleCPU用户态使用率(%)96
cpu_nicecpuNice: DoubleCPU nice值(%)100
cpu_systemcpuSystem: DoubleCPU系统态使用率(%)104
cpu_idlecpuIdle: DoubleCPU空闲率(%)108
cpu_iowaitcpuIowait: DoubleCPU IO等待率(%)112
cpu_irqcpuIrq: DoubleCPU硬中断率(%)116
cpu_softirqcpuSoftirq: DoubleCPU软中断率(%)120
cpu_stealcpuSteal: DoubleCPU steal率(%)124
process_totalprocessTotal: Integer总进程数131
process_activeprocessActive: Integer活跃进程数135
mem_totalmemTotal: Long总内存(MB)142
mem_freememFree: Long空闲内存(MB)146
mem_buffersmemBuffers: Long缓冲区内存(MB)150
mem_cachedmemCached: Long缓存内存(MB)154
mem_availablememAvailable: Long可用内存(MB)158
mem_sharedmemShared: Long共享内存(MB)162
mem_real_usedmemRealUsed: Long实际使用内存(MB)166
net_up_totalnetUpTotal: Long上行累计流量(KB)173
net_down_totalnetDownTotal: Long下行累计流量(KB)177
net_up_packetsnetUpPackets: Long上行累计包数181
net_down_packetsnetDownPackets: Long下行累计包数185
network_detailnetworkDetail: String网络各网卡详情(JSON)192
disk_detaildiskDetail: String磁盘分区详情(JSON)196
iostat_detailiostatDetail: String磁盘IO详情(JSON)200
system_ossystemOs: String操作系统207
uptimeuptime: String运行时间211
bt_versionbtVersion: String宝塔版本215
site_totalsiteTotal: Integer网站总数219
ftp_totalftpTotal: IntegerFTP总数223
database_totaldatabaseTotal: Integer数据库总数227
nginx_activenginxActive: IntegerNginx活跃连接数234
nginx_acceptsnginxAccepts: LongNginx累计接受连接数238
nginx_handlednginxHandled: LongNginx累计处理连接数242
nginx_requestsnginxRequests: LongNginx累计请求数246
nginx_readingnginxReading: IntegerNginx正在读取数250
nginx_writingnginxWriting: IntegerNginx正在写入数254
nginx_waitingnginxWaiting: IntegerNginx等待数258

本次实测对照​

  • infra_server_monitor_config:17 列,源码字段全部存在;额外物理列 tenant_id。索引:PRIMARY(id) 唯一;uk_name(name) 唯一。物理外键:本次元数据未返回。
  • server_monitor:实测 47 个普通列 + 1 个 TAG(server_name),8 张子表,无普通表。全部源码指标与物理列一致;tbname 为子表定位信息,未作为普通列出现。TDengine 版本 3.3.8.4;未执行采集 Job 验证写入。

infra_server_monitor_config.name 有实测 uk_name 唯一索引,实际列长度为 varchar(63),TDengine server_name TAG 长度也为 63;两端结构长度一致。源码限制名称使用 ASCII 字母、数字、下划线。

infra Redis 与外部存储边界​

MySQL 保存可管理的配置和文件元数据,Redis 服务于快速读取与采集去重,SLS 和文件客户端连接外部存储。以下为 2026-09-18 源码静态核验,未读取 Redis 键、SLS 日志或文件字节。

返回 infra 总览。

Redis 键与读写方​

键或模式结构业务用途和生命周期源码
file:infoHash;field=file ID 字符串,value=FileRespDTOFileRedisDAO.set/get 缓存文件信息;删除和恢复文件时清理对应 field;不是文件内容存储ik_project/yudao-cloud/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/util/FileRedisDAO.java:16
config:infoHash;field=configKey,value=配置值ConfigRedisDAO.set/get 按配置键缓存,remove 删除单 field,供跨服务配置读取ik_project/yudao-cloud/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/util/ConfigRedisDAO.java:15
lock:server:monitor:{alignedTs}String;值 1SETNX + 10 秒过期争取同一五秒窗口的采集权;依靠过期释放ik_project/yudao-cloud/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/job/ServerMonitorJob.java:39

RedisKeyConstants:11/12 定义前两项原始键名;共享客户端是否加环境前缀由配置决定,本页不声称是线上完整键名。两个 Hash 的 hSetRandomExpire 调共享 RedisClient:964,过期针对整个 Hash,非 field。RedisClient:436 优先读取现有 TTL,否则从配置区间取值;不可据方法名写死固定 TTL。证据路径为 ik_project/yudao-cloud/yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/utils/RedisClient.java:436。

本地 infra_config_info、FileConfigService 使用 LOCAL_CACHE_MANAGER_NAME 的缓存,以及 Guava LoadingCache 不属于 Redis 物理键。RedisController:34 调 INFO、DBSIZE 监控 Redis,不定义新业务表。

文件内容与外部存储​

FileService 依据 FileConfigDO.storage 和 config 构造客户端,上传成功后建立 infra_file 元数据。DBFileClient 才把字节保存至 infra_file_content;S3、FTP、SFTP、Local 模式的文件本体在外部存储。文件下载 URL、CDN URL、真实重定向 URL 有不同用途,URL 不是数据库外键,也不能证明对象存在。

配置 JSON 可能含连接凭据,本文只说明类型和用途;本轮只采集表结构,不读取配置记录、外部对象列表或文件内容。文件写入、正式元数据、分片任务和下载记录的完整关系见 文件业务域。

SLS 外部日志查询​

管理端 SlsLogController → SlsLogServiceImpl 从配置 project、logStore、topic 取目标,调用 GetHistograms 和 GetLogs 完成数量与分页查询。证据:ik_project/yudao-cloud/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/sls/SlsLogServiceImpl.java:76、该文件 91 和 228 行。

SLS 与 MySQL API 访问/异常日志是不同存储,结果不落为 infra ES 索引;当前该查询路径没有建 Logstore、管理索引或写日志的代码。本轮未连接 SLS,未核验索引字段和保留期,不能以响应 VO 反推出云端实际结构。

用户文档
AI 助手
Agent 列表
请选择一个 Agent 开始对话
AI 问答