blob: 6116eae3bfb10daf8cf8e3ba8fa649795a43241e [file] [view]
# `dorisctl` 使用指南
> 此文档由AI生成,仅供参考。
`dorisctl` Doris Operator 自带的命令行工具,用于从集群前端(FE)拉取节点元数据,帮助运维人员快速排查集群状态。它通过 FE 暴露的 MySQL 协议执行 `SHOW FRONTENDS` / `SHOW BACKENDS` 等语句,因此使用前需要确保能够以有权限的账号连接到 FE
> 当前版本聚焦于只读能力,核心命令为 `get`。未来扩展命令时,文档会随版本更新。
## 构建与安装
仓库根目录的 `Makefile` 已内置构建流程。
- **推荐方式**:在仓库根目录执行 `make build`,可同时生成 `bin/dorisctl``bin/dorisoperator` 等二进制。
- **单独构建**:执行 `go build -o bin/dorisctl ./cmd/dorisctl`
构建完成后,将 `bin/` 目录加入 `PATH`,或直接使用绝对路径运行。
## 连接前的准备与全局参数
所有子命令共享同一组全局参数,用于描述 FE 连接信息:
| 参数 | 说明 | 备注 |
| --- | --- | --- |
| `--fe-host` | FE 对外访问地址 | **必填**。可以是域名或 IP |
| `--query-port` | FE MySQL 协议端口 | 默认 `9030`。如果 FE 使用自定义端口需要显式指定。 |
| `--user` | 登录用户名 | **必填**。必须具备执行 `SHOW FRONTENDS/BACKENDS` 的权限。 |
| `--password` | 登录密码 | 可以通过环境变量/交互方式置入,命令行将回显。 |
| `--ssl-ca` | CA 根证书路径 | 如果 FE 启用了 TLS,则需同时提供 `--ssl-cert` `--ssl-key` |
| `--ssl-cert` | 客户端证书路径 | |
| `--ssl-key` | 客户端私钥路径 | |
这些参数会传递给内部的 Doris 客户端(`pkg/common/cmd/util/client.go`),后者基于 `mysql` 驱动建立连接。TLS 选项存在缺一不可的约束:只要指定了 `--ssl-ca`,就必须同时提供 `--ssl-cert` `--ssl-key`
### 认证与权限小贴士
- 建议为 `dorisctl` 准备只读账号,至少授予 `SHOW FRONTENDS``SHOW BACKENDS` 权限。
- 若连接失败或权限不足,`dorisctl` 会直接输出驱动返回的错误信息,可据此排查网络、防火墙或账号策略问题。
## 基本用法
命令模板:
```
dorisctl [全局参数] <子命令> <资源类型> <资源标识> [命令参数]
```
- 全局参数可以放在命令任意位置,最佳实践是在子命令前显式传入。
- 当前仅实现 `get` 子命令,资源类型支持 `node``computegroup` 为预留关键字,暂未实现(调用会无输出)。
### `get` ——查询节点元数据
`get` 子命令用于查看单个 FE BE 节点的详细状态。执行流程如下:
1. 建立到 FE MySQL 连接。
2. 顺序执行 `SHOW FRONTENDS` `SHOW BACKENDS`
3. 根据传入的 `资源标识`(节点 `Host` 字段)匹配到对应记录。
4. 将结果以 JSON 形式输出到标准输出。
语法:
```
dorisctl [全局参数] get node <host> [-o <输出选项>]
```
- `<host>` 必须与 FE/BE `SHOW` 结果中的 `Host` 字段完全一致。
- 如果目标节点在两类列表均不存在,将不会返回内容(也不报错)。
#### 输出控制 `-o, --output`
- 默认输出为格式化 JSON
- 当使用 `-o custom-columns=<字段路径>` 时,可以提取指定字段:
- 常规字段采用 `gjson` 语法,例如:`-o custom-columns=role` 输出 FE 的角色。
- 当字段位于 BE 的标签(`Tag`JSON 字符串)内时,可使用 `tag.<子字段>`,工具会自动展开标签 JSON。例如:
```bash
dorisctl --fe-host fe.example.com \
--user monitor --password secret \
get node be-1.example.com \
-o custom-columns=tag.compute_group_name
```
如果标签缺失或字段不存在,将返回空行。
> 目前 `yaml` 等选项并未单独实现,传入 `-o yaml` 时与默认输出相同。
#### 示例
- **查看 FE 节点详情**
```bash
dorisctl --fe-host fe-1.prod.svc.cluster.local \
--user monitor --password ***** \
get node fe-1.prod.svc.cluster.local
```
- **查询 BE 标签中的计算组信息**
```bash
dorisctl --fe-host fe-1.prod.svc.cluster.local \
--user monitor --password ***** \
get node be-3.prod.svc.cluster.local \
-o custom-columns=tag.compute_group_name
```
- **启用 TLS 访问 FE**
```bash
dorisctl --fe-host fe-ssl.prod.svc.cluster.local \
--query-port 9430 \
--user monitor --password ***** \
--ssl-ca /etc/doris/ca.pem \
--ssl-cert /etc/doris/client.crt \
--ssl-key /etc/doris/client.key \
get node be-3.prod.svc.cluster.local
```
## 常见问题排查
| 场景 | 现象 | 建议处理 |
| --- | --- | --- |
| 连接失败 | 输出类似 `dial tcp: lookup ...` `i/o timeout` | 检查 FE 地址/端口、防火墙或 K8s Service 是否暴露 MySQL 端口。 |
| 认证失败 | 输出 `Access denied for user` | 确认用户/密码或账号权限;若使用 LDAP/外部认证,需在 FE 侧开启相应配置。 |
| 输出为空 | 命令执行正常但无内容 | 核实 `Host` 是否与 Doris 显示字段一致,必要时先登录 FE 手动执行 `SHOW FRONTENDS`/`SHOW BACKENDS` |
| `custom-columns` 返回空字符串 | 字段名称不匹配 | 使用 `dorisctl ... get node <host>` 默认输出查看真实 JSON 字段,确认路径后再组合 `custom-columns` |
## 后续规划
- `computegroup` 资源读取逻辑目前为空壳,如需此能力可关注后续版本或自行在 `pkg/common/cmd/get/get.go` 中实现。
- 如果需要批量查询/过滤,可考虑在外层脚本结合 `dorisctl` `jq`/`gjson` 等工具。
如在使用过程中遇到新的问题,欢迎在仓库 Issue 中反馈。