88
99安装方式与使用:
1010``` bash
11- pip install openmldb-tool # openmldb-tool[rpc ]
11+ pip install openmldb-tool # openmldb-tool[pb ]
1212openmldb_tool # 注意下划线
1313```
1414有以下几个子命令可选择执行:
1515``` bash
16- usage: openmldb_tool [-h] [--helpfull] {status,inspect,test,static-check} ...
16+ usage: openmldb_tool [-h] [--helpfull] {status,inspect,rpc, test,static-check} ...
1717```
18- 只有` static-check ` 静态检查命令需要指定` --dist_conf ` 参数,该参数指定OpenMLDB节点分布的配置文件。其他命令只需要` --cluster ` 参数,格式为` <zk_cluster>/<zk_root_path> ` ,默认为镜像中的OpenMLDB集群地址` 127.0.0.1:2181/openmldb ` 。如果是自行设置的OpenMLDB集群,请配置此参数。
18+
19+ 注意` -c/--cluster ` 参数,格式为` <zk_cluster>/<zk_root_path> ` ,默认将访问` 127.0.0.1:2181/openmldb ` 。如果是自行设置的OpenMLDB集群,请配置此参数。其他参数根据子命令不同而不同,可以使用` -h ` 查看,或查看各个子命令的详细文档。
20+
21+ ### 一键inspect
22+
23+ ` openmldb_tool inspect [--cluster=0.0.0.0:2181/openmldb] ` 可以一键查询,得到完整的集群状态报告。如果需要局部视角或额外的诊断功能,才需要其他子命令。
24+
25+ 报告分为几个板块,其中如果所有表都是健康的,不会展示Ops和Partitions板块。用户首先看报告末尾的总结 summary & hint,如果存在server offline(红色),需先重启server,保证server尤其是TabletServer都在线。server重启后,集群可能会尝试自动修复,自动修复也可能会失败,所以,用户有必要等待一定时间后再次inspect。此时如果仍然有不健康的表,可以检查它们的状态,Fatal表需要尽快修复,它们可能会读写失败,Warn表,用户可以考虑推迟修复。修复方式见报告末尾提供的文档。
26+
27+ ` inspect ` 可配置参数除了` --cluster/-c ` ,还可配置不显示彩色` --nocolor/-noc ` 方便复制,以及` --table_width/-tw n ` 配置表格宽度,` --offset_diff_thresh/-od n ` 配置offset diff的报警阈值。
28+
29+ ```
30+ diagnosing cluster xxx
31+
32+
33+ Server Detail
34+ {server map}
35+ {server online/offline report}
36+
37+
38+ Table Partitions Detail
39+ tablet server order: {tablet ip -> idx}
40+ {partition tables of unhealthy tables}
41+ Example:
42+ {a detailed description of partition table}
43+
44+
45+ Ops Detail
46+ > failed ops do not mean cluster is unhealthy, just for reference
47+ last one op(check time): {}
48+ last 10 ops != finished:
49+ {op list}
50+
51+
52+
53+ ==================
54+ Summary & Hint
55+ ==================
56+ Server:
57+
58+ {online | offline servers ['[tablet]xxx'], restart them first}
59+
60+ Table:
61+ {all healthy | unhealthy tables desc}
62+ []Fatal/Warn table, {read/write may fail or still work}, {repair immediatly or not}
63+ {partition detail: if leader healthy, if has unhealthy replicas, if offset too large, related ops}
64+
65+ Make sure all servers online, and no ops for the table is running.
66+ Repair table manually, run recoverdata, check https://openmldb.ai/docs/zh/main/maintain/openmldb_ops.html.
67+ Check 'Table Partitions Detail' above for detail.
68+ ```
69+
70+ ### 其他常用命令
71+
72+ 除了一键inspect,在这样几个场景中,我们推荐使用诊断工具的子命令来帮助用户判断集群状态、简化运维。
73+
74+ - 部署好集群后,可以使用` test ` 测试集群是否能正常工作,不需要用户手动测试。如果发现问题,再使用` inspect ` 诊断。
75+ - 组件都在线,但出现超时或错误提示某组件无法连接时,可以使用` status --conn ` 检查与各组件的连接,会打印出简单访问的耗时。也可以用它来测试客户端主机与集群的连接情况,及时发现网络隔离。
76+ - 离线job如果出现问题,` SHOW JOBLOG id ` 可以查看日志,但经验较少的用户可能会被日志中的无关信息干扰,可以使用` inspect job ` 来提取job日志中的关键信息。
77+ - 离线job太多时,CLI中的展示会不容易读,可以使用` inspect offline ` 筛选所有failed的job,或者` inspect job --state <state> ` 来筛选出特定状态的job。
78+ - 在一些棘手的问题中,可能需要用户通过RPC来获得一些信息,帮助定位问题。` openmldb_tool rpc ` 可以帮助用户简单快速地调用RPC,降低运维门槛。
79+ - 没有Prometheus监控时,可以通过` inspect online --dist ` 获得数据分布信息。
80+ - 如果你的操作节点到各个组件的机器是ssh免密的,那么,可以使用` static-check ` 检查配置文件是否正确,版本是否统一,避免部署失败。还可以一键收集整个集群的日志,方便打包并提供给开发人员分析。
1981
2082## 子命令详情
2183
@@ -29,7 +91,8 @@ usage: openmldb_tool status [-h] [--helpfull] [--diff]
2991optional arguments:
3092 -h, --help show this help message and exit
3193 --helpfull show full help message and exit
32- --diff check if all endpoints in conf are in cluster. If set, need to set `--conf_file`
94+ --diff check if all endpoints in conf are in cluster. If set, need to set `-f,--conf_file`
95+ --conn check network connection of all servers
3396```
3497
3598- 简单查询集群状态:
@@ -48,6 +111,11 @@ optional arguments:
48111 +-----------------+-------------+---------------+--------+---------+
49112 ```
50113
114+ - 检查并测试集群链接与版本:
115+ ```
116+ openmldb_tool status --conn
117+ ```
118+
51119#### 检查配置文件与集群状态是否一致
52120
53121如果指定` --diff ` 参数,会检查配置文件中的所有节点是否都在已经启动的集群中,如果有节点不在集群中,会输出异常信息。如果集群中有节点不在配置文件中,不会输出异常信息。需要配置` -f,--conf_file ` ,例如,你可以在镜像里这样检查:
@@ -57,7 +125,8 @@ openmldb_tool status --diff -f=/work/openmldb/conf/hosts
57125
58126### inspect 检查
59127
60- ` inspect ` 用于检查集群的在线和离线两个部分是否正常工作,可以选择单独检查` online ` 或` offline ` ,不指定则都检查。可以定期执行检查,以便及时发现异常。
128+ 如果是为了检查集群状态,更推荐一键` inspect ` 获取集群完整检查报告,` inspect ` 子命令是更具有针对性的检查。
129+
61130```
62131openmldb_tool inspect -h
63132usage: openmldb_tool inspect [-h] [--helpfull] {online,offline,job} ...
@@ -68,19 +137,26 @@ positional arguments:
68137 offline only inspect offline jobs.
69138 job show jobs by state, show joblog or parse joblog by id.
70139```
71- 在线检查会检查集群中的表状态(包括系统表),并输出有异常的表,包括表的状态,分区信息,副本信息等,等价于` SHOW TABLE STATUS ` 并筛选出有异常的表。如果发现集群表现不正常,请先检查下是否有异常表。例如,` SHOW JOBS ` 无法正常输出历史任务时,可以` inspect online ` 检查一下是否是job系统表出现问题。
140+
141+ #### online在线检查
142+
143+ ` inspect online ` 检查在线表的健康状态,并输出有异常的表,包括表的状态,分区信息,副本信息等,等价于` SHOW TABLE STATUS ` 并筛选出有异常的表。
72144
73145##### 检查在线数据分布
74146
75- 在线检查中, 可以使用` inspect online --dist ` 检查在线数据分布,默认检查所有数据库,可以使用` --db ` 指定要检查的数据库。若要查询多个数据库,请使用 ',' 分隔数据库名称。会输出数据库在各个节点上的数据分布情况。
147+ 可以使用` inspect online --dist ` 检查在线数据分布,默认检查所有数据库,可以使用` --db ` 指定要检查的数据库。若要查询多个数据库,请使用 ',' 分隔数据库名称。会输出数据库在各个节点上的数据分布情况。
76148
77- #### 离线检查
149+ #### offline离线检查
78150
79- 离线检查会输出最终状态为失败的任务(不检查“运行中”的任务),等价于` SHOW JOBS ` 并筛选出失败任务。
151+ ` inspect offline ` 离线检查会输出最终状态为失败的任务(不检查“运行中”的任务),等价于` SHOW JOBS ` 并筛选出失败任务。更多功能待补充 。
80152
81153#### JOB 检查
82154
83- JOB 检查会检查集群中的离线任务,可以使用` inspect job ` 或` inspect job --state all ` 查询所有任务,等价于` SHOW JOBS ` 并按job_id排序。使用` inspect job --state <state> ` 可以筛选出特定状态的日志,可以使用 ',' 分隔,同时查询不同状态的日志。例如:` inspect offline ` 相当于` inspect job --state failed,killed,lost ` 即筛选出所有失败的任务。
155+ JOB 检查是更灵活的离线任务检查命令,可以按条件筛选job,或针对单个job日志进行分析。
156+
157+ ##### 按state筛选
158+
159+ 可以使用` inspect job ` 或` inspect job --state all ` 查询所有任务,等价于` SHOW JOBS ` 并按job_id排序。使用` inspect job --state <state> ` 可以筛选出特定状态的日志,可以使用 ',' 分隔,同时查询不同状态的日志。例如:` inspect offline ` 相当于` inspect job --state failed,killed,lost ` 即筛选出所有失败的任务。
84160
85161以下是一些常见的state:
86162
@@ -93,8 +169,13 @@ JOB 检查会检查集群中的离线任务,可以使用`inspect job`或`inspe
93169
94170更多state信息详见[ Spark State] ( https://spark.apache.org/docs/3.2.1/api/java/org/apache/spark/launcher/SparkAppHandle.State.html ) ,[ Yarn State] ( https://hadoop.apache.org/docs/current/api/org/apache/hadoop/yarn/api/records/YarnApplicationState.html )
95171
172+ ##### 解析单个JOB日志
96173
97- 使用` inspect job --id <job_id> ` 查询指定任务的log日志,其结果会使用配置文件筛选出主要错误信息。如需更新配置文件,可以添加` --conf-update ` ,并且可以使用` --conf-url ` 配置镜像源,例如使用` --conf-url https://openmldb.ai/download/diag/common_err.yml ` 配置国内镜像。如果需要完整的日志信息,可以添加` --detail ` 获取详细信息。
174+ 使用` inspect job --id <job_id> ` 查询指定任务的log日志,其结果会使用配置文件筛选出主要错误信息。
175+
176+ 解析依靠配置文件,默认情况会自动下载。如需更新配置文件,可以` --conf-update ` ,它将会在解析前强制下载一次配置文件。如果默认下载源不合适,可以同时配置` --conf-url ` 配置镜像源,例如使用` --conf-url https://openmldb.ai/download/diag/common_err.yml ` 配置国内镜像。
177+
178+ 如果只需要完整的日志信息而不是解析日志的结果,可以使用` --detail ` 获取详细信息,不会打印解析结果。
98179
99180### test 测试
100181
@@ -185,22 +266,22 @@ nameserver:
185266
186267如果检查配置文件或日志,将会把收集到的文件保存在`--collect_dir`中,默认为`/tmp/diag_collect`。你也也可以访问此目录查看收集到的配置或日志,进行更多的分析。
187268
188-
189269# ### 检查示例
190270
191271在镜像容器中可以这样静态检查:
192272` ` ` bash
193273openmldb_tool static-check --conf_file=/work/openmldb/conf/hosts -VCL --local
194274` ` `
195275
196- # ## rpc
276+ # ## RPC 接口
277+
278+ ` openmldb_tool` 还提供了一个RPC接口,它可以让我们发送RPC更容易,不需要定位Server的IP,拼接RPC方法URL路径,也可以提示所有RPC方法和RPC方法的输入结构。使用方式是`openmldb_tool rpc`,例如,`openmldb_tool rpc ns ShowTable --field '{"show_all":true}'`可以调用`nameserver`的`ShowTable`接口,获取表的状态信息。
197279
198- ` openmldb_tool ` 还提供了一个RPC接口,但它是一个额外组件,需要通过`pip install openmldb-tool[rpc]`安装。使用方式是`openmldb_tool rpc`,例如, `openmldb_tool rpc ns ShowTable --field '{"show_all":true}'`可以调用`nameserver`的`ShowTable`接口,获取表的状态信息 。
280+ 其中组件不使用ip,可以直接使用角色名。NameServer与TaskManager只有一个活跃,所以我们用ns和tm来代表这两个组件。而TabletServer有多个,我们用`tablet1`,`tablet2`等来指定某个TabletServer,从1开始,顺序可通过 `openmldb_tool rpc`或`openmldb_tool status`来查看 。
199281
200- NameServer与TaskManager只有一个活跃,所以我们用ns和tm来代表这两个组件。
201- 而TabletServer有多个,我们用`tablet1`,`tablet2`等来指定某个TabletServer,顺序可通过`openmldb_tool rpc`或`openmldb_tool status`来查看。
282+ 如果对RPC服务的方法或者输入参数不熟悉,可以通过`openmldb_tool rpc <component> [method] --hint`查看帮助信息。但它是一个额外组件,需要通过`pip install openmldb-tool[pb]`安装。hint还需要额外的pb文件,帮助解析输入参数,默认是从`/tmp/diag_cache`中读取,如果不存在则自动下载。如果你已有相应的文件,或者已经手动下载,可以通过`--pbdir`指定该目录。自行编译pb文件,见[openmldb tool开发文档](https://github.com/4paradigm/OpenMLDB/blob/main/python/openmldb_tool/README.md#rpc)。
202283
203- 如果对RPC服务的方法或者输入参数不熟悉,可以通过`openmldb_tool rpc <component> [method] --hint`查看帮助信息。 例如:
284+ 例如:
204285` ` ` bash
205286$ openmldb_tool rpc ns ShowTable --hint
206287...
@@ -212,9 +293,7 @@ You should input json like this, ignore round brackets in the key and double quo
212293 "(optional)show_all": "bool"
213294}'
214295` ` `
215- hint还需要额外的pb文件,帮助解析输入参数,默认是从`/tmp/diag_cache`中读取,如果不存在则自动下载。如果你已有相应的文件,或者已经手动下载,可以通过`--pbdir`指定该目录。
216296
217297# # 附加
218298
219299可使用`openmldb_tool --helpfull`查看所有配置项。例如,`--sdk_log`可以打印sdk的日志(zk,glog),可用于调试。
220-
0 commit comments