name: obdiag-usage description: obdiag agent 工具使用指南:配置文件生成、gather/analyze/check/rca 各命令的调用方式、参数说明与典型场景。用户询问"怎么用 obdiag"、"如何采集日志"、"怎么生成配置"、"如何巡检/根因分析",或 agent 自身不确定该调哪个工具时加载本 skill。
obdiag Agent 工具使用指南
一、配置文件生成(generate_obdiag_config)
触发:用户尚无 ~/.obdiag/config.yml,或明确要求生成/更新配置。
必填参数
| 参数 | 说明 |
|---|---|
ob_cluster_name |
集群名称(任意字符串) |
db_host |
sys 租户连接 IP |
tenant_sys_password |
sys 密码(可为空字符串 "") |
nodes |
节点列表,每项至少含 ip |
常用可选参数
| 参数 | 说明 | 默认值 |
|---|---|---|
db_port |
数据库端口 | 2881 |
tenant_sys_user |
sys 用户 | root@sys |
global_ssh_username |
所有节点统一 SSH 用户 | — |
global_ssh_password |
SSH 密码 | — |
global_ssh_port |
SSH 端口 | 22 |
global_ssh_key_file |
SSH 私钥路径 | — |
global_home_path |
OB 安装目录(如 /home/admin/oceanbase) |
— |
global_data_dir |
数据目录 | — |
global_redo_dir |
redo 日志目录 | — |
obproxy_cluster_name + obproxy_nodes |
同时配置 OBProxy | — |
行动原则
- 用户未提供必填项时,逐一追问,不要猜测。
- 已有
config.yml时,工具会自动备份为config.yml.backup_<timestamp>。 - 生成后用
list_obdiag_clusters确认写入成功,再继续诊断。
示例
generate_obdiag_config(
ob_cluster_name="prod-cluster",
db_host="10.0.0.1",
tenant_sys_password="",
nodes=[{"ip": "10.0.0.1"}, {"ip": "10.0.0.2"}, {"ip": "10.0.0.3"}],
global_ssh_username="admin",
global_home_path="/home/admin/oceanbase"
)
二、多集群管理
| 工具 | 用途 |
|---|---|
list_obdiag_clusters |
列出 ~/.obdiag/ 下所有集群配置文件 |
show_current_cluster |
显示当前会话使用的配置路径 |
所有 gather/analyze/check/rca 工具均支持 cluster_config_path 参数(传短名如 "test-cluster" 或完整路径),用于切换到非默认集群。
三、Gather 采集工具
采集完成后,工具输出中会包含
obdiag_gather_pack_*打包目录路径。 若用户同时要求分析,在同一轮内继续对该目录执行file_list→file_read→ 总结。
3.1 gather_log — 集群侧日志(observer/election/rootservice)
仅用于 OceanBase 节点侧,不用于 OBProxy 或 OMS。
| 参数 | 说明 |
|---|---|
since |
相对时间窗,如 "30m"、"1h"、"2d" |
from_time / to_time |
绝对时间 "yyyy-mm-dd hh:mm:ss" |
scope |
observer / election / rootservice / all(默认 all) |
grep |
关键词或列表,trace_id 过滤传此参数 |
store_dir |
输出目录 |
cluster_config_path |
非默认集群名或路径 |
gather_log(since="30m", scope="observer", grep="ERROR")
gather_log(from_time="2024-01-01 10:00:00", to_time="2024-01-01 11:00:00", grep=["trace_id_xxx"])
3.2 gather_obproxy_log — OBProxy 日志
仅用于 OBProxy 节点,不用于 observer。
| 参数 | 说明 |
|---|---|
scope |
obproxy / obproxy_limit / obproxy_stat / obproxy_digest / obproxy_slow / obproxy_diagnosis / obproxy_error / all |
recent_count |
仅采集最近 N 个日志文件 |
其余(since/from_time/to_time/grep/store_dir/cluster_config_path) |
同 gather_log |
3.3 gather_oms_log — OMS 组件日志
需要 config.yml 中存在 oms 段,否则报错。
| 参数 | 说明 |
|---|---|
scope |
all / ghana / supervisor / cm / cdc / libobcdc / store / console / nginx |
oms_component_id |
CDC 类采集必填,格式 "IP-进程编号"(如 "192.168.1.1-1"),在 OMS 控制台「组件管理」查询 |
temp_dir |
远端临时目录 |
recent_count |
仅采集最近 N 个日志文件 |
其余(since/from_time/to_time/grep/store_dir/cluster_config_path) |
同 gather_log |
3.4 gather_sysstat — 系统资源快照
采集各节点 CPU、内存、磁盘、网络等系统指标,无时间范围参数。
gather_sysstat()
gather_sysstat(store_dir="/tmp/sysstat_out")
3.5 gather_perf — 性能剖析(火焰图/pstack)
采集实时性能数据,适用于高 CPU/卡顿场景。无额外必填参数。
gather_perf()
3.6 gather_ash — 活跃会话历史(ASH)
| 参数 | 说明 |
|---|---|
from_time / to_time |
时间范围 |
trace_id |
按 trace 过滤 |
sql_id |
按 SQL_ID 过滤 |
wait_class |
等待事件类型 |
report_type |
TEXT(默认)或 HTML |
svr_ip / svr_port |
指定节点 |
tenant_id |
租户 ID |
3.7 gather_awr — AWR 报告
| 参数 | 说明 |
|---|---|
since / from_time / to_time |
时间范围 |
cluster_name / cluster_id |
覆盖集群标识 |
store_dir |
输出目录 |
cluster_config_path |
非默认集群名或路径 |
3.8 gather_plan_monitor — SQL 执行计划监控
仅用于采集指定 trace_id 的执行计划,不用于"收集日志"。收日志请用 gather_log(grep=trace_id)。
| 参数 | 说明 |
|---|---|
trace_id |
SQL trace ID(必填) |
store_dir |
输出目录 |
cluster_config_path |
非默认集群名或路径 |
gather_plan_monitor(trace_id="Y123456789-0001")
四、Analyze 分析工具
analyze_log — 集群侧日志分析
仅支持 observer/election/rootservice,不支持 OBProxy 和 OMS 日志。
| 参数 | 说明 |
|---|---|
files |
离线日志文件路径列表(跳过在线采集) |
from_time / to_time |
分析时间范围 |
scope |
observer / election / rootservice / all |
log_level |
最低日志级别:DEBUG/TRACE/INFO/WDIAG/WARN/EDIAG/ERROR |
cluster_config_path |
非默认集群 |
典型用法:先 gather_log 得到 pack 目录,再 analyze_log 做统计分析,最后 file_read 读原始行级内容。
analyze_log(scope="observer", from_time="2024-01-01 10:00:00", to_time="2024-01-01 11:00:00")
analyze_log(files=["/tmp/obdiag_gather_pack_xxx/observer.log"], log_level="ERROR")
五、Check 巡检工具
5.1 check_list — 列出可用巡检项
在执行 check 前,可先调用 check_list 了解有哪些巡检任务。
check_list()
5.2 check_cluster — 执行巡检
| 参数 | 说明 |
|---|---|
cases |
observer 套餐名(来自 observer_check_package.yaml 的顶层 key,如 "ad"、"k8s_basic"、"deep");与 observer_tasks 互斥,observer_tasks 优先 |
obproxy_cases |
OBProxy 套餐名(来自 obproxy_check_package.yaml,如 "proxy");与 obproxy_tasks 互斥 |
observer_tasks |
指定 observer 具体任务名或正则(分号分隔),如 "cluster.*" 或 "disk.data_disk_full;cluster.no_leader" |
obproxy_tasks |
指定 OBProxy 具体任务名或正则(分号分隔) |
store_dir |
输出目录 |
cluster_config_path |
非默认集群的短名或完整路径 |
所有参数均省略 → 加载全部任务,排除 filter 套餐中的项,执行完整默认巡检套件。
check_cluster() # 全量巡检(排除 filter 套餐)
check_cluster(cases="k8s_basic") # 跑 k8s_basic 套餐中的所有任务
check_cluster(observer_tasks="cluster.*") # 只跑 cluster 目录下所有任务(正则匹配)
check_cluster(observer_tasks="disk.data_disk_full;cluster.no_leader") # 指定多个任务(分号分隔)
check_cluster(cases="k8s_basic", cluster_config_path="prod") # 指定非默认集群
六、RCA 根因分析
6.1 rca_list — 列出 RCA 场景
rca_list()
6.2 rca_run — 执行 RCA
| 参数 | 说明 |
|---|---|
scene |
RCA 场景名(从 rca_list 或 obdiag-rca skill 场景速查表获取) |
cluster_config_path |
非默认集群 |
注意:agent 工具
rca_run不支持--env参数。部分 scene 在 CLI 层需要--env,通过 agent 调用时直接传scene即可;若因缺少 env 参数导致失败,进入obdiag-rca手动降级步骤。
rca_run(scene="disconnection")
rca_run(scene="major_hold")
行动原则:
- 用户描述故障症状时,加载
obdiag-rcaskill,按其"场景速查表"将症状(如"合并卡住"、"断连"、"OOM")映射到正确scene名称;再调rca_run。 - 不确定 scene 时可先调
rca_list确认 scene 在当前环境中可用。 rca_run无结论时,按obdiag-rca的手动降级步骤继续分析,不要直接告知用户"无法定位"。- 完全无匹配场景时,转向
gather_log+analyze_log手动排查。
七、辅助工具
tool_io_performance — 磁盘 IO 检测
tool_io_performance(disk="sda") # 检测 sda 盘
tool_io_performance(disk="data") # 检测 data 盘
tool_io_performance(date="20240101") # 查历史数据
tool_sql_syntax — SQL 语法/语义检验
使用 EXPLAIN 验证,不实际执行 SQL。
| 参数 | 说明 |
|---|---|
sql |
单条 SQL 语句(必填) |
env |
可选连接覆盖,字符串列表,格式 ["host=127.0.0.1", "port=2881", "user=root@sys"] |
cluster_config_path |
非默认集群名或路径 |
tool_sql_syntax(sql="SELECT * FROM t1 WHERE id = 1")
tool_sql_syntax(sql="SELECT * FROM t1", env=["host=10.0.0.1", "port=2881"])
八、工具选择速查表
| 用户意图 | 应调用的工具 |
|---|---|
| 首次使用,无配置文件 | generate_obdiag_config |
| 查看有哪些集群 | list_obdiag_clusters |
| 切换集群 | 在后续工具传 cluster_config_path |
| 收集 observer/election/rootservice 日志 | gather_log |
| 分析 observer 日志内容 | analyze_log |
| 收集 OBProxy 日志 | gather_obproxy_log |
| 收集 OMS/Ghana/CDC 日志 | gather_oms_log |
| 系统资源快照 | gather_sysstat |
| 火焰图 / pstack | gather_perf |
| 活跃会话历史 | gather_ash |
| AWR 性能报告 | gather_awr |
| 按 trace_id 收执行计划 | gather_plan_monitor |
| 集群健康巡检 | check_list → check_cluster(全量默认);cases=套餐名 或 observer_tasks=任务名/正则 缩小范围 |
| 根因分析 | rca_list → rca_run |
| 磁盘 IO 检测 | tool_io_performance |
| SQL 语法验证 | tool_sql_syntax |
九、通用行动原则
- 配置优先:调任何 gather/analyze/check/rca 前,先确认
show_current_cluster返回有效路径;无效则引导用户生成配置。 - 采集+分析链式:用户同时要求"采集+分析"时,在同一轮内完成:gather → file_list → file_read/analyze_log → 总结,不得仅 gather 后停止。
- 日志边界严守:
analyze_log仅用于 observer 侧;OBProxy 日志用gather_obproxy_log后 file_read;OMS 日志用gather_oms_log后 file_read。 - 时间窗默认值:用户未指定时间时默认
since="30m",或询问用户。 - 零命中处理:analyze_log 或 file_read 无匹配时,不要回复"未发现问题"——建议扩大
since、去掉grep过滤或换scope。 - 只读原则:
db_query仅执行只读 SQL;涉及ALTER SYSTEM等变更时,输出建议 SQL 由 DBA 手工执行。