#Metrics

#Monitoring Uniconfig performance

Micrometer Metrics is the framework of choice to monitor performance.

#Registry naming

All the metrics are currently stored in the global registry. It can be accessed like so:

import io.micrometer.core.instrument.Metrics; Metrics.globalRegistry;

#Metric types

All the available metric types can be seen in the documentation.

#Naming convention

There are various best practice articles on how to name metrics but one thing is common: It should be clear what is measured.

import io.micrometer.core.instrument.Metrics; Metrics.globalRegistry.counter(RpcResult.class.getName() + ".rpc_invoke");

#Adding new metrics

#Adding a Counter

Obtain a Counter and then increment all the method calls you want to measure.

private final Counter rpcCounter = Metrics.globalRegistry.counter(RpcResult.class.getName() + ".rpc_invoke"); private void foo() { rpcCounter.increment(); }

#Adding a Gauge

Here we create a Gauge that returns Integer value, access is synchronized in this case to avoid race conditions.

Metrics.globalRegistry.gauge(UniconfigTransactionManager.class.getName() + ".open_transaction_count", this, uniconfigTransactionManager -> { synchronized (UniconfigTransactionManagerImpl.this) { return UniconfigTransactionManagerImpl.this.uniconfigTransactions.size(); } });

#Reporters

Metrics are available at /actuator/prometheus endpoint.