🛰️ 系统日志/监控
【系统日志/监控】把原系统日志、系统监控和安全日志菜单收口为一个可安装、可升级、可由 AI 查询的可观测性控制台。它用于回答三个最重要的问题:系统现在是否健康、资源消耗来自哪里、异常流量由谁通过什么接口产生。

功能亮点
- 日志仍是第一入口:首个 Tab 提供日志总数、错误、警告、慢 SQL、慢执行、异常统计,支持组合筛选、搜索、每页 15 条默认分页和完整详情。
- 从现象追到根因:热点接口按窗口总耗时贡献排序,同时展示请求数、平均/P95、异常率、活动请求与 W3C TraceId 时间线。
- 网络流量可归因:同时展示网卡/容器累计与窗口增量、HTTP 请求体/响应体字节、未归因残差,并按接口、IP、帐号/匿名、租户和内容类型排名。
- 高价值异常留证:普通高频样本只留短窗口内存;错误、慢请求、大文件和可疑传输通过有界队列异步写 MongoDB;长期趋势写入 MySQL 固定时间桶。
- 运行态一屏诊断:覆盖进程 CPU/内存/线程/GC、主机、磁盘、网卡、Docker 容器、日志队列、正在执行与最近完成请求。
- 安全数据与治理:统一查看安全访问、攻击事件、活动封禁,并在核对代理/NAT 后封禁或解封 IP;所有动作复核权限并写审计。
- 主题化驾驶舱:界面跟随平台主题,异常标红并给出原因/方案;持续动效仅使用低成本属性,在页面隐藏或“减少动态效果”时自动暂停。
- AI 原生:MCP 提供统一只读查询和有确认门的 IP 治理工具;能力目录、参数上限、权限与真实数据边界均可机器读取。
七个功能页
| Tab | 主要能力 | 典型问题 |
|---|---|---|
| 系统日志 | 统计卡、类型/级别/月/关键字筛选、详情、Trace | 为什么报错、哪条 SQL 慢、参数和堆栈是什么 |
| 网络流量 | 收发总量、HTTP 归因、残差、趋势、五类 TOP、大文件/可疑样本 | 30GB 接收和 9GB 发送是什么、谁发的、发给谁 |
| 运行诊断 | 请求率、并发、错误率、P95、热点接口/IP、自动建议 | CPU 高时最值得先查什么 |
| 请求与接口 | 正在执行、最近完成、TraceId、状态与耗时 | 是否有长请求或并发堆积 |
| 系统监控 | 进程、主机、磁盘、网卡、Docker、队列 | 是 CPU、GC、内存、磁盘还是容器问题 |
| 安全数据 | 访问、攻击、IP 封锁与解封 | 是否被扫描/攻击、是否需要处置某个 IP |
| 应用日志 | 当前 API 进程环形日志尾部、搜索和脱敏 | 服务端最近输出了什么 |

系统日志
系统日志默认显示 15 条,可切换 30、50、100 或 200 条。搜索和筛选在服务端执行,不会只过滤当前页。统计区域保留:
| 指标 | 含义 |
|---|---|
| 日志总数 | 当前月份与筛选条件下的总数 |
| 错误日志 | Level 为错误的日志 |
| 警告日志 | 风险、降级或需要关注但未必失败的日志 |
| 慢 SQL | 数据库执行时间超过阈值的 SQL 日志 |
| 慢执行 | 接口、V8、任务或外部依赖执行过慢 |
| 异常 | Exception、运行时异常或平台保护事件 |
点击任意行会打开平台级弹窗,遮罩整个系统框架。详情可包含日志级别、类型、耗时、用户、IP、Api、AppId、请求方法、客户端、节点、环境、TraceId、标题、内容、参数、其它信息、可执行 SQL 与 Trace 时间线。敏感键值在可信后端递归脱敏后才返回。
标题与副标题最多显示两行;完整内容通过详情查看。错误、长耗时和可疑流量会标红,悬停可查看常见原因与处置建议,例如:
- 慢 SQL:检查执行计划、索引、分页、返回字段、排序/Join 与锁等待。
- 慢执行:检查外部接口、逐行 I/O、大对象序列化、线程池与接口引擎循环。
- 异常:沿 Trace 时间线先处理第一个根因,避免调用方无界重试。
- 大流量:检查无分页响应、轮询、下载/上传、压缩、Range、CDN 与对象存储直传。
CPU 与热点接口怎么解释
热点接口的“耗时占比”表示它在选定窗口内贡献的请求总耗时比例,适合排序定位。例如某接口占 36%,说明先检查它最划算,但这不等于该接口精确消耗了 36% CPU。数据库等待、外部 HTTP、锁等待和序列化都会拉高请求耗时。
排查顺序:
- 记录当前节点、窗口、进程 CPU/内存、业务请求率、活动请求、P95 与错误率。
- 查看热点接口和来源 IP,区分“少量超慢”与“高频中等耗时”。
- 打开正在执行/最近完成请求,复制 TraceId。
- 在系统日志详情和 Trace 时间线定位首个慢步骤、SQL、外部调用或异常。
- 对同一接口以相同负载复测;同时看 P50/P95/P99、RPS、错误率、CPU、内存和分配率。
需要规范压测时参阅项目内 microi.skills/performance-testing/SKILL.md。
网络流量:知道“谁、从哪来、通过什么、传了多少”
网络驾驶舱分三层展示数据,避免把容器 NetIO 误解为用户下载量:
| 层次 | 能回答什么 | 不能回答什么 |
|---|---|---|
| 网卡/容器累计与窗口增量 | API 节点或容器总体收发规模与速率 | 不能直接归属到某个用户或 HTTP 接口 |
| HTTP 可归因字节 | 接口、IP、帐号/匿名、租户、内容类型的请求体/响应体字节 | 不包含 TLS/HTTP 头、重传和非 HTTP 通信 |
| 未归因残差 | 提醒还有数据库、Redis、Mongo、MQ、对象存储、外部 HTTP 或协议开销需要查 | 不能强行算给某个帐号、IP 或接口 |
五类流量排名
- Endpoint:定位大响应、无分页接口、重复轮询、上传/下载路由。
- IP:定位高频来源和可疑外部地址;封禁前确认可信代理和 NAT。
- User:授权完成后按帐号聚合,未携带有效身份统一标记“匿名”。
- Tenant:共享 API 节点按请求租户聚合。
- ContentType:识别 JSON 大响应、二进制下载、表单上传等资源类型。
系统只对大文件、错误、慢请求或可疑传输保留有界明细,包括清洗后的接口、IP、帐号/匿名、租户、内容类型、收发字节、状态、耗时和 TraceId;不保存文件内容、请求正文或响应正文。
发现异常后的建议
| 现象 | 常见原因 | 优先措施 |
|---|---|---|
| 单接口响应字节很大 | 无分页、字段过多、重复数据、文件走 API | 分页/选择字段、压缩、对象存储直传、Range/CDN |
| 匿名上传或可疑样本 | 接口匿名开放、鉴权失效、扫描攻击 | 核对业务、关闭匿名、限流、文件类型/大小校验、必要时封禁 |
| HTTP 很低但容器 NetIO 很高 | DB/Redis/Mongo/MQ/对象存储/外部 HTTP | 对照连接与依赖指标、反向代理和对象存储日志 |
| 同一 IP 高频小请求 | 轮询、爬虫、攻击、错误重试 | 缓存/SignalR、退避、速率限制、核对后封禁 |
| 4xx/5xx 大响应 | 错误页/堆栈过大、调用方反复失败 | 缩小错误响应、按 Trace 修根因、限制重试 |
存储与性能架构
HTTP 热路径
├─ 原子计数 + 有界分钟桶(内存,当前节点)
├─ TOP N 维度聚合(接口/IP/帐号/租户/内容类型)
└─ 仅高价值样本 → 有界日志队列 → MongoDB 批量写入
后台汇总
└─ 5 分钟固定桶 + 确定性幂等键 → MySQL 批量 upsert设计约束:
- 请求线程不逐条同步写 MySQL/MongoDB,也不序列化完整请求或响应。
- 队列、维度基数、明细大小和保留时间都有硬上限;故障时走 spool/WAL,不创建无界内存队列。
- 历史趋势直接读取 MySQL 汇总,不能每次扫描 MongoDB 明细重新统计。
- Redis 只用于短期热点结果、限流或租约;Key 必须包含租户和查询摘要,写入后主动失效,并保留短 TTL。
- 非重要高频日志适合 MongoDB;长期统计、治理记录和可索引汇总适合 MySQL。
权限、隐私与作用域
- 系统观测敏感数据和 IP 治理只允许平台可观测性管理员,通常要求
Level >= 9999,最终以服务端权威判定为准。 - 不记录 QueryString、Cookie、Authorization、Token、密码、Secret、API Key、请求正文或响应正文。
- 文件只记录经过清洗且有长度上限的名称/扩展名/数量/字节。
Snapshot、活动请求、应用日志、进程和 Docker 数据是当前节点视角;多节点需要逐节点采集或接入统一遥测平台。- Windows 宿主机网卡计数可能包含同机其它进程;Linux 容器网络命名空间更接近容器边界,但仍包含全部协议和依赖通信。
AI / MCP 调用
连接 Microi MCP 后,先发现能力:
{
"action": "microi_query_system_observability",
"params": { "action": "Capabilities" }
}查询最近 24 小时接口流量:
{
"action": "microi_query_system_observability",
"params": {
"action": "TrafficHistory",
"dimensionType": "Endpoint",
"hours": 24,
"pageIndex": 1,
"pageSize": 15
}
}查询日志:
{
"action": "microi_query_system_observability",
"params": {
"action": "Logs",
"keyword": "超时",
"level": 3,
"searchMonth": "202608",
"pageIndex": 1,
"pageSize": 15
}
}IP 治理必须两步执行。第一次不传 confirmExecution 只返回 dry-run;核对后再传精确确认值:
{
"action": "microi_manage_system_observability",
"params": {
"action": "BlockIp",
"ip": "203.0.113.10",
"blockMinutes": 30,
"reason": "核对后确认为异常高频访问",
"confirmExecution": "BlockIp:203.0.113.10"
}
}完整 AI 决策、存储、权限、扩展和验收规范见 microi.skills/system-observability/SKILL.md。
安装与升级
【系统日志/监控】由框架底层能力和应用商城资源共同组成:
- 先升级 Microi 框架到兼容版本(最低 v7.5.8,推荐当前最新版)。
- 在【应用商城】安装或更新【系统日志/监控】应用。
- 应用包会交付数据表、字段、索引/DDL、Managed 接口引擎、菜单、微服务全部源码和编译产物。
- 刷新登录态后进入菜单,确认七个 Tab、默认 15 条分页、日志详情、网络历史与安全数据。
- 通过 MCP 查询
Capabilities和Snapshot,确认 AI 工具、权限和目标租户均正确。
只更新框架不会自动替代租户已安装的商城应用;只更新应用也不能补齐旧后端缺失的可信原子能力。
验收清单
- [ ] 系统日志是第一个 Tab,统计、筛选、搜索、15 条默认分页和详情可用。
- [ ] 详情弹窗遮罩完整平台框架,内容脱敏,标题/副标题最多两行。
- [ ] 错误、长耗时和可疑流量标红,悬停可看到原因与解决方案。
- [ ] 热点接口、活动请求、Trace、进程、主机、Docker、队列、应用日志可回读。
- [ ] 网卡/容器、HTTP 归因和未归因残差分层展示,边界文案真实。
- [ ] Endpoint/IP/User/Tenant/ContentType 排名及 24 小时 MySQL 趋势可分页查询。
- [ ] MongoDB 故障不阻塞业务请求,MySQL 固定桶重复汇总保持幂等。
- [ ] MCP 能发现查询/治理工具,Trace 缺参拦截,IP 治理先 dry-run 再精确确认并审计。
- [ ] 主题、深色、移动端、减少动态效果和低配设备渲染均通过检查。
底层 V8 原子方法签名见V8 后端函数:系统日志/监控可信原子。