bigywater.tech
ZooKeeper · 68

AdminServer REST 接口

AdminServer 是 ZooKeeper 3.5 起内置的 HTTP 管理接口,默认端口 8080,命令比四字命令多、输出是 JSON。这篇在自己选定的端口上开启它,看有哪些命令、返回什么、和 mntr 的关系。

28 个命令
GET /commands 列出的 AdminServer 命令数
JSON
每个命令返回 JSON,包含 error 字段
默认 8080
很容易与别的服务冲突,要改 admin.serverPort

开启与命令列表

实测 · 本机执行输出
  GET /commands → 200,Content-Type: None;返回的是一个 HTML 链接列表,可用命令 28 个:['configuration', 'connection_stat_reset', 'connections', 'dirs', 'dump', 'environment', 'get_trace_mask', 'hash', 'initial_configuration', 'is_read_only', 'last_snapshot', 'leader', 'monitor', 'observer_connection_stat_reset', 'observers', 'restore', 'ruok', 'server_stats', 'set_trace_mask', 'snapshot', 'stat_reset', 'stats', 'system_properties', 'voting_view', 'watch_summary', 'watches', 'watches_by_path', 'zabstate']

默认端口 8080 是个常见的冲突点(很多服务都用它),我在本机就遇到了这种情况,所以全部实验里都关闭了 AdminServer(admin.enableServer=false),只有这一篇用自选的端口打开它。

命令的返回

实测 · 本机执行输出
  /commands/ruok → 200 {'command': 'ruok', 'error': None}
  /commands/stats → 200 {'version': '3.9.6-${mvngit.commit.id}, built on 2026-09-14 21:34 UTC', 'read_only': False, 'server_stats': '<dict 18>', 'client_response': '<dict 3>', 'node_count': 25, 'connections': '<list 1>'}
  /commands/monitor → 200 {'version': '3.9.6-${mvngit.commit.id}, built on 2026-09-14 21:34 UTC', 'server_state': 'standalone', 'ephemerals_count': 0, 'num_alive_connections': 1, 'avg_latency': 3.5238, 'outstanding_requests': 0}
  /commands/configuration → 200 {'client_port': 7300, 'data_dir': '<实验目录>', 'data_log_dir': '/privat
  /commands/connections → 200 {'connections': '<list 1>', 'secure_connections': '<list 0>', 'command': 'connections', 'error': None}

与四字命令的关系

实测 · 本机执行输出
  monitor 里的 znode_count = 25 | mntr 里的 zk_znode_count = 25 | monitor 里 outstanding_requests = 0
  monitor 的字段数: 596 | mntr 的指标数: 402

错误处理

实测 · 本机执行输出
  GET /commands/nope → 200 {
  "command" : "nope",
  "error" : "Unknown command: nope"
}

AdminServer 也没有内置认证(是否需要 HTTPS / 客户端证书用 admin.portUnification、admin.forceHttps 之类的参数,本文没有测),所以与四字命令一样,应当只绑定内网或本机。

分步演示

AdminServer
本步的对象

    本文用到的工具与边界

    • 本机 macOS 27 / ZooKeeper 3.9.6(brew 安装的 jar,用 java -cp 直接启动自己的实例,OpenJDK 17 Temurin,JVM 堆 128 MiB)/ 本机回环端口 7300+,数据在临时目录;默认 tickTime=2000;计时用 time.perf_counter,数字每次运行会有小幅抖动。单机;AdminServer 端口 7392,绑定 127.0.0.1;请求用 Python http.client
    • 没有验证:HTTPS / 认证配置、POST 请求(部分命令如 snapshot 需要)、命令的完整字段含义、与 Prometheus 端点(第 63 篇)的关系
    京ICP备2026067502号-1京公网安备11010502063487号