关于 huawei-cloud-mrs-host-fault-diagnose
用于定位华为云 MRS 故障原因的技能,覆盖主机、实例和服务层。它根据配置选择 LakeWatch 或 MRS Manager API,并按文档执行只读诊断流程。
主要功能
- 01诊断主机、实例和服务故障
- 02按配置选择 LakeWatch 或 Manager API
- 03从日志扫描逐步深入排查
- 04追踪跨层故障传播
- 05提供修复建议但不执行修复
适用场景
- 01排查异常的 MRS 服务
- 02检查指定节点上的故障实例
- 03诊断不可达或异常主机
- 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.mdpropagation.mdcomponents/_template.mdDBService.mdKrbServer.mdLdapServer.mdfault_layer_manager/host_fault.mdinstance_fault.mdservice_fault.mdfault_layer/host_fault.mdinstance_fault.mdservice_fault.mdreferences/acceptance-criteria.mdcli-installation-guide.mdfault-diagnosis-workflow.mdiam-policies.mdlakewatch-api-client.mdmanager-api-client.mdrelated-commands.mdverification-method.mdscenarios_manager/common.mddata_collection.mdinstall.mdreinstall_host.mdreinstall.mdscale_in.mdscale_out.mdstart.mdstop.mduninstall.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. 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 / python | Linux 使用 python3,Windows 使用 python | python3 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 / python | Linux 使用 python3,Windows 使用 python | python3 manager_api_client.py |
-a, --api | 要调用的 API 名称(定义于 manager_api_apis/) | -a get_instances |
-p, --param | 采用 key=value 格式的 API 参数,可重复指定 | -p 'service_name=KrbServer' |
--json | JSON 格式的输出 | --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
该模式决定整个工作流中要加载哪些知识库目录:
| 模式 | 命令脚本 | 故障层 | 场景 | 传播 | 告警文档(同级技能) |
|---|---|---|---|---|---|
| lakewatch | lakewatch_api_client.py | fault_layer/ | scenarios/ | propagation.md | ../huawei-cloud-mrs-host-alarm-diagnose/alarms/ |
| manager | manager_api_client.py | fault_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:详细调查
快速扫描日志未能得出结论时,收集完整数据:
- 加载[数据收集](/data_collection.md),收集进程/端口/HA/资源/告警/框架日志
- 加载[实例故障诊断](<FAULT_LAYER>/instance_fault.md),进行实例级诊断(包括场景识别)
- 如有需要,加载[服务故障诊断](<FAULT_LAYER>/service_fault.md),进行服务级诊断
- 如果发现主机问题,加载[主机故障诊断](<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 集群 ID | N/A |
service_name | 条件必填 | 故障组件(服务/实例故障条目必填) | N/A |
node_name | 条件必填 | 故障节点(实例/主机故障条目必填) | N/A |
alarm_time | 可选 | 故障发生时间,格式为 yyyy/MM/dd HH:mm:ss GMT+X:XX | 当前时间 |
strategy_name | collect_alarm_node_res_data 必填 | 资源收集策略(lakewatch 模式) | N/A |
log_directory | collect_alarm_log_data 必填 | 日志目录,必须位于 /var/log/ 下(lakewatch 模式) | N/A |
log_file_name | collect_alarm_log_data 必填 | 日志文件名,不得包含路径分隔符(lakewatch 模式) | N/A |
keywords | collect_alarm_log_data 必填 | 日志关键词筛选条件,JSON 数组(lakewatch 模式) | N/A |
log_type | collect_alarm_log_data 必填 | local 或 hdfs(lakewatch 模式) | N/A |
time_pattern | 可选 | 非标准日志时间正则表达式,格式为 regex||format(lakewatch 模式) | N/A |
target_url | access_manager_get 必填 | MRS Manager API 路径,不得以 / 开头(lakewatch 模式) | N/A |
metric_names | get_host_metrics 必填 | 以逗号分隔的监控指标名称,带 dev_ 前缀(manager 模式) | N/A |
key_word | start_log_search 必填 | 要搜索的日志关键词(manager 模式) | N/A |
current_time | start_log_search 必填 | 当前时间,格式为 yyyy-MM-ddTHH:mm:ss(manager 模式) | N/A |
file_name | browse_log 必填 | 完整日志文件路径(manager 模式) | N/A |
输出格式
诊断报告以 Markdown 格式输出,包含:
- 诊断结果表:诊断时间、集群 ID、故障组件、故障节点
- 诊断过程:逐步结果(实例状态、快速日志扫描、主机排查、详细调查)
- 传播路径:根因 -> 传播 -> 症状(无传播时为单层)
- 根因分析:根因层级(主机/实例/服务)+ 根因类型
- 修复建议表:优先级、操作、说明、是否需要用户确认(所有修复操作都需要用户确认)
请参见工作流 -> 步骤 6部分中的模板。
验证方法
安装、配置和功能验证步骤请参见验证方法。
最佳实践
- 先确定入口:根据用户提供的信息(service_name、node_name),在开始诊断前确定入口是服务故障、实例故障还是主机故障。
- 逐步调查:始终先快速扫描日志(Step 3);只有在无法得出明确结论时,才升级到详细调查(Step 4)。
- 替换占位符:将
<cluster_id>、<alarm_time>、<node_name>、<target_ip>、<process_name>等替换为用户提供的实际值;绝不要将其硬编码。 - 引用参数:始终用单引号括起
-p的值;在 Windows PowerShell 中,将"转义为""",以避免出现code:500错误。 - 时间格式:
alarm_time必须遵循yyyy/MM/dd HH:mm:ss GMT+X:XX格式;对于非标准日志时间格式,请传入time_pattern。 - 总结结果:使用总结工具精简命令输出后再进行分析;不要直接分析大量原始输出。
- 诊断后反思:完成检查后,反思是否已确认根本原因;如果尚未确认,请重新检查是否有遗漏的步骤。
- 只读:所有命令均为只读;修复步骤仅作建议,执行前需要用户确认。
- 命令失败处理:命令失败时,跳过当前检查项并继续其他检查;不要中止整个诊断。
参考文档
| 文档 | 描述 |
|---|---|
| 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 节。如果未安装告警技能,请告知用户,并继续通用故障诊断流程。