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はここで指定した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
⑥ メトリクスのattributeを確認
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サブコマンドで値を取得
attribute指定するとき、大文字小文字を区別するので要注意
また*で全attributeを取得できる。
$>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. nodetool sjk
標準の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. 感想
・メトリクス一覧とかを取得するのに便利
・監視での値取得だけを考えた場合で、1分おきとかで連続して値を取得しようとすると、いちいちJavaで起動することになるので、不可能ではないけど、あまりスマートでない。( 連続でCSV出力するようなツールを使う方がいいかも )
・Cassandraの場合( というか他でも同様だろうけど )、バージョンアップすると取得できるメトリクスが変わってくる( 名前が変わったり廃止されたり )ので、要注意