LoginSignup
5
1

More than 3 years have passed since last update.

【Cassandra 】 jmxtermによるメトリクス情報収集

Last updated at Posted at 2019-11-15

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の場合( というか他でも同様だろうけど )、バージョンアップすると取得できるメトリクスが変わってくる( 名前が変わったり廃止されたり )ので、要注意

5
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1