dorisctl 使用指南

此文档由AI生成,仅供参考。

dorisctl 是 Doris Operator 自带的命令行工具,用于从集群前端(FE)拉取节点元数据,帮助运维人员快速排查集群状态。它通过 FE 暴露的 MySQL 协议执行 SHOW FRONTENDS / SHOW BACKENDS 等语句,因此使用前需要确保能够以有权限的账号连接到 FE。

当前版本聚焦于只读能力,核心命令为 get。未来扩展命令时,文档会随版本更新。

构建与安装

仓库根目录的 Makefile 已内置构建流程。

  • 推荐方式:在仓库根目录执行 make build,可同时生成 bin/dorisctlbin/dorisoperator 等二进制。
  • 单独构建:执行 go build -o bin/dorisctl ./cmd/dorisctl

构建完成后,将 bin/ 目录加入 PATH,或直接使用绝对路径运行。

连接前的准备与全局参数

所有子命令共享同一组全局参数,用于描述 FE 连接信息:

参数说明备注
--fe-hostFE 对外访问地址必填。可以是域名或 IP。
--query-portFE MySQL 协议端口默认 9030。如果 FE 使用自定义端口需要显式指定。
--user登录用户名必填。必须具备执行 SHOW FRONTENDS/BACKENDS 的权限。
--password登录密码可以通过环境变量/交互方式置入,命令行将回显。
--ssl-caCA 根证书路径如果 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 FRONTENDSSHOW BACKENDS 权限。
  • 若连接失败或权限不足,dorisctl 会直接输出驱动返回的错误信息,可据此排查网络、防火墙或账号策略问题。

基本用法

命令模板:

dorisctl [全局参数] <子命令> <资源类型> <资源标识> [命令参数]
  • 全局参数可以放在命令任意位置,最佳实践是在子命令前显式传入。
  • 当前仅实现 get 子命令,资源类型支持 nodecomputegroup 为预留关键字,暂未实现(调用会无输出)。

get ——查询节点元数据

get 子命令用于查看单个 FE 或 BE 节点的详细状态。执行流程如下:

  1. 建立到 FE 的 MySQL 连接。
  2. 顺序执行 SHOW FRONTENDSSHOW 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。例如:

      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 节点详情

    dorisctl --fe-host fe-1.prod.svc.cluster.local \
      --user monitor --password ***** \
      get node fe-1.prod.svc.cluster.local
    
  • 查询 BE 标签中的计算组信息

    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

    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 中实现。
  • 如果需要批量查询/过滤,可考虑在外层脚本结合 dorisctljq/gjson 等工具。

如在使用过程中遇到新的问题,欢迎在仓库 Issue 中反馈。