JMX metrics exposed in Presto version 302

Summary

Presto provides JMX metrics to monitor its system but there is few description in the document what metrics we can use, so I checked it.

Monitoring · prestosql/presto Wiki · GitHub

I used CLI tool jmxterm to get the information.

Commands

$ echo domains | java -jar jmxterm-1.0.0-uber.jar -l localhost:8086 -n > domains.txt
$ sed -i "s/^/beans -d /g" domains.txt
$ cat domains.txt | java -jar jmxterm-1.0.0-uber.jar -l localhost:8086 -n > beans.txt
$ cat beans.txt | awk -F: '{print "info -d " $1 " -b " $2}' | java -jar jmxterm-1.0.0-uber.jar -l localhost:8086 -n > info.txt 2>&1

Results

domains

[ec2-user@ip-10-0-101-241 ~]$ cat domains.txt
JMImplementation
com.amazonaws.management
com.sun.management
io.airlift.discovery.client
io.airlift.discovery.store
io.airlift.event.client
io.airlift.http.client
io.airlift.http.server
io.airlift.jmx
io.airlift.log
io.airlift.node
io.airlift.stats
java.lang
java.nio
java.util.logging
org.eclipse.jetty.http2.server
org.eclipse.jetty.io
org.eclipse.jetty.jmx
org.eclipse.jetty.server
org.eclipse.jetty.server.handler
org.eclipse.jetty.server.handler.gzip
org.eclipse.jetty.servlet
org.eclipse.jetty.util.thread
org.eclipse.jetty.util.thread.strategy
presto.execution
presto.execution.executor
presto.execution.resourceGroups
presto.execution.scheduler
presto.failureDetector
presto.memory
presto.metadata
presto.operator.index
presto.plugin.hive
presto.plugin.hive.metastore
presto.plugin.hive.metastore.thrift
presto.plugin.hive.s3
presto.security
presto.server
presto.server.remotetask
presto.spiller
presto.sql.gen
presto.sql.planner.iterative
presto.sql.planner.optimizations
sun.nio.ch

beans

[ec2-user@ip-10-0-101-241 ~]$ cat beans.txt
JMImplementation:type=MBeanServerDelegate
com.amazonaws.management:type=AwsSdkMetrics
com.amazonaws.management:type=AwsSdkMetrics/1
com.sun.management:type=DiagnosticCommand
com.sun.management:type=HotSpotDiagnostic
io.airlift.discovery.client:name=Announcer
io.airlift.discovery.client:name=ServiceInventory
io.airlift.discovery.store:name=dynamic,type=DistributedStore
io.airlift.discovery.store:name=dynamic,type=HttpRemoteStore
io.airlift.discovery.store:name=dynamic,type=Replicator
io.airlift.event.client:name=EventClient
io.airlift.http.client:name=ForDiscoveryClient,type=HttpClient
io.airlift.http.client:name=ForDynamicStore,type=HttpClient
io.airlift.http.client:name=ForEventClient,type=HttpClient
io.airlift.http.client:name=ForExchange,type=HttpClient
io.airlift.http.client:name=ForFailureDetector,type=HttpClient
io.airlift.http.client:name=ForMemoryManager,type=HttpClient
io.airlift.http.client:name=ForNodeManager,type=HttpClient
io.airlift.http.client:name=ForScheduler,type=HttpClient
io.airlift.http.client:name=ForWorkerInfo,type=HttpClient
io.airlift.http.server:context=HTTP/1.1|h2c@183fc2fa,id=0,type=httpserverchannellistener
io.airlift.http.server:id=0,type=classpathresourcehandler
io.airlift.http.server:id=0,type=statsrecordinghandler
io.airlift.http.server:id=1,type=classpathresourcehandler
io.airlift.http.server:name=HttpServer
io.airlift.http.server:name=RequestStats
io.airlift.jmx:name=StackTraceMBean
io.airlift.log:name=Logging
io.airlift.node:name=NodeInfo
io.airlift.stats:name=PauseMeter
java.lang:name=Code Cache,type=MemoryPool
java.lang:name=CodeCacheManager,type=MemoryManager
java.lang:name=Compressed Class Space,type=MemoryPool
java.lang:name=G1 Eden Space,type=MemoryPool
java.lang:name=G1 Old Gen,type=MemoryPool
java.lang:name=G1 Old Generation,type=GarbageCollector
java.lang:name=G1 Survivor Space,type=MemoryPool
java.lang:name=G1 Young Generation,type=GarbageCollector
java.lang:name=Metaspace Manager,type=MemoryManager
java.lang:name=Metaspace,type=MemoryPool
java.lang:type=ClassLoading
java.lang:type=Compilation
java.lang:type=Memory
java.lang:type=OperatingSystem
java.lang:type=Runtime
java.lang:type=Threading
java.nio:name=direct,type=BufferPool
java.nio:name=mapped,type=BufferPool
java.util.logging:type=Logging
org.eclipse.jetty.http2.server:context=HTTP/1.1|h2c@183fc2fa,id=0,type=abstracthttp2serverconnectionfactory$http2sessioncontainer
org.eclipse.jetty.http2.server:context=HTTP/1.1|h2c@183fc2fa,id=0,type=http2cserverconnectionfactory
org.eclipse.jetty.io:context=HTTP/1.1|h2c@183fc2fa,id=0,type=arraybytebufferpool
org.eclipse.jetty.io:context=HTTP/1.1|h2c@183fc2fa,id=0,type=connectionstatistics
org.eclipse.jetty.io:context=HTTP/1.1|h2c@183fc2fa,id=0,type=managedselector
org.eclipse.jetty.io:context=HTTP/1.1|h2c@183fc2fa,id=0,type=managedselector$selectorproducer
org.eclipse.jetty.io:context=HTTP/1.1|h2c@183fc2fa,id=1,type=managedselector
org.eclipse.jetty.io:context=HTTP/1.1|h2c@183fc2fa,id=1,type=managedselector$selectorproducer
org.eclipse.jetty.io:context=HTTP/1.1|h2c@183fc2fa,id=2,type=managedselector
org.eclipse.jetty.io:context=HTTP/1.1|h2c@183fc2fa,id=2,type=managedselector$selectorproducer
org.eclipse.jetty.io:context=HTTP/1.1|h2c@183fc2fa,id=3,type=managedselector
org.eclipse.jetty.io:context=HTTP/1.1|h2c@183fc2fa,id=3,type=managedselector$selectorproducer
org.eclipse.jetty.jmx:id=0,type=mbeancontainer
org.eclipse.jetty.server:context=HTTP/1.1|h2c@183fc2fa,id=0,type=abstractconnector$acceptor
org.eclipse.jetty.server:context=HTTP/1.1|h2c@183fc2fa,id=0,type=httpconfiguration
org.eclipse.jetty.server:context=HTTP/1.1|h2c@183fc2fa,id=0,type=httpconnectionfactory
org.eclipse.jetty.server:context=HTTP/1.1|h2c@183fc2fa,id=0,type=serverconnector
org.eclipse.jetty.server:context=HTTP/1.1|h2c@183fc2fa,id=0,type=serverconnector$serverconnectormanager
org.eclipse.jetty.server:id=0,type=server
org.eclipse.jetty.server.handler:id=0,type=errorhandler
org.eclipse.jetty.server.handler:id=0,type=handlercollection
org.eclipse.jetty.server.handler:id=0,type=handlerlist
org.eclipse.jetty.server.handler:id=0,type=requestloghandler
org.eclipse.jetty.server.handler:id=0,type=statisticshandler
org.eclipse.jetty.server.handler.gzip:context="ROOT@@http",id=0,type=gziphandler
org.eclipse.jetty.server.handler.gzip:id=0,type=gziphandler
org.eclipse.jetty.server.handler.gzip:id=1,type=gziphandler
org.eclipse.jetty.servlet:context="ROOT@@http",id=0,type=servletcontexthandler
org.eclipse.jetty.servlet:context="ROOT@@http",id=0,type=servlethandler
org.eclipse.jetty.util.thread:context=HTTP/1.1|h2c@183fc2fa,id=0,type=scheduledexecutorscheduler
org.eclipse.jetty.util.thread:id=0,type=queuedthreadpool
org.eclipse.jetty.util.thread:id=0,type=reservedthreadexecutor
org.eclipse.jetty.util.thread.strategy:context=HTTP/1.1|h2c@183fc2fa,id=0,type=eatwhatyoukill
org.eclipse.jetty.util.thread.strategy:context=HTTP/1.1|h2c@183fc2fa,id=1,type=eatwhatyoukill
org.eclipse.jetty.util.thread.strategy:context=HTTP/1.1|h2c@183fc2fa,id=2,type=eatwhatyoukill
org.eclipse.jetty.util.thread.strategy:context=HTTP/1.1|h2c@183fc2fa,id=3,type=eatwhatyoukill
presto.execution:name=QueryExecution
presto.execution:name=QueryManager
presto.execution:name=RemoteTaskFactory
presto.execution:name=TaskManager
presto.execution.executor:name=MultilevelSplitQueue
presto.execution.executor:name=TaskExecutor
presto.execution.resourceGroups:name=InternalResourceGroupManager
presto.execution.resourceGroups:name=chartio,type=InternalResourceGroup
presto.execution.resourceGroups:name=user,type=InternalResourceGroup
presto.execution.scheduler:name=NodeScheduler
presto.execution.scheduler:name=SplitSchedulerStats
presto.execution.scheduler:segment=all
presto.execution.scheduler:segment=machine
presto.failureDetector:name=HeartbeatFailureDetector
presto.memory:name=ClusterMemoryManager
presto.memory:name=general,type=ClusterMemoryPool
presto.memory:name=general,type=MemoryPool
presto.memory:name=reserved,type=ClusterMemoryPool
presto.memory:name=reserved,type=MemoryPool
presto.metadata:name=DiscoveryNodeManager
presto.operator.index:name=IndexJoinLookupStats
presto.plugin.hive:name=hive,type=FileFormatDataSourceStats
presto.plugin.hive:name=hive,type=HiveSplitManager
presto.plugin.hive:name=hive,type=HiveWriterStats
presto.plugin.hive:name=hive,type=NamenodeStats
presto.plugin.hive:name=hive,type=OrcFileWriterFactory
presto.plugin.hive:name=hive_ad,type=FileFormatDataSourceStats
presto.plugin.hive:name=hive_ad,type=HiveSplitManager
presto.plugin.hive:name=hive_ad,type=HiveWriterStats
presto.plugin.hive:name=hive_ad,type=NamenodeStats
presto.plugin.hive:name=hive_ad,type=OrcFileWriterFactory
presto.plugin.hive.metastore:name=hive,type=CachingHiveMetastore
presto.plugin.hive.metastore:name=hive_ad,type=CachingHiveMetastore
presto.plugin.hive.metastore.thrift:name=hive,type=ThriftHiveMetastore
presto.plugin.hive.metastore.thrift:name=hive_ad,type=ThriftHiveMetastore
presto.plugin.hive.s3:name=hive,type=PrestoS3FileSystem
presto.plugin.hive.s3:name=hive_ad,type=PrestoS3FileSystem
presto.security:name=AccessControlManager
presto.server:name=AsyncHttpExecutionMBean
presto.server:name=ExchangeExecutionMBean
presto.server:name=StatementHttpExecutionMBean
presto.server:name=TaskExecutorResource
presto.server:name=TaskResource
presto.server.remotetask:name=RemoteTaskStats
presto.spiller:name=SpillerFactory
presto.sql.gen:name=ExpressionCompiler
presto.sql.gen:name=JoinCompiler
presto.sql.gen:name=JoinFilterFunctionCompiler
presto.sql.gen:name=OrderingCompiler
presto.sql.gen:name=PageFunctionCompiler
presto.sql.planner.iterative:name=IterativeOptimizer,rule=AddExchangesBelowExchangePartialAggregationGroupId
presto.sql.planner.iterative:name=IterativeOptimizer,rule=AddExchangesBelowProjectionPartialAggregationGroupId
presto.sql.planner.iterative:name=IterativeOptimizer,rule=AddIntermediateAggregations
presto.sql.planner.iterative:name=IterativeOptimizer,rule=AggregationExpressionRewrite
presto.sql.planner.iterative:name=IterativeOptimizer,rule=ApplyExpressionRewrite
presto.sql.planner.iterative:name=IterativeOptimizer,rule=CheckNoPlanNodeMatchesRule
presto.sql.planner.iterative:name=IterativeOptimizer,rule=CreatePartialTopN
presto.sql.planner.iterative:name=IterativeOptimizer,rule=DetermineJoinDistributionType
presto.sql.planner.iterative:name=IterativeOptimizer,rule=EliminateCrossJoins
presto.sql.planner.iterative:name=IterativeOptimizer,rule=EvaluateZeroLimit
presto.sql.planner.iterative:name=IterativeOptimizer,rule=EvaluateZeroSample
presto.sql.planner.iterative:name=IterativeOptimizer,rule=ExtractSpatialInnerJoin
presto.sql.planner.iterative:name=IterativeOptimizer,rule=ExtractSpatialLeftJoin
presto.sql.planner.iterative:name=IterativeOptimizer,rule=FilterExpressionRewrite
presto.sql.planner.iterative:name=IterativeOptimizer,rule=ImplementBernoulliSampleAsFilter
presto.sql.planner.iterative:name=IterativeOptimizer,rule=ImplementFilteredAggregations
presto.sql.planner.iterative:name=IterativeOptimizer,rule=InlineProjections
presto.sql.planner.iterative:name=IterativeOptimizer,rule=JoinExpressionRewrite
presto.sql.planner.iterative:name=IterativeOptimizer,rule=MergeAdjacentWindowsOverProjects
presto.sql.planner.iterative:name=IterativeOptimizer,rule=MergeFilters
presto.sql.planner.iterative:name=IterativeOptimizer,rule=MergeLimitWithDistinct
presto.sql.planner.iterative:name=IterativeOptimizer,rule=MergeLimitWithSort
presto.sql.planner.iterative:name=IterativeOptimizer,rule=MergeLimitWithTopN
presto.sql.planner.iterative:name=IterativeOptimizer,rule=MergeLimits
presto.sql.planner.iterative:name=IterativeOptimizer,rule=MultipleDistinctAggregationToMarkDistinct
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PickTableLayoutForPredicate
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PickTableLayoutWithoutPredicate
presto.sql.planner.iterative:name=IterativeOptimizer,rule=ProjectExpressionRewrite
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneAggregationColumns
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneAggregationSourceColumns
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneCountAggregationOverScalar
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneCrossJoinColumns
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneFilterColumns
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneIndexSourceColumns
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneJoinChildrenColumns
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneJoinColumns
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneLimitColumns
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneMarkDistinctColumns
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneOrderByInAggregation
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneOutputColumns
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneProjectColumns
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneSemiJoinColumns
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneSemiJoinFilteringSourceColumns
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneTableScanColumns
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneTopNColumns
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneValuesColumns
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PruneWindowColumns
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PushAggregationThroughOuterJoin
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PushLimitThroughMarkDistinct
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PushLimitThroughProject
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PushLimitThroughSemiJoin
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PushPartialAggregationThroughExchange
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PushPartialAggregationThroughJoin
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PushProjectionThroughExchange
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PushProjectionThroughUnion
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PushRemoteExchangeThroughAssignUniqueId
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PushTableWriteThroughUnion
presto.sql.planner.iterative:name=IterativeOptimizer,rule=PushTopNThroughUnion
presto.sql.planner.iterative:name=IterativeOptimizer,rule=RemoveEmptyDelete
presto.sql.planner.iterative:name=IterativeOptimizer,rule=RemoveFullSample
presto.sql.planner.iterative:name=IterativeOptimizer,rule=RemoveRedundantIdentityProjections
presto.sql.planner.iterative:name=IterativeOptimizer,rule=RemoveTrivialFilters
presto.sql.planner.iterative:name=IterativeOptimizer,rule=RemoveUnreferencedScalarApplyNodes
presto.sql.planner.iterative:name=IterativeOptimizer,rule=RemoveUnreferencedScalarLateralNodes
presto.sql.planner.iterative:name=IterativeOptimizer,rule=ReorderJoins
presto.sql.planner.iterative:name=IterativeOptimizer,rule=RewriteSpatialPartitioningAggregation
presto.sql.planner.iterative:name=IterativeOptimizer,rule=SimplifyCountOverConstant
presto.sql.planner.iterative:name=IterativeOptimizer,rule=SingleDistinctAggregationToGroupBy
presto.sql.planner.iterative:name=IterativeOptimizer,rule=SwapAdjacentWindowsBySpecifications
presto.sql.planner.iterative:name=IterativeOptimizer,rule=TransformCorrelatedInPredicateToJoin
presto.sql.planner.iterative:name=IterativeOptimizer,rule=TransformCorrelatedLateralJoinToJoin
presto.sql.planner.iterative:name=IterativeOptimizer,rule=TransformCorrelatedScalarAggregationToJoin
presto.sql.planner.iterative:name=IterativeOptimizer,rule=TransformCorrelatedScalarSubquery
presto.sql.planner.iterative:name=IterativeOptimizer,rule=TransformCorrelatedSingleRowSubqueryToProject
presto.sql.planner.iterative:name=IterativeOptimizer,rule=TransformExistsApplyToLateralNode
presto.sql.planner.iterative:name=IterativeOptimizer,rule=TransformUncorrelatedInPredicateSubqueryToSemiJoin
presto.sql.planner.iterative:name=IterativeOptimizer,rule=TransformUncorrelatedLateralToJoin
presto.sql.planner.iterative:name=IterativeOptimizer,rule=ValuesExpressionRewrite
presto.sql.planner.optimizations:name=PlanOptimizer,optimizer=AddExchanges
presto.sql.planner.optimizations:name=PlanOptimizer,optimizer=PredicatePushDown
sun.nio.ch:context=HTTP/1.1|h2c@183fc2fa,id=0,type=serversocketchannelimpl

bean info

[ec2-user@ip-10-0-101-241 ~]$ cat info.txt
Welcome to JMX terminal. Type "help" for available commands.
#mbean = JMImplementation:type=MBeanServerDelegate
#class name = javax.management.MBeanServerDelegate
# attributes
  %0   - ImplementationName (java.lang.String, r)
  %1   - ImplementationVendor (java.lang.String, r)
  %2   - ImplementationVersion (java.lang.String, r)
  %3   - MBeanServerId (java.lang.String, r)
  %4   - SpecificationName (java.lang.String, r)
  %5   - SpecificationVendor (java.lang.String, r)
  %6   - SpecificationVersion (java.lang.String, r)
#there's no operations
# notifications
  %0   - javax.management.MBeanServerNotification(JMX.mbean.unregistered,JMX.mbean.registered)
#mbean = com.amazonaws.management:type=AwsSdkMetrics
#class name = com.amazonaws.metrics.MetricAdmin
# attributes
  %0   - CredentialFile (java.lang.String, rw)
  %1   - HostMetricName (java.lang.String, rw)
  %2   - JvmMetricName (java.lang.String, rw)
  %3   - MachineMetricsExcluded (boolean, rw)
  %4   - MetricNameSpace (java.lang.String, rw)
  %5   - MetricQueueSize (java.lang.Integer, rw)
  %6   - MetricsEnabled (boolean, r)
  %7   - PerHostMetricsIncluded (boolean, rw)
  %8   - QueuePollTimeoutMilli (java.lang.Integer, rw)
  %9   - Region (java.lang.String, rw)
  %10  - RequestMetricCollector (java.lang.String, r)
  %11  - ServiceMetricCollector (java.lang.String, r)
  %12  - SingleMetricNamespace (boolean, rw)
# operations
  %0   - void disableMetrics()
  %1   - boolean enableDefaultMetrics()
(以下省略)