【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中(实际上在其他地方也是一样),升级后获取到的指标会发生变化(名称可能会改变或被弃用),所以要注意。

广告
将在 10 秒后关闭
bannerAds