# 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.