mcpField
H
huawei-cloud-mrs-host-fault-diagnose

huawei-cloud-mrs-host-fault-diagnose

github.com/huaweicloud云与 DevOps5961 次安装2 天前更新
代码仓库

关于 huawei-cloud-mrs-host-fault-diagnose

用于定位华为云 MRS 故障原因的技能,覆盖主机、实例和服务层。它根据配置选择 LakeWatch 或 MRS Manager API,并按文档执行只读诊断流程。

主要功能

  1. 01诊断主机、实例和服务故障
  2. 02按配置选择 LakeWatch 或 Manager API
  3. 03从日志扫描逐步深入排查
  4. 04追踪跨层故障传播
  5. 05提供修复建议但不执行修复

适用场景

  1. 01排查异常的 MRS 服务
  2. 02检查指定节点上的故障实例
  3. 03诊断不可达或异常主机
  4. 04初步扫描无结论时继续深入排查

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/huaweicloud/huaweicloud-skills --skill huawei-cloud-mrs-host-fault-diagnose

安装后在 Claude Code 中输入/huawei-cloud-mrs-host-fault-diagnose确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

propagation_manager.md
propagation.md
components/
_template.md
DBService.md
KrbServer.md
LdapServer.md
fault_layer_manager/
host_fault.md
instance_fault.md
service_fault.md
fault_layer/
host_fault.md
instance_fault.md
service_fault.md
references/
acceptance-criteria.md
cli-installation-guide.md
fault-diagnosis-workflow.md
iam-policies.md
lakewatch-api-client.md
manager-api-client.md
related-commands.md
verification-method.md
scenarios_manager/
common.md
data_collection.md
install.md
reinstall_host.md
reinstall.md
scale_in.md
scale_out.md
start.md
stop.md
uninstall.md

详细介绍

华为云 MRS 主机故障诊断技能

概述

此技能用于诊断华为云 MRS(MapReduce Service)集群故障。提供服务名称和/或节点名称后,技能会逐步定位根因:先快速扫描日志;发现主机问题时排查主机;未能得出结论时进行详细调查。

架构:调用方(Agent)-> check_api_mode.py(Python,scripts/)确定 API 模式 -> 根据模式调用 lakewatch_api_client.py -> LakeWatch API -> MRS 集群(节点资源数据、日志、MRS Manager 代理),或调用 manager_api_client.py -> MRS Manager REST API(28443)。各层知识库(lakewatch 模式下的 fault_layer/ + scenarios/ + propagation.md;manager 模式下的 fault_layer_manager/ + scenarios_manager/ + propagation_manager.md)用于驱动诊断流程;components/ 下各组件的配置由两种模式共用;三个故障层级(主机 -> 实例 -> 服务)用于追踪传播链。

关于语言的说明:根据仓库规范,此 SKILL.md 和 references/ 下的文档均使用英文编写。fault_layer/、fault_layer_manager/、scenarios/、scenarios_manager/、components/、propagation.md 和 propagation_manager.md 下的知识库文档也使用英文编写。命令和代码块始终使用英文。

适用场景:

  • 有服务报告为不健康,需要定位根因
  • 有实例报告在特定节点上发生故障
  • 有主机报告为无法访问或状态异常
  • 从快速扫描到深入调查的渐进式故障排查

典型用例:

  • “KrbServer 出问题了,帮忙诊断一下”(服务故障,未指定节点)
  • “8-5-225-6 上的 KrbServer 挂了”(实例故障,已指定服务和节点)
  • “8-5-225-6 出问题了”(主机故障,仅指定节点)
  • “MRS 集群 KrbServer 启动失败,集群 ID xxx”
  • “DBService 停止异常,节点 8-5-225-6”

关键限制

重要限制:

  1. 只读:此技能仅运行信息收集命令(查看日志、查询状态、收集资源数据)。不得运行任何启动、停止、修改或删除操作。
  2. 修复需用户确认:此技能仅提供可执行的修复建议,不得直接执行任何修复操作。所有修复操作都必须经过用户确认。
  3. 严格执行:严格按照此技能目录下的知识库内容进行诊断。禁止编造知识库以外的诊断命令。

前提条件

1. Python 要求
  • Python >= 3.7
  • 依赖项:pyyaml(YAML 解析)、cryptography(仅用于 Windows AES 密码加密)
  • Linux 使用 CryptoAPI 进行密码加密(不依赖 cryptography)
  • 验证安装:python3 --version(Linux)/ python --version(Windows)

此技能不需要 KooCLI(hcloud)。它通过 scripts/lakewatch_api_client.py 调用 LakeWatch API(lakewatch 模式),或通过 scripts/manager_api_client.py 调用 MRS Manager REST API(manager 模式)。客户端设置请参阅 CLI 安装指南。

2. LakeWatch 凭据配置
  • 有效的 LakeWatch 服务账号(用户名 + 密码)
  • 必须使用 --encrypt-password 加密密码,并将其存储在 scripts/lakewatch_api_config.yaml(auth.encrypted_password)中。切勿存储明文密码。
  • 安全规则:
    • 切勿在对话或命令输出中泄露 LakeWatch 密码
    • 切勿要求用户在对话中输入明文密码;请使用交互式 --encrypt-password 流程
    • 令牌缓存在本地,且文件权限仅允许所有者访问(Windows:%TEMP%\lakewatch_token\,Linux:/tmp/lakewatch_token/)
3. MRS Manager 凭证配置(Manager 模式)

当 scripts/manager_api_config.yaml 存在且设置了 auth.encrypted_password 时,将启用 Manager 模式。

  • 有效的 MRS Manager 账户(用户名 + 密码)
  • 在 server.host 中配置 Manager 浮动 IP(默认端口为 28443)。要获取该 IP,请在 OMS 节点运行 grep float_ip /opt/huawei/Bigdata/om-server/OMS/workspace/conf/oms.ini,或咨询集群管理员。
  • 密码必须通过 python3 scripts/manager_api_client.py --encrypt-password 加密,并存储在 scripts/manager_api_config.yaml(auth.encrypted_password)中。切勿存储明文密码。
  • 安全规则:
    • 切勿在对话或命令输出中泄露 Manager 密码
    • 切勿要求用户在对话中输入明文密码;请使用交互式 --encrypt-password 流程
    • Windows AES 密文需要连同 .aes_key 文件一起迁移,才能在另一台机器上解密;Linux SCC 密文无法跨集群移植
  • 完整的客户端用法请参阅 MRS Manager API 客户端。
4. 访问权限
  • Lakewatch 模式:能够连接到 LakeWatch 服务端点(在 scripts/lakewatch_api_config.yaml 的 server.host/port 中配置);LakeWatch 账户必须有权限调用 MRS Manager 代理,并收集目标集群上的节点资源和日志数据
  • Manager 模式:脚本运行环境必须能够访问 Manager 端口 28443;Manager 账户需要对告警、主机、实例和日志 API 具有读取权限
  • 有关访问模型和所需角色,请参阅 IAM 策略
5. 依赖技能:huawei-cloud-mrs-host-alarm-diagnose

此技能引用了 huawei-cloud-mrs-host-alarm-diagnose 技能(skills/bigdata/mrs/ 下的同级目录)中的按告警分类的诊断知识库。当故障诊断流程遇到已知告警(12006/12007/25000/25500/27001)时,会在 lakewatch 模式下加载对应文档:../huawei-cloud-mrs-host-alarm-diagnose/alarms/<alarm_id>.md;或在 manager 模式下加载:../huawei-cloud-mrs-host-alarm-diagnose/alarm_manager/<alarm_id>.md。

  • 如果告警技能存在,加载引用的文档并遵循其中的诊断流程
  • 如果不存在,告知用户并继续通用故障诊断流程
  • 此依赖仅为文档级引用(通过相对路径加载 Markdown),而非直接调用技能。两个技能共用相同的 LakeWatch/Manager API 客户端和配置格式。

命令格式规范

此技能使用 LakeWatch API 客户端,而非 KooCLI。统一的命令格式如下:

# Linux
python3 <skill_dir>/scripts/lakewatch_api_client.py -a <api_name> -p 'key1=value1' -p 'key2=value2'

# Windows
python <skill_dir>/scripts/lakewatch_api_client.py -a <api_name> -p 'key1=value1' -p 'key2=value2'
元素规则示例
python3 / pythonLinux 使用 python3,Windows 使用 pythonpython3 lakewatch_api_client.py
-a, --api要调用的 API 名称(在 lakewatch_api_config.yaml 中定义)-a collect_alarm_node_res_data
-p, --param采用 key=value 格式的 API 参数,可重复使用-p 'cluster_id=xxx'
引号每个 -p 值都必须用单引号括起来,以防止 shell 解析 [] {} | ()-p 'keywords=["ERROR"]'

Windows(PowerShell)引号规则:值中的每个 " 都必须替换为 """(包括 [] 和 {} 内的 "),否则服务端会返回 {"message":"Unknown exception","success":false,"code":"500"}:

# Correct on Windows
-p 'keywords=["""ERROR"""]'
-p 'env={"""PID""":"""123"""}'

# Wrong on Windows (will fail)
-p 'keywords=["ERROR"]'

Linux(bash)引号规则:值中的 " 保持原样,并将整个值用单引号括起来:

# Correct on Linux
-p 'keywords=["ERROR","Exception"]'
-p 'env={"PID":"123"}'

完整的 API 目录、参数以及令牌/加密机制,请参阅 LakeWatch API 客户端。

MRS Manager API 客户端(Manager 模式)

当 check_api_mode.py 报告 manager 时,请使用 manager_api_client.py,而不是 LakeWatch 客户端。统一命令格式如下:

# Linux
python3 <skill_dir>/scripts/manager_api_client.py -a <api_name> -p 'key1=value1' -p 'key2=value2' --json

# Windows
python <skill_dir>/scripts/manager_api_client.py -a <api_name> -p 'key1=value1' -p 'key2=value2' --json
元素规则示例
python3 / pythonLinux 使用 python3,Windows 使用 pythonpython3 manager_api_client.py
-a, --api要调用的 API 名称(定义于 manager_api_apis/)-a get_instances
-p, --param采用 key=value 格式的 API 参数,可重复指定-p 'service_name=KrbServer'
--jsonJSON 格式的输出--json
--auth认证模式:basic(默认)或 cookie--auth cookie
引号与 LakeWatch 客户端的引号规则相同(使用 ' 包裹;Windows 中 " -> """)-p 'keywords=["ERROR"]'

完整的 API 目录、认证模式、指标名称和密码加密机制,请参阅 MRS Manager API 客户端。

工作流

步骤 0:确定 API 模式

运行模式检查脚本,确定诊断基于 MRS Manager 还是 LakeWatch:

  • Windows:python scripts/check_api_mode.py
  • Linux:python3 scripts/check_api_mode.py

该脚本会检查 scripts/manager_api_config.yaml 是否存在,以及 encrypted_password 是否已填写,并返回 JSON 结果:

{"mode": "manager", "reason": "..."}     // manager-based
{"mode": "lakewatch", "reason": "..."}   // lakewatch-based

规则:

  • manager_api_config.yaml 不存在 -> 默认 lakewatch
  • 文件存在,但 encrypted_password 为空 -> 默认 lakewatch
  • 文件存在且 encrypted_password 不为空 -> manager

该模式决定整个工作流中要加载哪些知识库目录:

模式命令脚本故障层场景传播告警文档(同级技能)
lakewatchlakewatch_api_client.pyfault_layer/scenarios/propagation.md../huawei-cloud-mrs-host-alarm-diagnose/alarms/
managermanager_api_client.pyfault_layer_manager/scenarios_manager/propagation_manager.md../huawei-cloud-mrs-host-alarm-diagnose/alarm_manager/

在本 SKILL.md 的其余部分中,<FAULT_LAYER> 表示 fault_layer(lakewatch)或 fault_layer_manager(manager),<SCENARIOS> 表示 scenarios(lakewatch)或 scenarios_manager(manager),<PROPAGATION> 表示 propagation.md(lakewatch)或 propagation_manager.md(manager)。

步骤 1:确定故障入口

从用户输入中提取故障信息,并确定诊断入口:

用户描述入口步骤 1 操作
有 service_name,没有 node_name(例如“KrbServer 出问题了”)服务故障检查所有实例状态,找出故障实例
有 service_name 和 node_name(例如“8-5-225-6 上的 KrbServer 挂了”)实例故障直接检查该实例
有 node_name,没有 service_name(例如“8-5-225-6 出问题了”)主机故障检查主机状态,然后检查主机上的实例
步骤 2:定位故障对象

模式说明:以下命令块展示的是 lakewatch 模式命令。在 manager 模式下,请使用对应的 manager_api_client.py 命令——参阅 核心命令 -> Manager 模式命令 和 <SCENARIOS>/data_collection.md,了解各模式对应的命令。

入口 A:服务故障(有 service_name,没有 node_name)

加载 components/<service_name>.md 获取组件配置。查询 OMS 主备节点,并检查每个节点上的进程:

# lakewatch mode
python3 lakewatch_api_client.py -a query-management-node-info \
  -p 'cluster_id=<cluster_id>'
# lakewatch mode
python3 lakewatch_api_client.py -a collect_alarm_node_res_data \
  -p 'cluster_id=<cluster_id>' \
  -p 'strategy_name=process-basic-info' \
  -p 'env={"process_name":"<process_name>"}' \
  -p 'node_name=<node_name>'

Manager 模式对应命令:get_oms_info(OMS 主备节点);get_host_process(进程状态)。

判断:

结果下一步
所有节点上的进程均正常步骤 4:详细调查
部分节点上的进程缺失步骤 3:快速扫描日志(针对故障节点)
API 调用失败(节点不可达)步骤 4:主机故障排查
条目 B:实例故障(有 service_name + node_name)

加载 components/<service_name>.md。直接检查该节点上的进程:

# lakewatch mode
python3 lakewatch_api_client.py -a collect_alarm_node_res_data \
  -p 'cluster_id=<cluster_id>' \
  -p 'strategy_name=process-basic-info' \
  -p 'env={"process_name":"<process_name>"}' \
  -p 'node_name=<node_name>'

Manager 模式对应项:get_host_process(进程状态)。

判断:

结果下一步
进程正常步骤 4:详细调查
进程缺失步骤 3:快速扫描日志
API 调用失败(节点不可达)步骤 4:主机故障排查
条目 C:主机故障(有 node_name,无 service_name)

查询 OMS 主备节点,查询节点 IP,从 OMS 活动节点 ping 故障节点:

# lakewatch mode
python3 lakewatch_api_client.py -a query-management-node-info \
  -p 'cluster_id=<cluster_id>'
# lakewatch mode
python3 lakewatch_api_client.py -a query-node-ip \
  -p 'cluster_id=<cluster_id>' \
  -p 'node_name=<node_name>'
# lakewatch mode
python3 lakewatch_api_client.py -a collect_alarm_node_res_data \
  -p 'cluster_id=<cluster_id>' \
  -p 'strategy_name=ping-check' \
  -p 'env={"TARGET_IP":"<target_ip>"}' \
  -p 'node_name=<oms_active_node>'

Manager 模式对应项:get_oms_info(OMS 主备节点);get_hosts -p 'hostname=<node_name>'(节点 IP);check_remote(远程连通性——没有专用的 ping 检查 API)。

判断:

结果下一步
Ping 失败步骤 4:主机故障排查(网络/硬件)
Ping 成功检查主机上的所有组件进程,找出故障实例 -> 步骤 3:快速扫描日志
步骤 3:快速扫描日志

对于故障节点,快速扫描三层日志(Controller -> NodeAgent -> 组件),查找明确的 ERROR:

# lakewatch mode - Controller log
python3 lakewatch_api_client.py -a collect_alarm_log_data \
  -p 'cluster_id=<cluster_id>' \
  -p 'alarm_time=<alarm_time>' \
  -p 'log_directory=/var/log/Bigdata/controller' \
  -p 'log_file_name=exe.log*' \
  -p 'keywords=["<service_name>","ERROR","fail","timeout","Exception"]' \
  -p 'log_type=local' \
  -p 'node_name=<oms_active_node>'

# lakewatch mode - NodeAgent script log
python3 lakewatch_api_client.py -a collect_alarm_log_data \
  -p 'cluster_id=<cluster_id>' \
  -p 'alarm_time=<alarm_time>' \
  -p 'log_directory=/var/log/Bigdata/nodeagent/scriptlog' \
  -p 'log_file_name=*.log*' \
  -p 'keywords=["<service_name>","ERROR","fail","exit"]' \
  -p 'log_type=local' \
  -p 'node_name=<node_name>'

Manager 模式对应项(参见 <SCENARIOS>/data_collection.md):browse_log(Controller exe.log、NodeAgent script.log);start_log_search + get_log_search_progress(关键词搜索)。

如果已知 service_name,还要检查组件自身的日志(路径见 components/<service_name>.md):

# lakewatch mode
python3 lakewatch_api_client.py -a collect_alarm_log_data \
  -p 'cluster_id=<cluster_id>' \
  -p 'alarm_time=<alarm_time>' \
  -p 'log_directory=<log_directory>' \
  -p 'log_file_name=<log_file_name>' \
  -p 'keywords=["ERROR","Exception","FATAL","fail","OOM"]' \
  -p 'log_type=local' \
  -p 'node_name=<node_name>'

判断:

日志结果下一步
明确的 ERROR(例如 OOM/权限/端口冲突/配置缺失)输出根因
日志显示节点不可达 / Agent 超时步骤 4:主机故障排查
同一主机上有多个故障节点步骤 4:主机故障排查
无法明确得出结论步骤 4:详细调查
步骤 4:详细调查

快速扫描日志未能得出结论时,收集完整数据:

  1. 加载[数据收集](/data_collection.md),收集进程/端口/HA/资源/告警/框架日志
  2. 加载[实例故障诊断](<FAULT_LAYER>/instance_fault.md),进行实例级诊断(包括场景识别)
  3. 如有需要,加载[服务故障诊断](<FAULT_LAYER>/service_fault.md),进行服务级诊断
  4. 如果发现主机问题,加载[主机故障诊断](<FAULT_LAYER>/host_fault.md),进行主机级诊断
步骤 5:追踪传播链

加载传播链,追踪根因传播路径和影响范围。

步骤 6:输出诊断结论
## Diagnosis Result

| Item | Content |
|------|---------|
| Diagnosis time | [time] |
| Cluster ID | [cluster_id] |
| Faulty component | [service_name] |
| Faulty node | [node_name] |

### Diagnosis Process

| Step | Result |
|------|--------|
| Instance status | [which nodes normal/abnormal] |
| Quick log scan | [found/not found clear ERROR] |
| Host troubleshooting | [normal/abnormal: ...] |
| Detailed investigation | [process/port/HA/resource results] |

### Propagation Path

[root cause] -> [propagation] -> [symptom] (single-layer root cause if no propagation)

### Root Cause Analysis

**Root cause layer**: [host/instance/service]
**Root cause type**: [specific reason]

### Repair Suggestion

| Priority | Operation | Description | Needs user confirmation |
|----------|-----------|-------------|-------------------------|
| 1 | [operation] | [description] | Yes |

核心命令

查询 OMS 主备节点
python3 lakewatch_api_client.py -a query-management-node-info \
  -p 'cluster_id=<cluster_id>'
查询节点 IP
python3 lakewatch_api_client.py -a query-node-ip \
  -p 'cluster_id=<cluster_id>' \
  -p 'node_name=<node_name>'
收集节点资源数据
# Process basic info
python3 lakewatch_api_client.py -a collect_alarm_node_res_data \
  -p 'cluster_id=<cluster_id>' \
  -p 'strategy_name=process-basic-info' \
  -p 'env={"process_name":"<process_name>"}' \
  -p 'node_name=<node_name>'

# Port check
python3 lakewatch_api_client.py -a collect_alarm_node_res_data \
  -p 'cluster_id=<cluster_id>' \
  -p 'strategy_name=port-check' \
  -p 'env={"PORT":"<port>"}' \
  -p 'node_name=<node_name>'

# HA resource status
python3 lakewatch_api_client.py -a collect_alarm_node_res_data \
  -p 'cluster_id=<cluster_id>' \
  -p 'strategy_name=ha-resource-status' \
  -p 'node_name=<node_name>'

# Disk space / Memory / CPU load
python3 lakewatch_api_client.py -a collect_alarm_node_res_data \
  -p 'cluster_id=<cluster_id>' \
  -p 'strategy_name=disk-space' \
  -p 'node_name=<node_name>'

支持的 strategy_name 值包括:system-load、memory-usage、disk-space、disk-io、network-io、file-handle、port-check、high-cpu-processes、high-memory-process、zombie-process、dns-check、network-connectivity-test、process-basic-info、process-file-descriptor、jstack-thread-dump、disk-health-check、disk-smart-info、ha-resource-status、omm-process-tree 等。完整列表请参阅 LakeWatch API Client。

收集告警日志数据
python3 lakewatch_api_client.py -a collect_alarm_log_data \
  -p 'cluster_id=<cluster_id>' \
  -p 'alarm_time=<alarm_time>' \
  -p 'log_directory=<log_directory>' \
  -p 'log_file_name=<log_file_name>' \
  -p 'keywords=["ERROR","Exception"]' \
  -p 'log_type=local'

当日志时间格式不是标准 ISO 格式时(例如 [2026-07-07 20:54:25,171]),传入 time_pattern:

python3 lakewatch_api_client.py -a collect_alarm_log_data \
  -p 'cluster_id=<cluster_id>' \
  -p 'alarm_time=2026/07/07 20:54:00 GMT+08:00' \
  -p 'log_directory=/var/log/Bigdata/omm/oms/pms' \
  -p 'log_file_name=pms*.log' \
  -p 'keywords=["ERROR","Exception"]' \
  -p 'log_type=local' \
  -p 'time_pattern=^\[([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})||ymdHMS'
代理 MRS Manager GET API
# Query cluster services
python3 lakewatch_api_client.py -a access_manager_get \
  -p 'cluster_id=<cluster_id>' \
  -p 'target_url=api/v2/clusters/<cluster_id>/services'

# Query host processes
python3 lakewatch_api_client.py -a access_manager_get \
  -p 'cluster_id=<cluster_id>' \
  -p 'target_url=api/v2/clusters/<cluster_id>/hosts/<node_name>/processes'

# Query active alarms
python3 lakewatch_api_client.py -a access_manager_get \
  -p 'cluster_id=<cluster_id>' \
  -p 'target_url=api/v2/clusters/<cluster_id>/alarms'

target_url 不得以 / 开头。代理要求 Agent >= 1.0.5,且已上报 OMS 节点信息。目前仅支持 GET。

Manager 模式命令(Manager Mode)

当 check_api_mode.py 报告 manager 时,使用 manager_api_client.py 执行等效查询:

# Query OMS primary/standby nodes
python3 manager_api_client.py -a get_oms_info --json

# Query cluster services
python3 manager_api_client.py -a get_cluster_services \
  -p 'cluster_id=<cluster_id>' --json

# Query host detail (disk/memory/CPU usage)
python3 manager_api_client.py -a get_host_detail \
  -p 'hostname=<node_name>' --json

# Query host process status
python3 manager_api_client.py -a get_host_process \
  -p 'hostname=<node_name>' --json

# Query service instances (HA status)
python3 manager_api_client.py -a get_instances \
  -p 'cluster_id=<cluster_id>' \
  -p 'service_name=<service_name>' \
  -p 'hostname=<node_name>' --json

# Query host monitor metrics (dev_ prefix)
python3 manager_api_client.py -a get_host_metrics \
  -p 'hostname=<node_name>' \
  -p 'metric_names=dev_cpu_surp_avg,dev_load_one_min' --json

# Check remote node connectivity (replaces ping-check/network-connectivity-test)
python3 manager_api_client.py -a check_remote \
  -p 'remote_ip=<target_ip>' \
  -p 'remote_port=22' \
  -p 'remote_user_name=omm' \
  -p 'remote_client_path=/opt/huawei/Bigdata/nodeagent' --json

# Browse a log file (file_name must be a full path)
python3 manager_api_client.py -a browse_log \
  -p 'hostname=<node_name>' \
  -p 'file_name=/var/log/Bigdata/controller/exe.log' \
  -p 'start_line=1' \
  -p 'end_line=500' \
  -p 'search=<service_name>' --json

# Search logs by keyword (returns task_id, then poll progress)
python3 manager_api_client.py -a start_log_search \
  -p 'cluster_id=<cluster_id>' \
  -p 'key_word=ERROR' \
  -p 'start_time=<alarm_time>' \
  -p 'end_time=<current_time>' \
  -p 'services=<component>:<service_name>:<role_name>' \
  -p 'min_log_level=WARN' --json

python3 manager_api_client.py -a get_log_search_progress \
  -p 'search_id=<task_id>' --json

start_log_search 的 services 格式:component:service:role(例如 HDFS:HDFS:NameNode);start_time/end_time 格式:yyyy-MM-ddTHH:mm:ss。指标名称和完整参数规则请参见 MRS Manager API 客户端。

参数确认

参数必填/可选说明默认值
cluster_id必填MRS 集群 IDN/A
service_name条件必填故障组件(服务/实例故障条目必填)N/A
node_name条件必填故障节点(实例/主机故障条目必填)N/A
alarm_time可选故障发生时间,格式为 yyyy/MM/dd HH:mm:ss GMT+X:XX当前时间
strategy_namecollect_alarm_node_res_data 必填资源收集策略(lakewatch 模式)N/A
log_directorycollect_alarm_log_data 必填日志目录,必须位于 /var/log/ 下(lakewatch 模式)N/A
log_file_namecollect_alarm_log_data 必填日志文件名,不得包含路径分隔符(lakewatch 模式)N/A
keywordscollect_alarm_log_data 必填日志关键词筛选条件,JSON 数组(lakewatch 模式)N/A
log_typecollect_alarm_log_data 必填local 或 hdfs(lakewatch 模式)N/A
time_pattern可选非标准日志时间正则表达式,格式为 regex||format(lakewatch 模式)N/A
target_urlaccess_manager_get 必填MRS Manager API 路径,不得以 / 开头(lakewatch 模式)N/A
metric_namesget_host_metrics 必填以逗号分隔的监控指标名称,带 dev_ 前缀(manager 模式)N/A
key_wordstart_log_search 必填要搜索的日志关键词(manager 模式)N/A
current_timestart_log_search 必填当前时间,格式为 yyyy-MM-ddTHH:mm:ss(manager 模式)N/A
file_namebrowse_log 必填完整日志文件路径(manager 模式)N/A

输出格式

诊断报告以 Markdown 格式输出,包含:

  • 诊断结果表:诊断时间、集群 ID、故障组件、故障节点
  • 诊断过程:逐步结果(实例状态、快速日志扫描、主机排查、详细调查)
  • 传播路径:根因 -> 传播 -> 症状(无传播时为单层)
  • 根因分析:根因层级(主机/实例/服务)+ 根因类型
  • 修复建议表:优先级、操作、说明、是否需要用户确认(所有修复操作都需要用户确认)

请参见工作流 -> 步骤 6部分中的模板。

验证方法

安装、配置和功能验证步骤请参见验证方法。

最佳实践

  1. 先确定入口:根据用户提供的信息(service_name、node_name),在开始诊断前确定入口是服务故障、实例故障还是主机故障。
  2. 逐步调查:始终先快速扫描日志(Step 3);只有在无法得出明确结论时,才升级到详细调查(Step 4)。
  3. 替换占位符:将 <cluster_id>、<alarm_time>、<node_name>、<target_ip>、<process_name> 等替换为用户提供的实际值;绝不要将其硬编码。
  4. 引用参数:始终用单引号括起 -p 的值;在 Windows PowerShell 中,将 " 转义为 """,以避免出现 code:500 错误。
  5. 时间格式:alarm_time 必须遵循 yyyy/MM/dd HH:mm:ss GMT+X:XX 格式;对于非标准日志时间格式,请传入 time_pattern。
  6. 总结结果:使用总结工具精简命令输出后再进行分析;不要直接分析大量原始输出。
  7. 诊断后反思:完成检查后,反思是否已确认根本原因;如果尚未确认,请重新检查是否有遗漏的步骤。
  8. 只读:所有命令均为只读;修复步骤仅作建议,执行前需要用户确认。
  9. 命令失败处理:命令失败时,跳过当前检查项并继续其他检查;不要中止整个诊断。

参考文档

文档描述
CLI 安装指南Python 依赖项以及 LakeWatch/Manager 客户端设置
IAM 策略LakeWatch/MRS Manager 访问模型和所需角色
验证方法安装、配置和功能验证
验收标准技能测试的通过/失败标准
故障诊断工作流渐进式故障诊断工作流设计
LakeWatch API 客户端完整的 LakeWatch API 目录、参数、令牌和加密机制
MRS Manager API 客户端完整的 MRS Manager API 目录、认证模式、指标名称和加密机制
相关命令常用 LakeWatch/Manager API 命令速查
huawei-cloud-mrs-host-alarm-diagnose(同级技能)依赖项:每个告警的诊断知识库(lakewatch 模式下为 ../huawei-cloud-mrs-host-alarm-diagnose/alarms/<alarm_id>.md,manager 模式下为 alarm_manager/<alarm_id>.md)。详情请参阅前提条件第 5 节。
数据采集完整的数据采集流程,lakewatch 模式(步骤 4)
数据采集(Manager)完整的数据采集流程,manager 模式(步骤 4)
主机故障诊断主机层诊断,lakewatch 模式
实例故障诊断实例层诊断(包括场景识别),lakewatch 模式
服务故障诊断服务层诊断,lakewatch 模式
主机故障诊断(Manager)主机层诊断,manager 模式
实例故障诊断(Manager)实例层诊断(包括场景识别),manager 模式
服务故障诊断(Manager)服务层诊断,manager 模式
传播链根因传播路径追踪,lakewatch 模式
传播链(Manager)根因传播路径追踪,manager 模式
常见场景6 阶段通用诊断框架,lakewatch 模式
常见场景(Manager)6 阶段通用诊断框架,manager 模式
scenarios/<scenario>.md特定场景的检查,lakewatch 模式(install/start/stop/uninstall/reinstall/reinstall_host/scale_out/scale_in)
scenarios_manager/<scenario>.md特定场景的检查,manager 模式(install/start/stop/uninstall/reinstall/reinstall_host/scale_out/scale_in)
components/<service_name>.md每个组件的配置(进程、端口、日志路径等)——两种模式共用
components/_template.md新组件配置模板

注意事项

  • 安全性:此技能为只读。它绝不会泄露 LakeWatch 或 MRS Manager 密码;密码通过 --encrypt-password 加密,并存储在对应的配置 YAML 文件中。修复步骤仅供参考。
  • 不使用 KooCLI:此技能不使用 hcloud;它通过 lakewatch_api_client.py 调用 LakeWatch API,或通过 manager_api_client.py 调用 MRS Manager REST API。请勿混用 hcloud 命令。
  • 模式切换:运行 check_api_mode.py(步骤 0)以确定模式。在 manager 模式下,使用 manager_api_client.py 和 fault_layer_manager/、scenarios_manager/ 及 propagation_manager.md 知识库;在 lakewatch 模式下,使用 lakewatch_api_client.py 和 fault_layer/、scenarios/ 及 propagation.md。请勿跨模式混用客户端。
  • 命令失败:命令失败时,跳过当前检查项并继续其他检查;不要中止整个诊断。
  • 已知限制:access_manager_get 代理仅支持 GET 请求(Agent 端暂不支持 PUT);collect_alarm_log_data 要求 log_directory 位于 /var/log/ 下;某些 strategy_name 值需要额外的 env 参数;在 manager 模式下,browse_log 要求提供完整的日志文件路径,start_log_search 的 services 必须遵循 component:service:role 格式,而某些 Manager 版本中的 get_alarms 可能返回 500(请改为浏览 Controller 的 exe.log)。
  • 跨技能依赖:此技能引用了 huawei-cloud-mrs-host-alarm-diagnose 技能中的告警诊断文档(lakewatch 模式下为 ../huawei-cloud-mrs-host-alarm-diagnose/alarms/<id>.md,manager 模式下为 alarm_manager/<id>.md)。依赖声明和处理规则请参阅前提条件第 5 节。如果未安装告警技能,请告知用户,并继续通用故障诊断流程。

评论

支持 Markdown