統計およびメトリクスの取得

DataStaxツールとJavaコンソール(JConsole)を使用したノードとクラスターの統計情報の取得。

クラスターのパフォーマンス特性を理解することは、問題の診断とキャパシティ・プランニングに不可欠です。DataStaxツールとJavaコンソール(JConsole)を使用してノードとクラスターの統計情報を取得します。

DataStax Enterpriseは、Java Management Extensions(JMX)を介して、多数の統計と管理操作を公開しています。JMXは、Javaアプリケーションおよびサービスを管理および監視するツールを提供するJavaテクノロジーです。JavaアプリケーションがMBeanとして公開した統計情報または操作はすべて、JMXを使用して監視したり、制御したりすることができます。

通常の運用では、データベースは、以下のようなJMX対応ツールを使用して監視が可能な情報および統計を出力します。

同じツールを使用して、キャッシュのフラッシュやnode repairの実行などの、特定の管理コマンドおよび操作を実行できます。

nodetoolの使用

統計を取得するには、nodetoolコマンドを使用します。

nodetoolユーティリティは、クラスターを監視したり、日常のデータベース操作を実行したりするためのコマンドライン・インターフェイスです。通常は、動作ノードから実行します。

Nodetoolユーティリティは、テーブル、サーバーのメトリック、およびコンパクションの統計の詳細なメトリックを表示するためのコマンドを備えています。
  • nodetool tablestatsは、各テーブルおよびキースペースの統計を表示します。
  • nodetool tablehistogramsは、読み取り/書き込みのレイテンシー、行サイズ、カラム数、SSTableの数など、テーブルの統計を提供します。
  • nodetool netstatsは、ネットワーク操作および接続に関する統計を提供します。
  • nodetool tpstatsは、スレッド・プールごとに、データベースの操作の各段階のアクティブなタスク、保留中のタスク、完了したタスクの数に関する統計を提供します。
以下の例は、ローカル・コンピューター上にccmで作成した3ノードのクラスターを対象に4,500のINSERT文と45,000のSELECT文を実行した後のnodetool proxyhistogramsの出力を示しています。
nodetool proxyhistograms
proxy histograms
Percentile      Read Latency     Write Latency     Range Latency
                    (micros)          (micros)          (micros)
50%                  1502.50            375.00            446.00
75%                  1714.75            420.00            498.00
95%                 31210.25            507.00            800.20
98%                 36365.00            577.36            948.40
99%                 36365.00            740.60           1024.39
Min                   616.00            230.00            311.00
Max                 36365.00          55726.00          59247.00
リングとその健全性の現状に関する簡単なサマリーを出力するには、nodetool statusを使用します。例を次に示します。
nodetool status
Note: Ownership information does not include topology; for complete information, specify a keyspace
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens  Owns    Host ID                               Rack
UN  127.0.0.1  47.66 KB   1       33.3%   aaa1b7c1-6049-4a08-ad3e-3697a0e30e10  rack1
UN  127.0.0.2  47.67 KB   1       33.3%   1848c369-4306-4874-afdf-5c1e95b8732e  rack1
UN  127.0.0.3  47.67 KB   1       33.3%   49578bf1-728f-438d-b1c1-d8dd644b6f7f  rack1

JConsoleの使用

JConsoleを使用してDSEによって公開されたJMXメトリクスおよび操作を表示します。

JConsoleは、Javaアプリケーションを監視するためのJMX対応ツールです。JConsoleは、DataStax Enterprise(DSE)によって公開されているJMXのメトリクスおよび操作を消費し、それらを整然としたGUIに表示します。

注: JConsoleを使用してDSEを監視することを選択する場合は、JConsoleがかなりの量のシステム・リソースを使用することに注意してください。このため、DataStaxでは、DSEのノードと同じホスト上ではなく、リモート・マシンでJConsoleを実行することを推奨します。

JConsoleのインストールとノードへの接続

メトリクスを表示するには、JConsoleをインストールしてノードに接続します。

JConsoleはSun JDK 5.0以降に付属しており、OpenJDKにも含まれています。

始める前に

使用しているオペレーティング・システムに適合するOpenJDKをインストールするには、次のリンクを参照してください。

また、JMXユーザーの認証とMBeanへの役割ベースのアクセス制御が必要な場合は、JMX認証を構成してください。

手順

  1. OpenJDKをインストールした後、ターミナルからJConsoleを起動します。すると、JConsole GUIが開きます。
    jconsole
  2. JConsole GUIで、[Remote Process]を選択し、接続先のノードのIPアドレスとポートを入力します。DSE JMXメトリクスのデフォルトの監視ポートは7199です。
  3. オプション: 接続先のノードのユーザー名とパスワードを入力します。
  4. [Connect]をクリックしてノードに接続します。
  5. JConsole GUIで、[MBeans]タブをクリックします。
  6. 左側のナビゲーションで、[org.apache.cassandra.metrics]をクリックすると、すべてのDSEメトリクスが表示されます。

JConsoleでのメトリクスの表示

詳細なDSEメトリクスはJConsoleを使用して表示できます。

JConsoleには、監視対象ノードごとに次のタブ・ビューが用意されています。[Overview]および[Memory]タブには、開発者にとって非常に役立つ情報が記載されています。[Memory]タブでは、ヒープ・メモリーと非ヒープ・メモリーの使用量を比較できます。また、Javaガーベージ・コレクションをすぐに実行するためのコントロール機能も備えています。
[Overview]
Java VMおよび監視対象の値に関する概要情報を表示します。
[Memory]
メモリーの使用に関する情報を表示します。
[Threads]
スレッドの使用に関する情報を表示します。
[Classes]
クラス・ローディングに関する情報を表示します。
[VM Summary]
Java仮想マシン(VM)に関する情報を表示します。
[MBeans]
MBeanに関する情報を表示します。
個々のデータベースのメトリクスおよび操作については、JConsoleの最も重要な部分は[MBeans]タブです。このタブには、以下のMBeanがリストされています。
org.apache.cassandra.auth
パーミッション・キャッシュが含まれます。
org.apache.cassandra.db
キャッシング、テーブル・メトリック、およびコンパクションなど。
org.apache.cassandra.internal
ゴシップ、ヒンテッド・ハンドオフ、およびMemtable値などの内部サーバー操作。
org.apache.cassandra.metrics
CQLにおけるメトリクス、クライアント、キースペース、読み取りリペア、ストレージ、スレッド・プールやその他のトピックが含まれます。
org.apache.cassandra.net
FailureDetector、MessagingService、StreamingManagerなどのノード間通信。
org.apache.cassandra.request
読み取り、書き込み、およびレプリケーション操作に関するタスク。
org.apache.cassandra.service
GCInspectorが含まれます。

ツリーのMBeanを選択すると、MBeanInfoおよびMBean記述子が右側に表示され、属性、操作、または通知は、ツリー内のその下に表示されます。たとえば、実行可能なアクションおよび利用可能なメトリクスを表示するためにorg.apache.cassandra.metrics MBeanを選択して展開すると、次の情報が表示されます。

nodetool sjkの使用

MBeanからデータベース情報を収集するには、nodetool sjk mxを使用します。

nodetoolには組み込みコマンドnodetool sjkとしてオープン・ソースのSwiss Java Knifeが含まれており、トラブルシューティングに使用できます。この項では、mxサブコマンドを使用してJMX MBean値を取得して設定し、MBeanの特定のリストを操作する方法について説明します。

警告:

nodetool sjk mxdumpコマンドは、公開されているすべてのMBeanのコンソールへの出力を試みます。シリアライズ不可能な型を公開する、不適切な形式のMBeanがある場合、このコマンドは失敗する可能性があります。MBeanの特定のリストに関する操作を行うには、nodetool sjk mxコマンドを使用します。

シリアライズ不可能な型(mx4j MBeanなど)が返された場合のエラーを回避するには、-q(query)スイッチを指定してnodetool sjk mxコマンドを実行します。

MBean名のリスト

コマンドラインからMBeansを呼び出したり、CQLでパーミッションを設定するには、最初に、MBeanの完全な名前を取得します。

jmxtermを使用して、データベース・ノードからJMX MBeansの完全なリストをダンプする方法を、以下に示します。
echo "beans" | java -jar jmxterm-1.0.0-uber.jar -l localhost:7199 -n 2>&1
ヒント: リストが大きくなる可能性があるため、この操作は一度のみ実行するか、結果を別のフィルターにリダイレクトし、出力の中で特定の名前でMBeanを検索してください。たとえば、commitlogという語を含むMBeanを検索するには、次のようにします。
echo "beans" | java -jar /tmp/jmxterm-1.0.0-uber.jar -l localhost:7199 -n 2>&1 | grep -i commitlog
nodetool sjk mxコマンドで使用したり、CQLのGRANTおよびREVOKEコマンドのパーミッションを管理したりするためのMBeanの完全一致の文字列が結果に表示されます。
com.datastax.bdp.advrep.v2.metrics:name=CommitLogMessagesRead,type=ReplicationLog
com.datastax.bdp.advrep.v2.metrics:name=CommitLogsDeleted,type=ReplicationLog
com.datastax.bdp.advrep.v2.metrics:name=CommitLogsToConsume,type=ReplicationLog
org.apache.cassandra.db:type=Commitlog
org.apache.cassandra.metrics:name=CompletedTasks,type=CommitLog
org.apache.cassandra.metrics:name=PendingTasks,type=CommitLog
org.apache.cassandra.metrics:name=TotalCommitLogSize,type=CommitLog
org.apache.cassandra.metrics:name=WaitingOnCommit,type=CommitLog
org.apache.cassandra.metrics:name=WaitingOnSegmentAllocation,type=CommitLog

MBeanオプションおよび値の取得

利用可能な値を表示するには、MBean情報オプションを使用します。たとえば、前の結果の、TotalCommitLogSizeについて利用可能なオプションを表示するには、完全な名前を使用します。
nodetool sjk mx -b "org.apache.cassandra.metrics:name=TotalCommitLogSize,type=CommitLog" -mi
org.apache.cassandra.metrics:type=CommitLog,name=TotalCommitLogSize
org.apache.cassandra.metrics.CassandraMetricsRegistry$JmxGauge
 - Information on the management interface of the MBean
 (A) Value : java.lang.Object
  - Attribute exposed for management
 (O) objectName() : javax.management.ObjectName
  - Operation exposed for management
MBeanの値は単純です。単純な数値を読み取るには、次のコマンドを実行します。
nodetool sjk mx -b "org.apache.cassandra.metrics:name=TotalCommitLogSize,type=CommitLog" -f Value -mg
org.apache.cassandra.metrics:type=CommitLog,name=TotalCommitLogSize
67108864
注: SJKには大文字と小文字の区別があるため、名前を正確に入力してください。
レイテンシーなどのもっと複雑なメトリックを確認する場合は、-miオプションを使用して数値の数を確認してください。
nodetool sjk mx -b "org.apache.cassandra.metrics:name=Latency,scope=Read,type=ClientRequest" -mi
org.apache.cassandra.metrics:type=ClientRequest,scope=Read,name=Latency
org.apache.cassandra.metrics.CassandraMetricsRegistry$JmxTimer
 - Information on the management interface of the MBean
 (A) Max : double
  - Attribute exposed for management
 (A) Min : double
  - Attribute exposed for management
 (A) Mean : double
  - Attribute exposed for management
 (A) StdDev : double
  - Attribute exposed for management
 (A) 95thPercentile : double
  - Attribute exposed for management
 (A) DurationUnit : String
  - Attribute exposed for management
 (A) 50thPercentile : double
  - Attribute exposed for management
 (A) 75thPercentile : double
  - Attribute exposed for management
 (A) 98thPercentile : double
  - Attribute exposed for management
 (A) 99thPercentile : double
  - Attribute exposed for management
 (A) 999thPercentile : double
  - Attribute exposed for management
 (A) OneMinuteRate : double
  - Attribute exposed for management
 (A) FifteenMinuteRate : double
  - Attribute exposed for management
 (A) FiveMinuteRate : double
  - Attribute exposed for management
 (A) MeanRate : double
  - Attribute exposed for management
 (A) RateUnit : String
  - Attribute exposed for management
 (A) Count : long
  - Attribute exposed for management
 (O) values() : long[]
  - Operation exposed for management
 (O) objectName() : javax.management.ObjectName
  - Operation exposed for management
このメトリックで1つの値を読み取るには、次のコマンドを使用します。
nodetool sjk mx -b "org.apache.cassandra.metrics:name=Latency,scope=Read,type=ClientRequest" -f 99thPercentile -mg
org.apache.cassandra.metrics:type=ClientRequest,scope=Read,name=Latency
3379.391