有没有nodetool的接口?尤其是nodetool tablestats
我看到那是https://github.com/scylladb/scylla/tree/master/api/api-doc。这是寻找API的正确位置吗?
发布于 2019-12-08 15:03:20
Scylla服务器确实有一个REST API,它的文档位于您指向的URL。您还可以在启动Scylla服务器时找到Swagger UI:https://docs.scylladb.com/operating-scylla/rest/。
但是需要注意的是,例如nodetool并没有直接使用该接口。相反,它与Scylla JMX代理通信,这是一个实现与Cassandra兼容的JMX API的Java进程。您仍然可以直接使用REST API,但您必须自己找出JMX操作和REST API之间的映射。
对于像nodetool tablestats这样的东西,第一步是检查JMX API节点工具使用的是什么:
该命令委托给TableStatsHolder类:
它使用ColumnFamilyStoreMBean JMX API来查询表统计信息。
您可以通过查找ColumnFamilyStore类(不带MBean后缀)在scylla-jmx项目中找到JMX的实现:
从这个类中,您可以看到,例如,ColumnFamilyStore.getSSTableCountPerLevel()方法委托给column_family/sstables/per_level/<table name> REST API URL。
发布于 2019-12-09 16:08:42
嗯,FWIW我在这里通过直接访问API重新实现了nodetool:https://github.com/scylladb/scylla-tools-java/pull/121
它可以工作,但在代码方面,我会做一些重构以避免重复,否则它是完全可用的nodetool,而不是REST API (它跳过JMX的"tablestats")
https://stackoverflow.com/questions/59221137
复制相似问题