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() (以下省略)