# 诊断工具命令组

OBD 集成了Oceanbase Diagnostic Tool(简称: obdiag) 工具，obdiag现有功能包含了对于OceanBase日志、SQL Audit以及OceanBase进程堆栈等信息进行的扫描收集，支持通过OBD实现诊断信息的一键采集。

## obd obdiag deploy
使用该命令可部署obdiag工具可在本机安装部署obdiag

```shell
obd obdiag deploy
```


## obd obdiag gather

使用该命令可调用obdiag工具进行OceanBase相关的诊断信息收集

```shell
obd obdiag gather <gather type> <deploy name> [options]
```

gather type包含：

* log：一键收集所属OceanBase集群的日志

* sysstat：一键收集所属OceanBase集群主机信息

* clog：一键收集所属OceanBase集群(clog日志)

* slog：一键收集所属OceanBase集群(slog日志)

* plan_monitor：一键收集所属OceanBase集群指定trace_id的并行SQL的执行详情信息

* stack：一键收集所属OceanBase集群的堆栈信息

* perf：一键收集所属OceanBase集群的perf信息（扁鹊图、perf火焰图、pstack火焰图）

* obproxy_log：一键收集所属OceanBase集群所依赖的obproxy组件的日志

* all：一键统一收集所属OceanBase集群的诊断信息，包括收集OceanBase日志/主机信息/OceanBase堆栈信息/OceanBase clog、slog日志/OceanBase perf信息（扁鹊图、perf火焰图、pstack火焰图)

## obd obdiag gather log

使用该命令可以一键收集所属OceanBase集群的日志

```shell
obd obdiag gather log <deploy name> [options]
```

参数 `deploy name` 为部署集群名，可以理解为配置文件的别名。

参数说明见下表

| 选项名                 | 是否必选 | 数据类型   | 默认值                       | 说明                                                                |
|---------------------|------|--------|---------------------------|-------------------------------------------------------------------|
| --from    | 否    | string | /                | 日志收集的开始时间,格式为: "yyyy-mm-dd hh:mm:ss"，需要加引号 ，例如"1970-01-01 12:00:00"  |
| --to    | 否    | string | /                | 日志收集的结束时间,格式为: "yyyy-mm-dd hh:mm:ss"，需要加引号 ，例如"1970-01-01 13:00:00"  |
| --since    | 否    | string | /                | 日志收集最近的某段时间,格式为: n m/h/d，m表示分钟, h表示小时, d表示天，例如 30m表示收集最近30分钟的日志  |
| --scope    | 否    | string | all               | 选择收集的OceanBase日志类型，choices=[observer, election, rootservice, all], default=all  |
| --grep    | 否    | string | /                | 选择查询的关键字  |
| --encrypt   | 否    | string | false                | 回传的文件是否加密，选项[true,false]  |
| --store_dir   | 否    | string |   默认命令执行的当前路径              | 存储结果的本地路径 |
| --obdiag_dir   | 否    | string |   $HOME/oceanbase-diagnostic-tool     | obdiag的安装目录 |


## obd obdiag gather sysstat

使用该命令可以一键收集所属OceanBase集群主机信息(主机dmesg信息/主机cpu/内存信息)

```shell
obd obdiag gather sysstat <deploy name> [options]
```

参数 `deploy name` 为部署集群名，可以理解为配置文件的别名。

参数说明见下表

| 选项名                 | 是否必选 | 数据类型   | 默认值                       | 说明                                                                |
|---------------------|------|--------|---------------------------|-------------------------------------------------------------------|
| --store_dir   | 否    | string |   默认命令执行的当前路径              | 存储结果的本地路径 |
| --obdiag_dir   | 否    | string |   $HOME/oceanbase-diagnostic-tool     | obdiag的安装目录 |

## obd obdiag gather clog

使用该命令可以一键收集所属OceanBase集群的clog日志,需要收集的集群节点上部署过ob_admin工具

```shell
obd obdiag gather clog <deploy name> [options]
```

参数 `deploy name` 为部署集群名，可以理解为配置文件的别名。

参数说明见下表

| 选项名                 | 是否必选 | 数据类型   | 默认值                       | 说明                                                                |
|---------------------|------|--------|---------------------------|-------------------------------------------------------------------|
| --from    | 否    | string | /                | 日志收集的开始时间,格式为: "yyyy-mm-dd hh:mm:ss"，需要加引号 ，例如"1970-01-01 12:00:00"  |
| --to    | 否    | string | /                | 日志收集的结束时间,格式为: "yyyy-mm-dd hh:mm:ss"，需要加引号 ，例如"1970-01-01 13:00:00"  |
| --since    | 否    | string | /                | 日志收集最近的某段时间,格式为: n m/h/d，m表示分钟, h表示小时, d表示天，例如 30m表示收集最近30分钟的日志  |
| --encrypt   | 否    | string | false                | 回传的文件是否加密，选项[true,false]  |
| --store_dir   | 否    | string |   默认命令执行的当前路径              | 存储结果的本地路径 |
| --obdiag_dir   | 否    | string |   $HOME/oceanbase-diagnostic-tool     | obdiag的安装目录 |

## obd obdiag gather slog

使用该命令可以一键收集所属OceanBase集群的slog日志,需要收集的集群节点上部署过ob_admin工具

```shell
obd obdiag gather slog <deploy name> [options]
```

参数 `deploy name` 为部署集群名，可以理解为配置文件的别名。

参数说明见下表

| 选项名                 | 是否必选 | 数据类型   | 默认值                       | 说明                                                                |
|---------------------|------|--------|---------------------------|-------------------------------------------------------------------|
| --from    | 否    | string | /                | 日志收集的开始时间,格式为: "yyyy-mm-dd hh:mm:ss"，需要加引号 ，例如"1970-01-01 12:00:00"  |
| --to    | 否    | string | /                | 日志收集的结束时间,格式为: "yyyy-mm-dd hh:mm:ss"，需要加引号 ，例如"1970-01-01 13:00:00"  |
| --since    | 否    | string | /                | 日志收集最近的某段时间,格式为: n m/h/d，m表示分钟, h表示小时, d表示天，例如 30m表示收集最近30分钟的日志  |
| --encrypt   | 否    | string | false                | 回传的文件是否加密，选项[true,false]  |
| --store_dir   | 否    | string |   默认命令执行的当前路径              | 存储结果的本地路径 |
| --obdiag_dir   | 否    | string |   $HOME/oceanbase-diagnostic-tool     | obdiag的安装目录 |


## obd obdiag gather plan_monitor

该命令可以一键收集所属OceanBase集群指定的trace_id并行SQL的执行详情信息，便于在AP场景下分析SQL执行慢的算子层面的原因。说明：该功能仅在OB > 3.0版本才支持

```shell
obd obdiag gather plan_monitor <deploy name> [options]
```

参数 `deploy name` 为部署集群名，可以理解为配置文件的别名。

参数说明见下表

| 选项名                 | 是否必选 | 数据类型   | 默认值                       | 说明                                                                |
|---------------------|------|--------|---------------------------|-------------------------------------------------------------------|
| -c/--components | 否    | string | oceanbase-ce        | 用于访问oceanbase库的组件  |
| --trace_id   | 是    | string |                 | OB 4.0以下版本从gv$sql_audit中查到的trace_id, OB 4.0及以上版本从gv$ob_sql_audit中查到的trace_id|
| -u/--user   | 否    | string |   root              | 可访问oceanbase库的用户|
| -p/--password   | 否    | string |                 | 可访问oceanbase库的用户的密码|
| --store_dir   | 否    | string |   默认命令执行的当前路径              | 存储结果的本地路径 |
| --obdiag_dir   | 否    | string |   $HOME/oceanbase-diagnostic-tool     | obdiag的安装目录 |


## obd obdiag gather stack

该命令可以一键收集所属OceanBase集群的堆栈信息，该采集项暂不支持arm版本。

```shell
obd obdiag gather stack <deploy name> [options]
```

参数 `deploy name` 为部署集群名，可以理解为配置文件的别名。

参数说明见下表

| 选项名                 | 是否必选 | 数据类型   | 默认值                       | 说明                                                                |
|---------------------|------|--------|---------------------------|-------------------------------------------------------------------|
| --store_dir   | 否    | string |   默认命令执行的当前路径              | 存储结果的本地路径 |
| --obdiag_dir   | 否    | string |   $HOME/oceanbase-diagnostic-tool     | obdiag的安装目录 |

## obd obdiag gather perf

该命令可以一键收集所属OceanBase集群的perf信息（扁鹊图、perf火焰图、pstack火焰图）

```shell
obd obdiag gather perf <deploy name> [options]
```

参数 `deploy name` 为部署集群名，可以理解为配置文件的别名。

参数说明见下表

| 选项名                 | 是否必选 | 数据类型   | 默认值                       | 说明                                                                |
|---------------------|------|--------|---------------------------|-------------------------------------------------------------------|
| --scope    | 否    | string | all               | 用于选择性的收集指定的perf信息, 可选项目[sample, flame, pstack,all] |
| --store_dir   | 否    | string |   默认命令执行的当前路径              | 存储结果的本地路径 |
| --obdiag_dir   | 否    | string |   $HOME/oceanbase-diagnostic-tool     | obdiag的安装目录 |

## obd obdiag gather obproxy_log

使用该命令可以一键收集所属OceanBase集群所依赖的obproxy集群的日志

```shell
obd obdiag gather obproxy_log <deploy name> [options]
```

参数 `deploy name` 为部署集群名，可以理解为配置文件的别名。

参数说明见下表

| 选项名                 | 是否必选 | 数据类型   | 默认值                       | 说明                                                                |
|---------------------|------|--------|---------------------------|-------------------------------------------------------------------|
| --from    | 否    | string | /                | 日志收集的开始时间,格式为: "yyyy-mm-dd hh:mm:ss"，需要加引号 ，例如"1970-01-01 12:00:00"  |
| --to    | 否    | string | /                | 日志收集的结束时间,格式为: "yyyy-mm-dd hh:mm:ss"，需要加引号 ，例如"1970-01-01 13:00:00"  |
| --since    | 否    | string | /                | 日志收集最近的某段时间,格式为: n m/h/d，m表示分钟, h表示小时, d表示天，例如 30m表示收集最近30分钟的日志  |
| --scope    | 否    | string | all                | 选择查询的obproxy日志类型，可选项[obproxy, obproxy_digest, obproxy_stat, obproxy_slow, obproxy_limit, all]  |
| --grep    | 否    | string | /                | 选择查询的关键字  |
| --encrypt   | 否    | string | false                | 回传的文件是否加密，选项[true,false]  |
| --store_dir   | 否    | string |   默认命令执行的当前路径              | 存储结果的本地路径 |
| --obdiag_dir   | 否    | string |   $HOME/oceanbase-diagnostic-tool     | obdiag的安装目录 |



## obd obdiag gather all

使用该命令可以一键统一收集所属OceanBase集群的诊断信息，包括收集OceanBase日志/主机信息/OceanBase堆栈信息/OceanBase clog、slog日志/OceanBase perf信息（扁鹊图、perf火焰图、pstack火焰图)

```shell
obd obdiag gather all <deploy name> [options]
```

参数 `deploy name` 为部署集群名，可以理解为配置文件的别名。

参数说明见下表

| 选项名                 | 是否必选 | 数据类型   | 默认值                       | 说明                                                                |
|---------------------|------|--------|---------------------------|-------------------------------------------------------------------|
| --from    | 否    | string | /                | 日志收集的开始时间,格式为: "yyyy-mm-dd hh:mm:ss"，需要加引号 ，例如"1970-01-01 12:00:00"  |
| --to    | 否    | string | /                | 日志收集的结束时间,格式为: "yyyy-mm-dd hh:mm:ss"，需要加引号 ，例如"1970-01-01 13:00:00"  |
| --since    | 否    | string | /                | 日志收集最近的某段时间,格式为: n m/h/d，m表示分钟, h表示小时, d表示天，例如 30m表示收集最近30分钟的日志  |
| --scope    | 否    | string | all                | 选择收集的OceanBase日志类型，choices=[observer, election, rootservice, all], default=all  |
| --grep    | 否    | string | /                | 选择查询的关键字  |
| --encrypt   | 否    | string | false                | 回传的文件是否加密，选项[true,false]  |
| --store_dir   | 否    | string |   默认命令执行的当前路径              | 存储结果的本地路径 |
| --obdiag_dir   | 否    | string |   $HOME/oceanbase-diagnostic-tool     | obdiag的安装目录 |





