Files

40 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 日志与运行状态
界面第二轮(2026-10-06)起,侧栏「系统」只有三项:**日志**、**运行状态**、**设置**。原来的任务、审计、工作流引擎面板、计划页都并进日志页,旧地址自动跳转(`apps/web/app/routes/console/redirects.ts`)。
## 日志页 `/console/logs`
一份按时间倒序的列表,不新建表,查询时把四个来源合起来(`apps/server/src/modules/logs/`):
| 类型 | 来源 | 时间 | 对象 | 结果 |
| --- | --- | --- | --- | --- |
| 任务 `task` | 引擎运行 `openworkflow.workflow_runs` | 创建时间 | 业务对象(下载任务、整理记录、订阅、定时任务…) | 进行中 / 成功 / 失败;取消、智能体超出预算或停止为警告 |
| 定时与自动 `auto` | 定时任务运行 `scheduled_job_run`(含智能体巡检)、智能体后台调查 `agent_run`(trigger=event,非子会话) | 开始时间 | 定时任务 / 会话 | 成功 / 失败 / 已跳过(信息)/ 进行中 |
| 登录 `auth` | 审计里 `admin.*`、`api_key.*`(登录、登录失败、退出、二次验证、Passkey、改密、API Key 增改撤) | 事件时间 | 审计目标 | 登录成功为成功,登录失败为警告,其余为信息 |
| 审计 `audit` | 其余审计事件 | 事件时间 | 审计目标 | 智能体操作被拒绝为警告,其余为信息 |
- **筛选**(都写在 URL):`type`、`level`(running / success / info / warn / error,可逗号多值)、`since`(1h / 24h / 7d / 30d)、`q`(标题、错误、动作、对象 ID、审计负载,不区分大小写)、`objectType` + `objectId`(同一对象的任务、定时任务运行与审计一起列出)、`system=1`。
- **例行记录**缺省不列:没有业务对象的引擎运行、定时任务触发且成功的引擎运行、巡检 / 后台调查对应的引擎运行(在「定时与自动」里已有一条)、普通定时任务的成功 / 跳过运行。点「显示例行记录」或按对象筛选时列出。
- **分页**:游标 = (时间, 日志 id),各来源各取 limit+1 再合并,逐页与一次取全顺序一致。
- **实时**:页面默认连 `GET /logs/stream`(SSE,同一组筛选),服务端每 2 秒查一次最近 10 分钟,新日志和状态有变化的日志(任务从进行中变成完成)推给页面,按 id 覆盖。「暂停」断开连接,「继续」从已知最新一条续上,暂停期间的日志会补推。
- **详情**:点一行开抽屉。任务沿用原任务详情(业务摘要、时间线、引擎步骤、取消 / 重跑,`?run=<引擎运行 id>` 也能直接打开);其余显示字段、负载与「同一对象的全部日志」。`/console/tasks/:id` 独立页保留。
- **问智能体**:勾选一条或一段(按住 Shift)后点「问智能体」,打开智能体抽屉,目标里按时间正序列出这些日志(时间、类型、结果、摘要、日志 id、对象);单条时带上任务 / 下载任务 / 整理记录等上下文 id。超过 6000 字截断。
- 登录失败(用户名 / 密码 / 验证码错误)写一条 `admin.login_failed` 审计(用户名、IP、原因,不含密码);被限速拦下的尝试不写。
### 「定时任务」页签
原计划页(智能体巡检卡片 + 自动任务列表)放在日志页的第二个页签 `/console/logs?tab=schedules`(`?job=` 高亮)。定时任务是配置,但这一页的主要内容是运行状态(上次结果、下次运行、失败原因、立即执行 / 跳过),与它的运行日志放在一起;设置页按约定只放全局参数与凭证(`docs/design/console-ia.md` §3)。卡片的「运行记录」跳日志按该定时任务筛选。
## 运行状态 `/console/status`
在原有横幅、需要关注、数据库、任务引擎、定时任务、磁盘、挂载根、存储之外:
- **资源**(参考 MoviePilot 仪表盘):CPU、内存、网络、磁盘读写四块,当前值 + 小趋势(15 分钟 / 1 小时 / 6 小时)。api 进程每 5 秒读一次 `/proc` 与 cgroup v2,采样只放内存、保留 6 小时,进程重启后重新累计(`GET /system/resources?minutes=`)。
- CPU:有 cgroup `cpu.stat` 时按本容器用量 ÷ 可用核数(`cpu.max` 限额,否则在线核数);否则 `/proc/stat` 整机。另给整机 CPU 与 1 / 5 / 15 分钟负载。
- 内存:有 cgroup `memory.current` 时 = current − `memory.stat` 的 inactive_file(同 `docker stats`),上限 `memory.max`(不限时为整机总量);否则 `/proc/meminfo` 整机。
- 网络:`/proc/net/dev` 除 lo 外合计(容器里即本容器网卡)。磁盘读写:cgroup `io.stat`,否则 `/proc/diskstats` 整盘。
- 读不到的文件按 null 显示「—」,磁贴右上角写口径(本容器 / 整机 / 取不到)。
- **进程**表直接展示(不再折叠),每个角色进程(API / Worker(后台任务)/ Worker(智能体)/ 单进程)带 CPU(两次心跳之间占一个核的百分比,心跳 `extra.cpuPercent`)与内存(RSS)。事件循环与 SSE 的趋势仍在折叠区。
首页「运行状态」卡是简版:整体健康、CPU / 内存(最近 30 分钟小趋势)、用量最高的 3 个磁盘、下载器 / 站点账号 / 媒体库目录的正常数 / 总数,点进去到运行状态页。