scylla nodetool 有 API 吗?

Is there an API for scylla nodetool?

nodetool 有 API 吗?特别是nodetool tablestats

我看到有https://github.com/scylladb/scylla/tree/master/api/api-doc。这是寻找 API 的正确位置吗?

Scylla 服务器确实有一个 REST API,它的文档在您指向的 URL 处。当您启动 Scylla 服务器时,您也可以找到一个 Swagger UI:https://docs.scylladb.com/operating-scylla/rest/.

但是,请注意 nodetool,例如,不直接使用 API。相反,它与 Scylla JMX 代理对话,这是一个 Java 进程,实现了与 Cassandra 兼容的 JMX API。您仍然可以直接使用 REST API,但是您必须自己弄清楚 JMX 操作与 REST API 之间的映射。

对于像 nodetool tablestats 这样的东西,第一步是检查 JMX APIs nodetool 使用的是什么:

https://github.com/scylladb/scylla-tools-java/blob/master/src/java/org/apache/cassandra/tools/nodetool/TableStats.java

命令委托给 TableStatsHolder class:

https://github.com/scylladb/scylla-tools-java/blob/master/src/java/org/apache/cassandra/tools/nodetool/stats/TableStatsHolder.java#L117

它使用 ColumnFamilyStoreMBean JMX API 查询 table 统计信息。

你可以在scylla-jmx项目中找到JMXAPI的实现,找到ColumnFamilyStoreclass(没有MBean后缀):

https://github.com/scylladb/scylla-jmx/blob/master/src/main/java/org/apache/cassandra/db/ColumnFamilyStore.java

从 class 可以看出,例如,ColumnFamilyStore.getSSTableCountPerLevel() 方法委托给 column_family/sstables/per_level/<table name> REST API URL.

嗯,FWIW 我在这里通过直接访问 API 重新实现了 nodetool: https://github.com/scylladb/scylla-tools-java/pull/121

它有效,但在代码方面我会做一些重构以避免重复,否则它完全可用 nodetool over REST API(跳过 JMX 的“tablestats”)