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-period
と max-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コネクタは、current
、history
、information_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;