【Cassandra】使用jmxterm收集度量信息
0. JMXterm 是什么?
jmxterm是一种通过命令行进行JMX客户端操作的工具。您可以在Cyclops官方网站上找到更详细的介绍→https://docs.cyclopsgroup.org/jmxterm
1. 获取Cassandra指标的示例
使用jmxterm启动并连接至Cassandra。
连接到本地节点的Cassandra
# java -jar jmxterm-1.0.0-uber.jar
Welcome to JMX terminal. Type "help" for available commands.
$>open localhost:7199
#Connection to localhost:7199 is opened
$>
② 输出域名列表
执行 domains 子命令
$>domains
#following domains are available
JMImplementation
ch.qos.logback.classic
com.datastax.bdp
com.sun.management
java.lang
java.nio
java.util.logging
org.apache.cassandra.auth
org.apache.cassandra.db
org.apache.cassandra.internal
org.apache.cassandra.metrics
org.apache.cassandra.net
org.apache.cassandra.request
org.apache.cassandra.service
org.apache.cassandra.transport
$>
只需一个选项,将以下内容以中文本地化:
③ 域名指定
指定org.apache.cassandra.metrics
$>
$>domain org.apache.cassandra.metrics
#domain is set to org.apache.cassandra.metrics
$>
将Mbean列表导出
执行beans子命令将进行列表输出。
列表内容根据Cassandra的版本和配置而异。(还取决于IP地址、已创建的键空间以及表等因素)
$>beans
#domain = org.apache.cassandra.metrics:
org.apache.cassandra.metrics:keyspace=dse_perf,name=AllMemtablesHeapSize,scope=node_slow_log,type=ColumnFamily
org.apache.cassandra.metrics:keyspace=dse_perf,name=AllMemtablesLiveDataSize,scope=node_slow_log,type=ColumnFamily
org.apache.cassandra.metrics:keyspace=dse_perf,name=AllMemtablesLiveDataSize,type=Keyspace
org.apache.cassandra.metrics:keyspace=dse_perf,name=AllMemtablesOffHeapDataSize,type=Keyspace
org.apache.cassandra.metrics:keyspace=dse_perf,name=AllMemtablesOffHeapSize,scope=node_slow_log,type=ColumnFamily
org.apache.cassandra.metrics:keyspace=dse_perf,name=AllMemtablesOnHeapDataSize,type=Keyspace
org.apache.cassandra.metrics:keyspace=dse_perf,name=BloomFilterDiskSpaceUsed,scope=node_slow_log,type=ColumnFamily
org.apache.cassandra.metrics:keyspace=dse_perf,name=BloomFilterDiskSpaceUsed,type=Keyspace
org.apache.cassandra.metrics:keyspace=dse_perf,name=BloomFilterFalsePositives,scope=node_slow_log,type=ColumnFamily
org.apache.cassandra.metrics:keyspace=dse_perf,name=BloomFilterFalseRatio,scope=node_slow_log,type=ColumnFamily
org.apache.cassandra.metrics:keyspace=dse_perf,name=BloomFilterOffHeapMemoryUsed,scope=node_slow_log,type=ColumnFamily
org.apache.cassandra.metrics:keyspace=dse_perf,name=BloomFilterOffHeapMemoryUsed,type=Keyspace
:
(途中略)
:
$>
只需一个选项,在中国将以下内容用中文表述:
⑤ 指定要查询值的 Mbean。
在后续操作中,默认情况下指定的Mbean在此处。
$>bean org.apache.cassandra.metrics:keyspace=system,name=ReadLatency,type=Keyspace
#bean is set to org.apache.cassandra.metrics:keyspace=system,name=ReadLatency,type=Keyspace
确认Metrics的属性
执行info子命令将列出attribute信息。
$>info
#mbean = org.apache.cassandra.metrics:keyspace=system,name=ReadLatency,type=Keyspace
#class name = com.yammer.metrics.reporting.JmxReporter$Timer
# attributes
%0 - 50thPercentile (double, r)
%1 - 75thPercentile (double, r)
%2 - 95thPercentile (double, r)
%3 - 98thPercentile (double, r)
%4 - 999thPercentile (double, r)
%5 - 99thPercentile (double, r)
%6 - Count (long, r)
%7 - EventType (java.lang.String, r)
%8 - FifteenMinuteRate (double, r)
%9 - FiveMinuteRate (double, r)
%10 - LatencyUnit (java.util.concurrent.TimeUnit, r)
%11 - Max (double, r)
%12 - Mean (double, r)
%13 - MeanRate (double, r)
%14 - Min (double, r)
%15 - OneMinuteRate (double, r)
%16 - RateUnit (java.util.concurrent.TimeUnit, r)
%17 - StdDev (double, r)
# operations
%0 - javax.management.ObjectName objectName()
%1 - [D values()
#there's no notifications
$>
获取attributen的值
使用get子命令以获取值时,请注意在指定属性时区分大小写。此外,可以使用*来获取所有属性。
$>get Count
#mbean = org.apache.cassandra.metrics:keyspace=system,name=ReadLatency,type=Keyspace:
Count = 45;
$>get *
#mbean = org.apache.cassandra.metrics:keyspace=system,name=ReadLatency,type=Keyspace:
LatencyUnit = MICROSECONDS;
FiveMinuteRate = 0.010651458468396234;
FifteenMinuteRate = 0.5320173149110301;
RateUnit = SECONDS;
EventType = calls;
MeanRate = 0.02299186601577956;
OneMinuteRate = 0.00279618294442399;
Max = 76222.1;
Count = 45;
Min = 54.433;
75thPercentile = 5601.126;
50thPercentile = 1628.462;
Mean = 5429.523244444445;
StdDev = 12147.787634864962;
95thPercentile = 23945.75149999996;
98thPercentile = 76222.1;
99thPercentile = 76222.1;
999thPercentile = 76222.1;
终止
$>bye
#bye
#
3. 节点工具sjk
在Cassandra的不同版本中,即使是使用标准的nodetool命令也可以实现类似的获取。(但根据Cassandra版本可能有所不同)
# nodetool sjk mx -b org.apache.cassandra.metrics:keyspace=system,name=ReadLatency,type=Keyspace -f Count -mg
org.apache.cassandra.metrics:type=Keyspace,keyspace=system,name=ReadLatency
48
#
4. 印象
· 获取指标列表非常方便。
· 如果只考虑在监控中获取值,尝试以每分钟连续获取值,就需要每次都启动Java,虽然不是不可能,但不是很智能。(也许最好使用一个能连续导出CSV的工具)
· 在Cassandra中(实际上在其他地方也是一样),升级后获取到的指标会发生变化(名称可能会改变或被弃用),所以要注意。