JMXコネクタ

JMXコネクタは、Prestoクラスタ内のすべてのノードからJMX情報をクエリする機能を提供します。これは、監視やデバッグに非常に役立ちます。Java Management Extensions(JMX)は、Java仮想マシンとその内部で実行されているすべてのソフトウェアに関する情報を提供します。Presto itselfは、JMXを介して heavily instrumented されています。

このコネクタは、選択したJMX情報が定期的にダンプされ、メモリに保存されて後でアクセスできるように設定することもできます。

設定

JMXコネクタを設定するには、カタログプロパティファイル etc/catalog/jmx.properties を以下の内容で作成します。

connector.name=jmx

定期的なダンプを有効にするには、以下のプロパティを定義します。

connector.name=jmx
jmx.dump-tables=java.lang:type=Runtime,com.facebook.presto.execution.scheduler:name=NodeScheduler
jmx.dump-period=10s
jmx.max-entries=86400

dump-tables は、Managed Beans(MBean)のカンマ区切りリストです。どのMBeanがサンプリングされ、dump-period ごとにメモリに保存されるかを指定します。履歴は、max-entries エントリの制限付きサイズになります。dump-periodmax-entries は、それぞれデフォルト値 10秒86400 です。

MBean名に含まれるカンマは、以下の方法でエスケープする必要があります。

connector.name=jmx
jmx.dump-tables=com.facebook.presto.memory:type=memorypool\\,name=general,\
   com.facebook.presto.memory:type=memorypool\\,name=system,\
   com.facebook.presto.memory:type=memorypool\\,name=reserved

JMXのクエリ

JMXコネクタは、currenthistoryinformation_schema の3つのスキーマを提供します。

カレントスキーマ

current スキーマには、Prestoクラスタ内のすべてのノードのすべてのMBeanが含まれています。使用可能なすべてのMBeanを表示するには、SHOW TABLES を実行します。

SHOW TABLES FROM jmx.current;

MBean名は非標準のテーブル名にマップされ、クエリで参照する場合は二重引用符で囲む必要があります。たとえば、次のクエリは、すべてのノードのJVMバージョンを表示します。

SELECT node, vmname, vmversion
FROM jmx.current."java.lang:type=runtime";
                 node                 |              vmname               | vmversion
--------------------------------------+-----------------------------------+-----------
 ddc4df17-0b8e-4843-bb14-1b8af1a7451a | Java HotSpot(TM) 64-Bit Server VM | 24.60-b09
(1 row)

次のクエリは、各ノードのオープンファイル記述子数と最大ファイル記述子数を表示します。

SELECT openfiledescriptorcount, maxfiledescriptorcount
FROM jmx.current."java.lang:type=operatingsystem";
 openfiledescriptorcount | maxfiledescriptorcount
-------------------------+------------------------
                     329 |                  10240
(1 row)

ワイルドカード文字 * は、current スキーマのテーブル名で使用できます。これにより、1つのクエリ内で複数のMBeanオブジェクトを照合できます。次のクエリは、各ノードの異なるPrestoメモリプールからの情報を返します。

SELECT freebytes, node, object_name
FROM jmx.current."com.facebook.presto.memory:*type=memorypool*";
 freebytes  |  node   |                       object_name
------------+---------+----------------------------------------------------------
  214748364 | example | com.facebook.presto.memory:type=MemoryPool,name=reserved
 1073741825 | example | com.facebook.presto.memory:type=MemoryPool,name=general
  858993459 | example | com.facebook.presto.memory:type=MemoryPool,name=system
(3 rows)

履歴スキーマ

history スキーマには、コネクタプロパティファイルで設定されたテーブルのリストが含まれています。テーブルはカレントスキーマと同じカラムを持ちますが、スナップショットが取得された時刻を格納するタイムスタンプカラムが追加されています。

SELECT "timestamp", "uptime" FROM jmx.history."java.lang:type=runtime";
        timestamp        | uptime
-------------------------+--------
 2016-01-28 10:18:50.000 |  11420
 2016-01-28 10:19:00.000 |  21422
 2016-01-28 10:19:10.000 |  31412
(3 rows)

インフォメーションスキーマ

information_schema には、他のすべてのスキーマに関するメタデータが含まれています。このスキーマで使用可能なすべてのテーブルを一覧表示するには、次のコマンドを実行します。

SHOW TABLES FROM jmx.information_schema;