Node metrics

A Corda node exports a number of metrics for the purpose of monitoring the health of the node via JMX. These metrics are described below.

For more information on how to monitor a node, see Node administration, Node monitoring and logging, and Node monitoring scenarios.

The node status, indicating what the node is currently doing, is published as net.corda.Node.Status, and is available almost immediately at startup.

Histogram and timer-based metrics use internal data reservoirs to compute percentile-based metric data. By default, the metrics produced by Corda nodes rely on the reservoir implementation provided by the DropWizard metrics library, which is an exponentially decaying reservoir (EDR). These reservoirs sample the data and do not keep a full set of data over time. This can cause outlying data points to be missed if they are not included in the sample set.

Alternatively, a node can be configured to use a time window reservoir by adding the following configuration block to the node.conf file:

enterpriseConfiguration {
    metricsConfiguration {
        reservoirType = TIME_WINDOW // Can also be EDR, but this is the default if this item is absent
        timeWindow = <Duration> // Optional - will default to 5m if not specified

The reservoirType configuration option can be set as either TIME_WINDOW or EDR, and will default to EDR if the configuration block is missing.

Time window data reservoirs record all data points across the specified time window. This ensures that outliers are accurately recorded for metrics calculation, and contain a bias towards more recent results.

Using time window reservoirs increases heap memory usage proportionally to the amount of load on the system.

Metric QueryDescription
net.corda:name=AttachmentsA count of the total number of attachments on the node.

A Corda node maintains a number of caches. For each of the metrics below, the name of the cache must be supplied in the component field to show metrics for that cache.

There are two types of caches: size-based and weight-based. Size-based caches are measured in the number of entries in the cache, while weight-based caches are measured in the bytes of memory occupied by the entries.

Metric QueryDescription
net.corda:type=Caches,component=<cache_name>,name=evictionsThe number of items evicted from the cache.
net.corda:type=Caches,component=<cache_name>,name=evictions-weightThe total weight of items evicted from the cache.
net.corda:type=Caches,component=<cache_name>,name=hitsThe number of cache hits.
net.corda:type=Caches,component=<cache_name>,name=loadsA histogram indicating how long loads into the cache are taking.
net.corda:type=Caches,component=<cache_name>,name=loads-failureThe number of items that could not be loaded into the cache.
net.corda:type=Caches,component=<cache_name>,name=loads-successThe number of items successfully loaded into the cache.
net.corda:type=Caches,component=<cache_name>,name=maximum-sizeThe maximum number of entries in the cache.
net.corda:type=Caches,component=<cache_name>,name=missesThe number of cache misses.
net.corda:type=Caches,component=<cache_name>,name=sizeThe current number of entries in the cache.
net.corda:type=Caches,component=<cache_name>,name=sizePercentThe current size of the cache expressed as a percentage of the maximum.
net.corda:type=Caches,component=<cache_name>,name=maximum-weightThe maximum size of the cache, expressed as a total weight.
net.corda:type=Caches,component=<cache_name>,name=weightThe current weight of the cache.
net.corda:type=Caches,component=<cache_name>,name=weightPercentThe current weight of the cache, expressed as a percentage of the maximum.
Metric QueryDescription
net.corda:type=Flows,name=ActiveThreadsThe total number of threads running flows.
net.corda:type=Flows,name=CheckpointVolumeBytesPerSecondCurrentThe current rate at which checkpoint data is being persisted.
net.corda:type=Flows,name=CheckpointVolumeBytesPerSecondHistA histogram indicating the rate at which bytes are being checkpointed.
net.corda:type=Flows,name=Checkpointing RateThe rate at which checkpoint events are occurring.
net.corda:type=Flows,name=ErrorThe total number of flows failed with an error.
net.corda:type=Flows,name=ErrorPerMinuteThe rate at which flows fail with an error.
net.corda:type=Flows,name=FinishedThe total number of completed flows (both successfully and unsuccessfully).
net.corda:type=Flows,name=InFlightThe number of in-flight flows.
net.corda:type=Flows,name=QueueSizeThe current size of the queue for flows waiting to be executed.
net.corda:type=Flows,name=QueueSizeOnInsertA histogram showing the queue size at the point new flows are added.
net.corda:type=Flows,name=StartedThe total number of flows started.
net.corda:type=Flows,name=StartedPerMinuteThe rate at which flows are started.
net.corda:type=Flows,name=StartupQueueTimeThis timer measures the time a flow spends queued before it is executed.
net.corda:type=Flows,name=SuccessThe total number of successful flows.
net.corda:type=Flows,name=<action_name>A histogram indicating the time taken to execute a particular action. See the following section for more details.

Actions are reified IO actions to execute as part of state machine transitions. These metrics are only exposed when the relevant action gets executed for the first time.

Metric QueryAction description
net.corda:type=Flows,name=Actions.AcknowledgeMessagesAcknowledge messages
net.corda:type=Flows,name=Actions.AddSessionBindingCreate a session binding to allow routing of incoming messages.
net.corda:type=Flows,name=Actions.CancelFlowTimeoutCancel the retry timeout for a flow.
net.corda:type=Flows,name=Actions.CommitTransactionCommit the current database transaction.
net.corda:type=Flows,name=Actions.CreateTransactionCreate a new database transaction.
net.corda:type=Flows,name=Actions.ExecuteAsyncOperationExecute the specified operation.
net.corda:type=Flows,name=Actions.PersistCheckpointPersist a checkpoint.
net.corda:type=Flows,name=Actions.PersistDeduplicationFactsPersist deduplication facts.
net.corda:type=Flows,name=Actions.PropagateErrorsPropagate error messages to sessions.
net.corda:type=Flows,name=Actions.ReleaseSoftLocksRelease soft locks associated with a given ID.
net.corda:type=Flows,name=Actions.RemoveCheckpointRemove a checkpoint.
net.corda:type=Flows,name=Actions.RemoveFlowRemove a flow.
net.corda:type=Flows,name=Actions.RemoveSessionBindingsRemove session bindings.
net.corda:type=Flows,name=Actions.RetryFlowFromSafePointRetry a flow from the last checkpoint. If there is no checkpoint, restart the flow with the same invocation details.
net.corda:type=Flows,name=Actions.RollbackTransactionRoll back the current database transaction.
net.corda:type=Flows,name=Actions.ScheduleEventSchedule an event.
net.corda:type=Flows,name=Actions.ScheduleFlowTimeoutSchedule a flow to be retried if it does not complete within the timeout period specified in the configuration.
net.corda:type=Flows,name=Actions.SendExistingSend a session message to a party with which there has been an established session.
net.corda:type=Flows,name=Actions.SendInitialSend an initial session message to a destination.
net.corda:type=Flows,name=Actions.SendMultipleSend session messages to multiple destinations.
net.corda:type=Flows,name=Actions.SignalFlowHasStartedSignal that a flow is considered as started.
net.corda:type=Flows,name=Actions.SleepUntilSleep until a given moment in time.
net.corda:type=Flows,name=Actions.TrackTransactionTrack a transaction hash and notify the state machine once the corresponding transaction has committed.
Metric QueryDescription
net.corda:type=Metering,name=commandsPersistedThe number of unique sets of commands persisted.
net.corda:type=Metering,name=droppedCountsThe number of signing events not persisted.
net.corda:type=Metering,name=eventsProcessedA histogram indicating the number of events processed on every aggregation interval.
net.corda:type=Metering,name=dataQueueSizeAn instant value of the size of the queue of aggregation events.
net.corda:type=Metering,name=stacksPersistedThe number of unique CorDapp stacks persisted.
net.corda:type=Metering,name=totalCountsThe total number of signing events persisted.
Metric QueryDescription
net.corda:type=P2P,name=ReceiveDurationA histogram measuring latency between the node receiving a P2P message and delivering it to the state machine.
net.corda:type=P2P,name=ReceiveIntervalA histogram measuring the interval between received P2P messages.
net.corda:type=P2P,name=ReceiveMessageSizeA histogram measuring the size of received messages.
net.corda:type=P2P,name=SendLatencyA histogram measuring latency when sending P2P messages, between the message sending and the send acknowledgement by Artemis.
net.corda:type=P2P,name=SendMessageSizeA histogram measuring the size of sent messages.
net.corda:type=P2P,name=SendQueueSizeThe size of the in-memory send queue in the state machine for messages waiting to be sent to Artemis.
net.corda:type=P2P,name=SendQueueSizeOnInsertA histogram measuring the size of the in-memory send queue in the state machine when new messages are added.
Metric QueryDescription
net.corda:type=NetworkParameter,name=UpdateProposedA gauge with a true / false value to indicate that a network parameter update was proposed but it has not been accepted yet.
net.corda:type=Transaction,name=SignDurationA histogram measuring the time taken to sign a transaction.

Was this page helpful?

Thanks for your feedback!

Chat with us

Chat with us on our #docs channel on slack. You can also join a lot of other slack channels there and have access to 1-on-1 communication with members of the R3 team and the online community.

Propose documentation improvements directly

Help us to improve the docs by contributing directly. It's simple - just fork this repository and raise a PR of your own - R3's Technical Writers will review it and apply the relevant suggestions.

We're sorry this page wasn't helpful. Let us know how we can make it better!

Chat with us

Chat with us on our #docs channel on slack. You can also join a lot of other slack channels there and have access to 1-on-1 communication with members of the R3 team and the online community.

Create an issue

Create a new GitHub issue in this repository - submit technical feedback, draw attention to a potential documentation bug, or share ideas for improvement and general feedback.

Propose documentation improvements directly

Help us to improve the docs by contributing directly. It's simple - just fork this repository and raise a PR of your own - R3's Technical Writers will review it and apply the relevant suggestions.