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 属性 / 类型 | 业务含义与映射 | 源码行 |
|---|---|---|---|
id | id: Long | 配置编号 | 28 |
name | name: String | 服务器名称(唯一标识,不可修改) | 32 |
alias_name | aliasName: String | 别名 | 36 |
default_disk | defaultDisk: String | 列表/详情默认展示的磁盘设备名(如 sda) | 40 |
default_disk_partition | defaultDiskPartition: String | 列表/详情默认展示的磁盘分区(如 /) | 44 |
default_network | defaultNetwork: String | 列表/详情默认展示的网卡(如 ens3) | 48 |
bt_panel_url | btPanelUrl: String | 宝塔面板基础地址(如 https://ip:port) | 52 |
bt_key | btKey: String | 宝塔面板API密钥 | 56 |
nginx_url | nginxUrl: String | Nginx状态监控地址(为空则不监控Nginx) | 60 |
enable | enable: Integer | 是否开启监控:0-关闭 1-开启 | 64 |
remark | remark: String | 备注 | 68 |
create_time | createTime: LocalDateTime | 创建时间,INSERT 自动填充 | BaseDO:30 |
update_time | updateTime: LocalDateTime | 修改时间,INSERT_UPDATE 自动填充 | BaseDO:35 |
creator | creator: String | 创建者标识,VARCHAR 映射 | BaseDO:42 |
updater | updater: String | 更新者标识,VARCHAR 映射 | BaseDO:49 |
deleted | deleted: 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 属性 / 类型 | 业务含义与映射 | 源码行 |
|---|---|---|---|
ts | ts: Timestamp | 时间戳 | 34 |
server_name | serverName: String | 服务器名称(TAG,对应 config 表 name 字段,即子表名) | 41 |
load_one | loadOne: Double | 1分钟负载 | 57 |
load_five | loadFive: Double | 5分钟负载 | 61 |
load_fifteen | loadFifteen: Double | 15分钟负载 | 65 |
load_max | loadMax: Integer | 最大负载阈值 | 69 |
load_limit | loadLimit: Integer | 负载限制 | 73 |
load_safe | loadSafe: Double | 安全负载值 | 77 |
cpu_percent | cpuPercent: Double | CPU使用率(%) | 84 |
cpu_cores | cpuCores: Integer | CPU核心数 | 88 |
cpu_model | cpuModel: String | CPU型号 | 92 |
cpu_user | cpuUser: Double | CPU用户态使用率(%) | 96 |
cpu_nice | cpuNice: Double | CPU nice值(%) | 100 |
cpu_system | cpuSystem: Double | CPU系统态使用率(%) | 104 |
cpu_idle | cpuIdle: Double | CPU空闲率(%) | 108 |
cpu_iowait | cpuIowait: Double | CPU IO等待率(%) | 112 |
cpu_irq | cpuIrq: Double | CPU硬中断率(%) | 116 |
cpu_softirq | cpuSoftirq: Double | CPU软中断率(%) | 120 |
cpu_steal | cpuSteal: Double | CPU steal率(%) | 124 |
process_total | processTotal: Integer | 总进程数 | 131 |
process_active | processActive: Integer | 活跃进程数 | 135 |
mem_total | memTotal: Long | 总内存(MB) | 142 |
mem_free | memFree: Long | 空闲内存(MB) | 146 |
mem_buffers | memBuffers: Long | 缓冲区内存(MB) | 150 |
mem_cached | memCached: Long | 缓存内存(MB) | 154 |
mem_available | memAvailable: Long | 可用内存(MB) | 158 |
mem_shared | memShared: Long | 共享内存(MB) | 162 |
mem_real_used | memRealUsed: Long | 实际使用内存(MB) | 166 |
net_up_total | netUpTotal: Long | 上行累计流量(KB) | 173 |
net_down_total | netDownTotal: Long | 下行累计流量(KB) | 177 |
net_up_packets | netUpPackets: Long | 上行累计包数 | 181 |
net_down_packets | netDownPackets: Long | 下行累计包数 | 185 |
network_detail | networkDetail: String | 网络各网卡详情(JSON) | 192 |
disk_detail | diskDetail: String | 磁盘分区详情(JSON) | 196 |
iostat_detail | iostatDetail: String | 磁盘IO详情(JSON) | 200 |
system_os | systemOs: String | 操作系统 | 207 |
uptime | uptime: String | 运行时间 | 211 |
bt_version | btVersion: String | 宝塔版本 | 215 |
site_total | siteTotal: Integer | 网站总数 | 219 |
ftp_total | ftpTotal: Integer | FTP总数 | 223 |
database_total | databaseTotal: Integer | 数据库总数 | 227 |
nginx_active | nginxActive: Integer | Nginx活跃连接数 | 234 |
nginx_accepts | nginxAccepts: Long | Nginx累计接受连接数 | 238 |
nginx_handled | nginxHandled: Long | Nginx累计处理连接数 | 242 |
nginx_requests | nginxRequests: Long | Nginx累计请求数 | 246 |
nginx_reading | nginxReading: Integer | Nginx正在读取数 | 250 |
nginx_writing | nginxWriting: Integer | Nginx正在写入数 | 254 |
nginx_waiting | nginxWaiting: Integer | Nginx等待数 | 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 日志或文件字节。
Redis 键与读写方
| 键或模式 | 结构 | 业务用途和生命周期 | 源码 |
|---|---|---|---|
| file:info | Hash;field=file ID 字符串,value=FileRespDTO | FileRedisDAO.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:info | Hash;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;值 1 | SETNX + 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 反推出云端实际结构。