# 管理面板与任务库 [← 返回 README](../README.md) ## 管理面板 安装或升级后重启 Harness,在会话右侧栏的“开始”页点击 **服务器运维**,即可在对话旁管理。也可以从左侧 **服务器运维** 或插件详情进入完整面板。右侧面板创建例行任务时,默认使用当前会话接收报告: 1. **服务器**:显示已有 YAML / 配置清单与面板新增的服务器,支持搜索、分组、连接信息、凭据状态及关联任务。点击“添加服务器”录入地址、用户名和端口,保存后面板会立即做一次只读能力探测;也可点击“从 ssh_config 导入”,勾选 `~/.ssh/config`(含 `Include`,可用 `sshConfigFile` 改路径)里的 Host 别名批量加入 `ssh-config` 分组,导入的服务器通过别名连接,密钥、ProxyJump 等仍由 ssh_config 决定,通配模式和 `Match` 块不会列出。服务器详情的“能力”区显示系统、核数、GPU、调度器、Docker 和 sudo 可用性,“立即探测”可随时刷新;“查看审计”跳到该服务器的操作审计。面板添加的服务器可在详情中“编辑服务器”(名称关联着凭据、权限和任务,不能修改)或删除,删除会一并移除其凭据关联和操作权限设置,仍被例行任务指名时需先编辑或删除这些任务。YAML 和 WispTerm 中的服务器仍在原处编辑,但现在可在详情点击“从 WispOps 移除”,保留原始配置、凭据关联、权限设置和历史记录,刷新或重启后也不会重新出现。服务器工具栏的“已移除”列表可逐台恢复;恢复会沿用当前原始配置和保存的关联及权限,并可能重新加入按分组或通配符选择的任务。原始来源已不存在时,取消移除不会凭空创建服务器。同名服务器需先恢复,才能添加或从 ssh_config 导入;移除会让任务失去最后一个目标时也会拒绝保存。通过 ssh_config 导入到面板的服务器使用普通“删除”,不会改写 ssh_config,需要时可再次导入。 2. **密码库**:只负责保存密码:凭据名称、用户名备注、密码、备注和是否允许自动化使用。同一凭据可供多台服务器使用;卡片显示各服务器的用途,也支持按服务器搜索。编辑时密码留空保留原密码。删除仍有关联的凭据时,确认框会列出这些服务器;确认后这些服务器的 SSH 登录改回密钥、sudo 改回未关联,与删除凭据同一次保存。 3. **服务器凭据**:服务器详情的 SSH 登录行和 sudo 提权行各自“关联”或“更换”:从密码库中选一条凭据,或选择 SSH 密钥 / 免密 sudo 不关联密码;密码库为空时可就地新增凭据并关联。保存前可先“测试 SSH 登录”或“测试 sudo”:面板用所选凭据连接服务器执行 `id -un`,报告登录身份、sudo 是否可用或失败原因,测试不会改变关联。关联 SSH 凭据即切换为密码登录;仅关联 sudo 不改变 SSH 登录方式或 sudo 权限。SSH 登录仍使用服务器配置的用户名。sudo 凭据的用户名表示执行 sudo 的账号:与登录账号相同或留空时沿用现有登录方式;不同时使用 sudo 凭据的账号和密码单独建立 SSH 连接,再使用该密码验证 sudo,普通操作的登录账号不变。该账号必须允许 SSH 登录并具有所需 sudo 权限;修改原先作为备注填写的用户名时,请改为真实系统账号或留空。 4. **操作权限**:服务器详情显示 change / sudo / destructive 的生效策略,点击“编辑”可把每一项设成 allow、ask 或 deny,或选择“继承”回到 YAML 主机策略、分组和插件默认值的裁决结果。面板设置保存在 `managed.json` 的 `policies` 中,对 YAML 或 WispTerm 中的同名服务器同样生效,下一次调用即生效,并随设备同步一起传输;模型侧 deny 规则不受影响。标签上带“面板设置”的项即为覆盖值。 5. **任务库与关联**:内置 12 类模板,也可先保存自建模板,无需选择服务器。从任务库点击“关联服务器”,或在服务器详情点击“关联任务”,选择一台或多台服务器,填写检查对象,再设置每天 / 每周 / 固定间隔 / Cron 和时区。仍可选择“自定义 / 按服务器生成规则”。新建模板时可点击“在对话中生成”,把已填写的内容发送到当前会话,由 agent 与你确认需求后调用 `ops_template_draft` 提交草稿;草稿出现在任务库的“待审核草稿”中,点击“审核并保存”打开预填好的模板表单,保存后才进入任务库,也可以丢弃。该工具只写草稿,不能写任务库、关联服务器、启用调度或授予 sudo。 6. **任务通知与只读命令**:任务编辑器可填写“只读命令”(每行一条),保存时按 `ops_exec` 的分类器校验,只接受只读命令;运行时在每台关联服务器上执行并随采集数据交给模型,自定义任务因此不必依赖模型采集。模板也可以带命令,`{{参数}}` 在关联时作为一个带引号的参数代入。通知部分除“仅异常时通知”外,还有“仅状态变化时通知”和“静默时段”。 7. **运行一次或启用调度**:保存任务后选择接收报告的会话。“运行一次”把任务提示立即发送到该会话(与 `/ops-run` 相同,会话必须处于打开状态),模型随即采集并汇报,适合临时看一次效果,不创建调度;频率选“仅手动”的任务没有运行时间,只能这样运行。需要定时运行时点击“启用调度”。任务也会出现在 Harness 原生“自动化任务”中。可以停用再编辑或删除;重复启用不会在同一会话创建重复调度。DSH 必须保持运行。已启用的任务卡片显示上次运行时间;每日、每周或固定间隔的任务在应运行时间 30 分钟后仍无运行记录时标为“疑似漏跑”(cron 不判断),说明当时 Harness 或报告会话没有打开,可点“运行一次”补跑。 面板新增的服务器、凭据关联、任务和已移除的服务器名称(`excludedHosts`)保存在 `dataDir/managed.json`,原 YAML 文件及注释不会被改写。YAML 定义的任务在面板中可查看、启用和停用,编辑仍在原配置中进行。面板创建的任务绑定保存时选定的具体服务器,不会因为后来新增分组成员而扩大范围。没有调度服务时仍能保存任务,使用 `/ops-run <任务名>` 手动运行。 管理 API 只向宿主所有者开放,不注册成模型工具。保存会检查文件版本,拒绝用旧页面覆盖新数据。凭据与关联一起保存时先验证服务器和两个文件的版本;关联写入失败会恢复原凭据。两个文件的替换不构成跨文件的崩溃原子事务,若进程恰在两次替换之间中断,需要刷新核对关联。 面板采用紧凑概览和按栏宽适配的布局:侧栏单列、宽面板双列;任务卡片集中显示类型、服务器、时间与操作,巡查规则可展开阅读。各页和对话框的说明文字收在标题或工具栏旁的 ⓘ 里,鼠标悬停或键盘聚焦(触屏轻点)时显示;警告、操作后果和空状态提示仍直接显示。 服务器详情还有两项按服务器的设置,和操作权限一样保存在 `managed.json`(`checks`、`thresholds`),对 YAML 或 WispTerm 的同名服务器同样生效,并随设备同步: - **服务检查**:列出这台服务器上必须正常的东西:systemd 服务处于 active、某个 TCP 端口在监听、某个 HTTP 地址返回 2xx/3xx(用服务器上的 curl 或 wget,超时 8 秒,不校验证书)。每次巡检在服务器上只读执行,不通过记为严重 `service-down`。服务名、端口和 URL 在保存时校验格式并在脚本中单引号转义;保存和每次运行时都按部署级 `denyPatterns` 检查,被拒绝的检查不会执行,并记为警告 `service-check-refused`。最多 20 项。 - **巡检阈值**:为这台服务器覆盖任意巡检阈值(磁盘、inode、内存、swap、负载、GPU 温度、僵尸进程、写满预测天数、登录延迟、TCP 重传率、SSH 失败登录),留空则沿用全局 `thresholds`,下一次巡检生效。 ## 独立任务库(0.5) 服务器和任务模板分别设置,再建立关联:**任务库 → 关联服务器 → 保存例行任务 → 启用调度**。同一个模板可以用于多台服务器,也可以创建不同的关联任务,分别设置时间、检查对象和 sudo 授权。 | 分类 | 预设任务 | 关联时填写 | |---|---|---| | 基础运维 | 服务器健康巡检、磁盘空间诊断、目录空间占用、低内存警告 | 磁盘诊断和目录空间占用可修改扫描路径;低内存可修改可用内存和 swap 阈值 | | 安全 | 安全排查 | 可修改回溯小时数 | | 数据管理 | 新增文件分析、备份时效检查 | 扫描目录;备份目录或作业、预期频率 | | 应用服务 | 关键服务可用性、网站与证书、容器运行状态、日志异常汇总 | 服务名、网址、可选容器名、日志路径或服务名 | | 计算集群 | GPU 与作业队列、长时间运行任务警告 | 自动判断 GPU 与调度器是否适用;长时间运行可修改时长阈值和忽略的进程或用户 | 健康、磁盘、目录空间占用、新增文件、安全排查使用内置采集器;其余模板由 Harness 模型按保存的规则调用只读工具收集证据,工具权限和审批仍然生效。缺少工具、权限或连接失败会要求报告未完成,不能据此宣称正常。自定义检查的额外 `ops_exec` 调用不继承内置采集器的任务 sudo 预授权。 **目录空间占用**用 `du -x` 统计扫描路径下 5 层以内的目录(不跨文件系统,只保留不小于 1 MB 的最大 2000 个目录),每次运行把结果保存在 `dataDir/space/<服务器>.jsonl`。任务卡片和服务器详情中的“空间分布”打开方块图:每个方块是一个子目录,面积按占用大小,方块内显示下一级子目录;点击方块进入该目录,点击上方路径返回上一级。根目录正好是挂载点时,斜纹方块表示文件系统剩余空间,可以关闭;也可以切换为列表查看。非 root 运行时无权读取的目录不计入,结果偏小,可在任务中开启 sudo。 内置模板可以“复制编辑”,自建模板可以修改或删除。模板保存在 `dataDir/task-templates.json`;创建模板不会连接服务器、创建调度或授予 sudo。关联后将规则和参数保存为独立任务,修改或删除模板不会改变已有任务。若希望已有任务采用新规则,需要停用后编辑该任务,或重新建立关联。 调度仍使用 Harness 原生自动化服务;模板默认建议每日 08:30,关联时可调整。保存后必须显式“启用调度”,Harness 需保持运行。当前版本若在系统自动化页面修改时间,插件中的任务定义不会自动同步;建议在插件中停用、编辑后重新启用。 ## 检查脚本与 WispOps 定时器(0.11) 巡检不一定要固定的命令和输出格式,很多检查只需要跑一个脚本。面板的 **检查脚本** 标签保存由你审阅的 POSIX sh 脚本:填写标识、标题、说明、超时和内容,先在某台服务器上“运行测试”(只读、无 sudo、写入审计),再保存。保存即授权:脚本不再逐行做风险分类,只有部署级 `denyPatterns` 仍然生效,因此只保存你看过的内容。也可以在对话中让 agent 起草,它只能通过 `ops_script_draft` 提交草稿,出现在“待审核草稿”里,由你测试并保存。脚本保存在 `dataDir/check-scripts.json`,修改后关联任务的下一次运行即采用新内容,运行记录会带上脚本的 sha256。 输出契约很小:退出码 0 正常、1 警告、2 严重,其他退出码视为脚本本身失败;stdout 第一行非空内容是一句话摘要,用于通知、任务卡片和 agent 的提示;其后的内容是证据;可选一行 `WISPOPS-JSON: {"key": 数值}` 随运行记录指标。 在脚本卡片点击“关联服务器”后,任务表单多了 **汇报方式**: | 汇报方式 | 谁来运行 | 何时唤醒 agent | |---|---|---| | 每次运行都由 agent 汇报 | DSH 调度到点投递提示,agent 调用 `ops_task` 采集并写报告 | 每次 | | 仅异常时由 agent 汇报 | WispOps 定时器在插件内运行、记录、通知 | 出现警告、严重、失败或不可达时,向所选会话发送一句提示,agent 用 `ops_task mode=last` 读取已保存的证据 | | 只记录和通知 | WispOps 定时器 | 从不;agent 只在被问到时查看历史 | 后两种模式不需要 DSH 调度服务,启用后任务卡片显示“定时器已启用”、下次运行时间和异常时通知的会话;会话未打开时升级会保留,等会话打开后再送达。定时器支持每天、每周和固定间隔,不支持 cron;没有只读命令的自定义任务只能由 agent 汇报。汇报方式对内置采集器任务同样可用。“运行一次”对定时器任务直接在插件内运行并返回结果摘要。任务卡片显示最近一次运行的判定和摘要。 ## 自动生成巡查规则(0.3) 创建或编辑例行任务时,选择服务器和检查内容,点击 **自动生成巡查规则**,即可自动填写任务名称、标题、检查项、报告要求和默认每日 08:30 的计划(使用插件时区)。可选择健康巡检、安全排查、磁盘诊断、新增文件或综合检查;生成后可以直接保存,也可修改。 生成依据是已保存的系统能力探测、最近成功巡检以及当前告警阈值。检测到 GPU、Slurm/其他调度器或 Docker 时加入相应检查;历史磁盘压力列为复查项,并标明记录时间。资料缺失或超过 7 天时明确提示,不把旧数据当作当前状态。这是本地规则生成器,不调用大模型;任务实际执行后的报告仍由 Harness 模型撰写。 默认不连接服务器。勾选“先连接所选服务器做只读探测”可更新系统、GPU、调度器和容器信息;探测失败时仍返回草稿并说明原因。新增文件扫描优先使用已确认的共有数据挂载点,没有依据时默认 `/var/log`,可以调整路径。生成不会保存任务、启用调度或自动授权 sudo;草稿仍走原有保存和启用流程。编辑已有任务时保留任务标识和运行计划。 ## 机群总览 完整面板打开时默认显示 **机群总览**(右侧栏仍默认显示服务器列表)。它读取每台服务器已保存的巡检历史,不连接服务器,也不调用模型: - 顶部按最近一次巡检统计正常 / 警告 / 严重 / 不可达 / 未巡检的服务器数量,矩阵显示每台服务器最近 30 次巡检。 - **自动巡检**:选择关闭、每 5 / 15 / 30 分钟或每 1 / 3 / 6 / 12 / 24 小时。开启后插件每分钟检查一次,凡是最近一次巡检(不论来自面板、`ops_inspect` 还是任务)已超过间隔的服务器,就以只读方式、不使用 sudo 巡检一次并写入历史;只要 Harness 在运行就会执行,面板关闭也不影响。间隔保存在本设备的 `dataDir/auto-inspect.json`,不参与设备同步。旁边显示下次到期时间,开启时面板每分钟重新读取一次历史。审计日志里自动巡检记为 `wispOps:autoInspect`,命令只写内置巡检脚本的 sha256 摘要,避免每隔几分钟重复写入整段脚本。巡检历史每台保留 `retention.inspectionRecords` 条(默认 1000),每 5 分钟约可回溯 3.5 天。 - **状态矩阵**:每行一台服务器,每个方块是一次巡检,左侧最早;绿色正常、黄色警告、红色严重、斜纹表示当次未能连接。行尾显示最近一次的最高磁盘占用、可用内存和登录延迟。点击方块查看当次发现,点击名称查看趋势,点击 ↗ 跳到服务器详情。 - **巡检趋势**:对选中的服务器绘制最近 3 个占用最高的挂载点、可用内存、CPU 使用率、登录延迟、入站/出站流量和 TCP 连接数的折线(内联 SVG,不引入图表库),标出最新值和相对首次记录的变化。百分比固定按 0–100 绘制,其余按各自峰值缩放。选中巡检的时间下方列出当次网络状态:登录延迟、入站/出站流量、TCP 连接数和重传率。未能连接的巡检不参与折线,至少两次成功巡检才有趋势。 - **网络指标**:登录延迟是本机从启动 ssh 到远端 shell 应答的时间(在加载 profile 之前计时),包含 TCP 连接、密钥交换和认证;一分钟内复用的 SSH 连接(`ssh.controlPersistSec`)会明显更短。流量是 1 秒采样内有物理设备的网卡(含 bond 成员,不含 bridge、veth、bond 本身)收发字节之和,找不到设备信息时统计除 `lo` 以外的全部网卡;TCP 连接数是当时的 ESTABLISHED 数;重传率是采样内重传段占发送段的比例,发送少于 100 段时不计算。 - **可达率**:最近 24 小时和 7 天内能连上的巡检比例,以及 24 小时内登录延迟的 P95,按最多 2016 条历史(每 5 分钟一次约 7 天)计算。 - **写满预测**:对每个挂载点用最近 7 天的已用百分比做最小二乘拟合,至少 3 个点且跨度 6 小时;增长超过每天 0.05 个百分点时,在磁盘折线下显示“按近期增速约 N 天写满”(7 天内标红)。巡检时同样计算,`thresholds.diskFullForecastDays`(默认 7)天内会写满记为警告 `disk-forecast`。 - **GPU 与安全趋势**:有 NVIDIA GPU 的服务器另画平均利用率、显存占用和最高温度;能读到 sshd 日志时画每小时 SSH 失败登录数。 - **发现**:选中巡检的警告与严重项,最多 6 条,不包含命令输出。每项可 **静音** 1 / 7 / 30 天或直到取消:静音只作用于这台服务器的这一项(磁盘和服务检查按挂载点或服务名),被静音的问题仍记录在历史中、仍出现在 `ops_inspect` 结果里(标注“owner 已知”),但不再让服务器变色或触发告警;静音立即生效,到期后问题重新显示。静音保存在 `managed.json` 的 `mutes`,随设备同步。 - **不可达原因与诊断**:不可达的巡检显示原因(连接失败、超时、认证失败、登录已暂停、无巡检结果)和 ssh 报错;认证失败被暂停登录的服务器可点击“解除登录暂停”(与 `/ops-unblock` 相同)。“诊断连接”从本机按 `ssh -G` 解析实际地址,计时 DNS 解析和到 SSH 端口(或第一台 ProxyJump 跳板机)的 TCP 连接,并读取服务器的 SSH 标识行,然后给出结论;它不登录、不使用凭据,服务器只会看到一次在密钥交换前关闭的连接。通过 ProxyCommand 连接的服务器无法直接测试。 - **告警通知**:开启自动巡检后可在“告警通知”里勾选插件配置中的 `notifications` 渠道。每轮自动巡检后,服务器状态(应用静音后)变差、变为不可达或恢复时,发送一条列出变化及主要问题的消息;每台服务器首次出现的状态只作为基线,状态不变不重复发送。发送失败的渠道显示在面板上,不会重试。渠道选择保存在本设备的 `auto-inspect.json`。 数据来自 `dataDir/inspections/<主机>.jsonl`,即 `ops_inspect`、巡检任务和 `/ops-inspect` 写入的历史;没有巡检记录的服务器显示为“未巡检”,点击“立即巡检”(已有记录的行用 ⟳)会由面板以只读方式、不使用 sudo 连接该服务器执行一次巡检并写入同一历史;这是只向宿主所有者开放的 `inspectNow` 动作,不注册成模型工具。每行中间显示连接地址、探测到的系统和关联任务数。整行可点击切换趋势。该视图由 `overview` 管理动作提供,只向宿主所有者开放,不注册成模型工具。文本形式的趋势仍可通过 `ops_history kind=trends` 查询。 ## 操作审计 **操作审计** 标签页展示 `ops_history kind=operations` 同一份数据:时间、服务器、来源(工具、面板动作或任务)、风险与 sudo、授权方式、结果和命令摘要,可按服务器和时间范围筛选,最多 500 条。它由只向宿主所有者开放的 `auditLog` 动作提供,不含任何凭据;保留期限由 `retention.auditMonths` 决定。 ## 语言、同步与更新 面板文案随 Harness 的语言设置切换中英文,用户保存的名称和规则保持原文。任务编辑器可选择已配置的外部通知渠道。设备同步和版本更新分别提供 WebDAV 加密快照、稳定 Release 检查和自动更新开关,详见[操作指南](./operations.md)。