100 台主机、20 个数据库、30 个应用,谁在巡、谁没巡、上次检查是什么时候?

这个问题看起来简单,实际上很难持续回答。无论是专业监控平台、分散在主机上的 crontab,还是人工登录查看,它们都能发现一部分问题,但资产清单、检查规则、执行记录和后续处置往往分散在不同位置。某台机器的巡检脚本是否仍在运行、上次检查是正常还是已经告警、磁盘 92% 是今天的问题还是三个月前就存在——这些问题最终仍要靠人逐一确认。

真正困难的不是执行 df 或连接数据库,而是让检查结果成为系统可持续使用的运行事实:

  • 发现"磁盘 92%“之后,这个状态如何进入系统认知,而不是只停留在某个终端输出?
  • 异常出现时,如何自动关联到正确的资产、上下游关系、历史经验和可执行的处置路径?
  • 主机、数据库、应用和云资源的健康标准完全不同,如何在统一框架下管理它们?
  • 人工巡检的经验如何固化为可持续运行的机制,而不是每次都重新判断阈值?

Opsx 接管全域资产巡检的方式,不是再增加一套"把检查结果发出来"的工具,而是把健康检查收拢到 Asset Graph:

Asset 提供身份和运行拓扑
Schedule 按周期触发确定性检查
Shell 执行并计算健康状态
结果回写 Asset metadata
异常自动进入关联资产的 Issue
Agent 读取 Memory、Knowledge 和上下游关系继续诊断

巡检不再是某台机器上的孤立脚本,而是平台对真实资产持续建立运行认知的过程。本文从 MODB 和 Bethune 已经运行的主机、MogDB、应用和仓库巡检出发,说明 Opsx 如何让不同资产使用统一机制,并让健康状态成为后续诊断的确定性起点。

主机巡检:从负载、内存、磁盘到健康状态的完整链路

MODB Workspace 当前运行一条每日主机巡检 Schedule,覆盖生产环境中的关键主机资产。Schedule 配置如下:

  • 名称: MODB Daily Host Health Check
  • Workspace: modb
  • 目标资产: 多个主机资产,包括 host-moapp-0002
  • Runner: shell
  • Cron: 0 0 * * * (每日 00:00 UTC)
  • 状态: active

每次执行时,Schedule 会为每个目标主机创建独立的执行记录,检查以下核心指标:

主机检查的核心逻辑

当前主机巡检脚本检查四类基础资源:

#!/bin/bash
set -euo pipefail

# 1. 负载检查:15 分钟平均负载
LOAD_15=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $3}' | tr -d ',')
CORES=$(nproc)
LOAD_THRESHOLD=$(echo "$CORES * 1.5" | bc)

# 2. 内存检查:已用内存百分比
MEM_TOTAL=$(free -m | grep Mem | awk '{print $2}')
MEM_USED=$(free -m | grep Mem | awk '{print $3}')
MEM_PERCENT=$(echo "scale=2; ($MEM_USED / $MEM_TOTAL) * 100" | bc)

# 3. 磁盘检查:根分区使用率
DISK_ROOT=$(df -h / | tail -1 | awk '{print $5}' | tr -d '%')

# 4. 网络流量:短窗口采样(可选)
# 当前版本主要关注资源容量,流量监控由应用层处理

# 健康状态判断
HEALTH_STATUS="normal"
HEALTH_DETAIL="负载 ${LOAD_15} | 内存 ${MEM_PERCENT}% | 磁盘 ${DISK_ROOT}%"

# Critical: 磁盘 > 90% 或 内存 > 85%
if (( $(echo "$DISK_ROOT > 90" | bc -l) )) || (( $(echo "$MEM_PERCENT > 85.0" | bc -l) )); then
  HEALTH_STATUS="critical"
  HEALTH_DETAIL="[CRITICAL] 磁盘 ${DISK_ROOT}% | 内存 ${MEM_PERCENT}% | 负载 ${LOAD_15}"
# Warning: 磁盘 > 80% 或 内存 > 75%
elif (( $(echo "$DISK_ROOT > 80" | bc -l) )) || (( $(echo "$MEM_PERCENT > 75.0" | bc -l) )); then
  HEALTH_STATUS="warning"
  HEALTH_DETAIL="[WARNING] 磁盘 ${DISK_ROOT}% | 内存 ${MEM_PERCENT}% | 负载 ${LOAD_15}"
fi

echo "Host health check completed: ${HEALTH_STATUS}"
echo "Details: ${HEALTH_DETAIL}"

这段脚本不会只把结果打印到终端。检查完成后,还需要把状态写回资产元数据:

# 状态回写
CHECKED_AT=$(date -u +%Y-%m-%dT%H:%M:%SZ)

# 构造 JSON payload
PAYLOAD=$(jq -n \
  --arg status "$HEALTH_STATUS" \
  --arg detail "$HEALTH_DETAIL" \
  --arg checked_at "$CHECKED_AT" \
  '{
    metadata: {
      health_status: $status,
      health_detail: $detail,
      last_health_check: $checked_at
    }
  }')

# 通过 Opsx API 更新资产元数据
# OPSX_API_BASE 和认证由 Runtime 的受控配置提供
curl --fail --silent --show-error --max-time 10 \
  -X PATCH "${OPSX_API_BASE}/assets/${ASSET_ID}" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${OPSX_API_TOKEN}" \
  --data-binary "$PAYLOAD"

# 如果状态为 critical,自动创建高优先级 Issue
if [ "$HEALTH_STATUS" = "critical" ]; then
  echo "Critical status detected, creating issue..."
  # Issue 创建逻辑由 Schedule 的后置处理器触发
fi

为什么要回写 Asset metadata?

这里的关键设计是:健康状态不是发到监控平台就结束,而是成为资产身份的一部分。

传统监控平台擅长保存时序指标和触发告警,但当维护者需要判断"这台主机当前是否适合部署新服务"“上次磁盘告警是否已经处理"时,仍要重新登录主机查看。Opsx 把健康状态写回 Asset Graph 后,任何需要判断主机状态的操作——无论是容量规划、故障诊断还是部署决策——都可以从资产元数据直接读取最新结论:

{
  "asset_id": "asset_host_moapp_0002",
  "type": "host",
  "name": "host-moapp-0002",
  "metadata": {
    "health_status": "warning",
    "health_detail": "[WARNING] 磁盘 84% | 内存 73% | 负载 1.24",
    "last_health_check": "2026-08-26T00:00:15Z"
  }
}

这份状态会持续更新,并在 Asset 页面中展示:

opsx_assets_health.png

上图显示了多个资产的健康状态。绿色表示 normal,黄色表示 warning,红色表示 critical。每个资产都有最近检查时间和详细信息,维护者可以一眼看到哪些资产需要关注。

MogDB 巡检:连接数、长事务、错误日志与主备延迟

MogDB 巡检的复杂度高于主机。数据库可能因为连接数耗尽、长事务阻塞、主备延迟或错误日志激增而进入异常状态,这些信号需要通过 SQL 查询和日志分析才能获得。

opsx_assets_health_issue_148.png

当前 MogDB 巡检 Schedule 配置:

  • 名称: MODB Daily MogDB Health Check
  • Workspace: modb
  • 目标资产: MogDB 主库和备库,如 db-mogdb-primary-01db-mogdb-standby-01
  • Runner: shell
  • Cron: 0 23 * * * (每日 23:00 UTC)
  • 状态: active

MogDB 检查的核心项目

数据库巡检需要同时验证多个维度:

#!/bin/bash
set -euo pipefail

HEALTH_STATUS="normal"
HEALTH_ISSUES=()

# 1. 连通性与版本
VERSION=$(gsql -d postgres -p "${DB_PORT}" -c "SELECT version();" -t 2>/dev/null | head -1 || echo "FAILED")
if [[ "$VERSION" == "FAILED" ]]; then
  HEALTH_STATUS="critical"
  HEALTH_ISSUES+=("连接失败")
  echo "Database connection failed"
  exit 1
fi

# 2. 连接数使用率
MAX_CONN=$(gsql -d postgres -p "${DB_PORT}" -t -c "SHOW max_connections;" | xargs)
CUR_CONN=$(gsql -d postgres -p "${DB_PORT}" -t -c "SELECT count(*) FROM pg_stat_activity;" | xargs)
CONN_PERCENT=$(echo "scale=2; ($CUR_CONN / $MAX_CONN) * 100" | bc)

if (( $(echo "$CONN_PERCENT > 80.0" | bc -l) )); then
  HEALTH_STATUS="warning"
  HEALTH_ISSUES+=("连接数使用率 ${CONN_PERCENT}%")
fi

# 3. 长事务检查:超过 30 分钟的活跃事务
LONG_TX=$(gsql -d postgres -p "${DB_PORT}" -t -c "
  SELECT count(*) 
  FROM pg_stat_activity 
  WHERE state = 'active' 
    AND now() - xact_start > interval '30 minutes';
" | xargs)

if [ "$LONG_TX" -gt 0 ]; then
  HEALTH_STATUS="warning"
  HEALTH_ISSUES+=("${LONG_TX} 个长事务")
fi

# 4. 错误日志检查:近一小时的 ERROR/FATAL
ERROR_LOG="${DB_LOG_DIR}/postgresql-$(date +%Y-%m-%d).log"
if [ -f "$ERROR_LOG" ]; then
  ONE_HOUR_AGO=$(date -u -d '1 hour ago' +%Y-%m-%d\ %H:%M:%S)
  ERROR_COUNT=$(grep -E "ERROR|FATAL" "$ERROR_LOG" | \
    awk -v cutoff="$ONE_HOUR_AGO" '$1 " " $2 >= cutoff' | wc -l)
  
  if [ "$ERROR_COUNT" -gt 10 ]; then
    HEALTH_STATUS="critical"
    HEALTH_ISSUES+=("近一小时 ${ERROR_COUNT} 条错误日志")
  fi
fi

# 5. 主备角色与延迟(仅备库)
ROLE=$(gsql -d postgres -p "${DB_PORT}" -t -c "SELECT pg_is_in_recovery();" | xargs)
if [ "$ROLE" = "t" ]; then
  # 这是备库,检查回放延迟
  REPL_DELAY=$(gsql -d postgres -p "${DB_PORT}" -t -c "
    SELECT EXTRACT(EPOCH FROM (now() - pg_last_xact_replay_timestamp()));
  " | xargs)
  
  if (( $(echo "$REPL_DELAY > 300" | bc -l) )); then
    HEALTH_STATUS="warning"
    HEALTH_ISSUES+=("备库延迟 ${REPL_DELAY}s")
  fi
fi

# 构造健康详情
if [ ${#HEALTH_ISSUES[@]} -eq 0 ]; then
  HEALTH_DETAIL="连接数 ${CUR_CONN}/${MAX_CONN} | 无长事务 | 无重大错误"
else
  HEALTH_DETAIL=$(IFS=' | '; echo "${HEALTH_ISSUES[*]}")
fi

echo "MogDB health check completed: ${HEALTH_STATUS}"
echo "Details: ${HEALTH_DETAIL}"

与主机巡检相同,MogDB 检查结果也会回写到对应的数据库资产:

CHECKED_AT=$(date -u +%Y-%m-%dT%H:%M:%SZ)

PAYLOAD=$(jq -n \
  --arg status "$HEALTH_STATUS" \
  --arg detail "$HEALTH_DETAIL" \
  --arg checked_at "$CHECKED_AT" \
  '{
    metadata: {
      health_status: $status,
      health_detail: $detail,
      last_health_check: $checked_at
    }
  }')

curl --fail --silent --show-error --max-time 10 \
  -X PATCH "${OPSX_API_BASE}/assets/${ASSET_ID}" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${OPSX_API_TOKEN}" \
  --data-binary "$PAYLOAD"

为什么 MogDB 巡检不能只检查连通性?

如果只执行 SELECT 1,数据库返回成功就宣布正常,这种检查对生产环境几乎没有价值。真实的数据库异常往往表现为:

  • 连接池接近耗尽,新请求开始排队
  • 长事务未提交,阻塞其他会话
  • 主库正常但备库延迟严重,影响只读查询
  • 错误日志激增,指向配置问题或磁盘故障

这些信号只有结合连接数、事务状态、日志和主备延迟才能识别。MogDB 巡检因此不是简单的"ping 数据库”,而是一次综合健康评估,结果进入资产状态后可以直接用于后续判断。

2026 年 8 月 23 日:一次磁盘告警的自动升级

理论设计需要真实案例验证。2026 年 8 月 23 日,MODB 主机巡检发现 host-moapp-0002 根分区使用率达到 94%,触发 critical 状态。

Schedule 自动创建了 issue_148,并通过企业微信通知维护者。Issue 创建时已经携带:

  • 目标资产: host-moapp-0002
  • 异常摘要: 磁盘 94% | 内存 68% | 负载 1.12
  • 检查时间: 2026-08-23T00:00:15Z
  • 关联服务: svc-emcs-app(该主机运行的应用服务)

这不是一条只有"磁盘使用率 94%“的告警,而是一个已经绑定明确资产、携带上下文、可以继续诊断的 Issue。

Claude Code 的诊断路径

Claude Code 被自动派发到 issue_148 后,沿以下路径继续调查:

  1. 读取 Asset Memory: 确认 host-moapp-0002 运行的服务、历史清理记录和已知的高占用目录
  2. 执行磁盘分析: du -sh /var/* /opt/* /home/* | sort -rh | head -20
  3. 定位高占用目录: 发现 /var/log 占用 78GB,其中 /var/log/emcs-app/ 占 65GB
  4. 检查日志轮转: 确认 logrotate 配置存在,但部分应用日志未纳入自动清理
  5. 验证安全边界: 查看最近 30 天的日志,确认 30 天前的日志可以安全删除
  6. 向用户确认: 提供清理方案、影响范围和回退方式,等待授权

Agent 完成分析后,我批准了清理操作:

# 清理 30 天前的应用日志
find /var/log/emcs-app/ -name "*.log.*" -mtime +30 -delete

# 验证清理结果
du -sh /var/log/emcs-app/
df -h /

清理后磁盘使用率降至 67%,健康状态在下次巡检时恢复为 normal

这次处置说明了什么?

这个案例展示了巡检、Asset Graph 和 Issue 诊断的完整链路:

Schedule 发现异常
  → 回写 Asset 健康状态(critical)
  → 自动创建关联资产的 Issue
  → Issue 携带异常摘要、检查时间和目标资产
  → Agent 读取 Asset Memory 和上下游关系
  → 在正确的 Runtime 上执行只读诊断
  → 提供清理方案并等待人的授权
  → 执行后验证结果,下次巡检恢复正常

巡检不是终点,而是一个已经带有确定性资产上下文的任务入口。 异常发现后,Opsx 知道应该检查哪个资产、读取哪些 Memory、在哪个 Runtime 执行诊断,以及如何验证结果。

Schedule 的三层执行记录

每个 Schedule 都会保留完整的执行历史。当前 MODB 主机巡检已经持续运行数十次,每次执行都有独立记录:

opsx_assets_health_schedule.png

执行记录包含三层信息:

  1. Schedule 元信息: Workspace、目标资产、Runner、Cron、状态
  2. 单次执行摘要: 开始时间、结束时间、状态(success/failed)、触发方式(cron/manual)
  3. 执行详情: 完整的命令输出、环境变量、返回码、执行时长

这些记录不只是日志,而是可以被后续 Issue 引用的运维证据。例如,诊断"为什么这台主机昨天还是正常、今天突然变 critical"时,可以直接查看最近三天的巡检执行记录,比较健康详情的变化趋势。

当前实现还支持手动触发 Schedule,用于验证规则调整或立即检查某个资产,而不需要等到下一个 Cron 周期。

巡检规则由 Shell 承载,异常诊断由 Agent 接手

当前所有巡检 Schedule 都使用 Shell Runner,而不是 LLM。这是刻意的设计选择:

环节执行方式原因
定期检查Shell + 确定性脚本相同输入产生相同判断,快速执行,不消耗 Token
状态回写Shell + Asset API确定性操作,不需要推理
异常升级Shell + Issue 创建条件明确时直接触发,无需等待 LLM
根因诊断Agent + LLM需要理解日志、比较历史、排除错误方向
复杂处置Agent + 人工审批涉及数据删除、服务重启等高风险操作

Shell 适合承载已经验证的规则:磁盘超过 90% 是 critical、连接数超过 80% 是 warning、长事务超过 30 分钟需要告警。这些判断不需要每次重新思考,也不应该因为模型输出波动而改变。

Agent 和 LLM 被保留给不确定的部分:为什么磁盘突然增长、哪些日志可以安全清理、数据库错误是配置问题还是磁盘故障、应该重启服务还是只清理缓存。这些问题需要结合日志、源码、配置和历史经验判断,适合由 AI 分析。

这种分层不是"Shell 替代 AI"或"AI 替代 Shell”,而是让每一层做它最擅长的事:

Shell             → 确定性规则、快速执行、不消耗 Token
Agent + LLM       → 复杂推理、证据比较、方案生成
Asset + Knowledge → 为两者提供确定性上下文
Human             → 业务判断、风险审批、规则设计

从诊断到自动修复:渐进式自主运维的演进路径

发现异常后是否自动修复,取决于问题是否已经形成可验证的知识和 Playbook。

Opsx 的设计目标不是永远停留在"发现问题、创建 Issue、等待人工介入”,而是持续学习并演进到完全自主运维——类似自动驾驶的 L4 级别:在明确范围内完全自主决策和执行,只有遇到边界外的新场景才需要人的介入。

第一次遇到问题:人 + Agent 共同诊断

当某类异常第一次出现时,系统还没有形成经验:

Schedule 发现 critical
  → 自动创建 Issue
  → Agent 读取 Asset Memory、Knowledge 和上下游关系
  → 收集只读证据:日志、配置、资源使用、历史趋势
  → 生成诊断报告和处置建议
  → 人确认方案、风险和回退方式
  → 执行并验证结果
  → 过程和结论沉淀为 Knowledge 或 Playbook

这个阶段,人的作用是:

  • 补充 Agent 不知道的业务背景
  • 确认影响范围和安全边界
  • 纠正 AI 的错误假设
  • 批准修改性操作

这些判断和批准不会停留在个人记忆中,而是进入 Knowledge Graph 和 Playbook,成为系统可复用的运维智慧。

第二次遇到相同问题:验证知识并固化为 Playbook

当相同或相似问题再次出现时,系统已经有了上次的诊断结论和处置方法:

Schedule 发现 critical
  → 自动创建 Issue
  → Agent 读取相关 Knowledge 和 Playbook
  → 比对当前证据与历史模式
  → 如果匹配已知场景,提示"可以使用 Playbook XYZ"
  → 人审核 Playbook 是否适用
  → 一键执行多步骤处置
  → 验证结果并更新 Playbook

这个阶段,Playbook 承载了完整的处置流程:检查前置条件、执行多个步骤、验证中间状态、遇到异常时的回退方式、最终验收标准。人的作用从"每次都重新判断"变成"审核 Playbook 是否适用当前场景"。

第三次及以后:符合条件时自动执行

当某类问题反复验证、影响范围明确、回退方式可靠、并且已经经过人的明确授权后,可以进入自动执行:

Schedule 发现 critical
  → 读取对应 Knowledge 和 Playbook
  → 验证前置条件(资产状态、影响范围、执行权限)
  → 自动执行 Playbook
  → 每一步验证中间状态
  → 遇到预期外结果时停止并创建 Issue
  → 执行成功后验证最终结果
  → 更新 Asset 健康状态和执行记录

这不是"AI 直接修改生产",而是执行经过多次验证、明确授权、具备完整边界和回退机制的确定性流程。人的专业判断仍然存在,只是前移到了 Playbook 的设计、权限控制和执行边界的定义中。

当前主机和 MogDB 巡检的演进阶段

以磁盘清理为例,当前已经走到第二阶段:

问题类型当前阶段下一步演进
主机磁盘接近满第一次:Agent 诊断 + 人工批准清理固化为 Playbook,符合条件时自动执行
应用日志未轮转已形成 Knowledge,但仍需人工确认增加前置条件检查,授权后自动清理
数据库连接数高Agent 分析来源,人工决定是否重启或扩容区分场景:已知高峰自动扩容,异常来源先隔离
数据库长事务人工判断是否 Kill形成白名单和超时规则,危险事务自动终止

渐进式自主的三个关键机制

Opsx 实现 L4 级自主运维依赖三个机制的协同:

  1. Knowledge Graph 持续积累:每次处置的背景、判断依据、执行方法和结果验证都进入知识体系,可以被后续任务复用
  2. Playbook 固化复杂流程:多步骤处置、前置条件、中间验证、异常回退和最终验收形成可重复执行的标准流程
  3. 分级权限与执行边界:自动执行只在明确授权的范围内进行;超出边界时停止并升级为需要人审批的 Issue

这个设计不是"要么完全人工、要么完全 AI",而是一条清晰的演进路径:

第一次:人 + Agent 共同诊断,沉淀经验
第二次:Agent 提示可用 Playbook,人审核后执行
第三次及以后:符合条件时自动执行,异常时升级

Opsx 的目标是让每一类已知问题逐步从"需要人工介入"演进到"自主处置并验证",最终实现大部分常规运维工作由系统自主完成,人只需要处理边界外的新场景、重大变更和业务决策。 这正是 Self-Evolving 的核心含义:系统从每次执行中学习,让运维能力持续积累并转化为更高程度的自治。

巡检体系的可扩展性:从主机和数据库到全域资产

目前,MODB 和 Bethune 已经运行主机、MogDB、应用和代码仓库的每日巡检。它们的检查内容不同,却共享同一套资产绑定、Runtime 路由、Shell 执行、状态回写与异常升级机制。

这说明 Opsx 的巡检体系不是为某一类资产定制的单一工具,而是一个可以扩展到任意资产类型的统一框架:

资产类型典型检查项已验证场景状态表达
主机负载、内存、磁盘、网络MODB、Bethune 生产主机normal / warning / critical + 详情
数据库连接数、长事务、错误日志、主备延迟MogDB 主备库normal / warning / critical + 详情
应用进程状态、接口健康、错误率MES 应用主机normal / warning / critical + 详情
代码仓库分支状态、未合并变更、依赖安全Bethune 仓库normal / warning / critical + 详情
待扩展缓存命中率、消息队列积压、Pod 状态、云资源配额后续接入复用同一套状态模型

每新增一种资产,不是再新增一座独立的脚本孤岛,而是:

  1. 定义该资产的健康检查规则和阈值
  2. 实现为 Shell 脚本或确定性程序
  3. 创建资产绑定的 Schedule
  4. 结果自动回写 Asset Graph
  5. 异常自动进入 Issue 和诊断流程
  6. 经验沉淀为 Knowledge 或 Playbook

资产类型可以增加,检查逻辑可以调整,但资产身份、Runtime 路由、执行留痕、状态回写和异常升级的框架保持一致。这正是 Asset-Grounded 的价值:平台持有资产事实和运行关系,检查规则和执行工具都可以替换,但运维状态和历史证据不会随某个脚本或某次对话消失。

巡检如何成为系统持续学习的一部分

从每日主机和 MogDB 巡检开始,Opsx 已经把一项原本容易分散的工作串成了完整链路:Asset 提供身份和关系,Schedule 定期触发,Shell 在明确 Runtime 上执行,结果回写 Asset Graph,异常进入 Issue,诊断经验再返回知识体系。

这也是本文开头提出的核心问题的答案:如何让巡检结果成为系统可持续使用的运行事实?

传统做法是把检查结果发到监控平台或通知群,维护者收到告警后再登录机器、查看日志、判断影响。这个过程每次都从头开始:哪台机器、什么服务、历史状态、安全清理的边界、类似问题的处理方式——这些上下文需要重新收集。

Opsx 的做法是:健康状态成为资产身份的一部分,检查证据保留在 Schedule 执行历史中,异常自动关联到已有的资产关系、Memory 和 Knowledge。 下一次面对相同资产的异常时,不需要重新猜测目标、环境和安全边界,也不需要重新翻历史记录寻找上次怎么处理。

随着巡检持续运行,系统对资产的认知会逐步完善:

  • Asset Memory 记录每个资产的运行特征、历史问题和处置方式
  • Knowledge 沉淀可复用的诊断方法和清理规则
  • Playbook 保存多步骤的复杂处置流程
  • Schedule 执行历史提供可追溯的健康趋势

这些状态不依赖某个人记得,也不会因为换了 Agent 或 LLM 而消失。它们由平台持有,可以被后续任何 Issue、Schedule 或人工调查复用。

这正是 Opsx 让巡检有价值的方式:不是把检查做得更快,而是让检查结果成为系统可持续使用、可追溯、可演进的运行事实。 巡检因此从"一项需要人记得去做的重复劳动",变成了"系统持续建立运行认知、并为异常诊断提供确定性起点的基础能力"。

后续,随着更多资产类型接入巡检,Opsx 可以逐步承担应用、缓存、消息队列、Kubernetes 与云资源的健康检查。每新增一种资产,不是再新增一座独立的脚本孤岛,而是在同一个控制面中增加一份经过验证的健康规则、一条资产关联的执行路径和可继续复用的运维经验。