Модуль для сбора метрик приложения с использованием Micrometer.
Требует подключения служебного HTTP сервера для предоставления метрик в формате prometheus.
===! ":fontawesome-brands-java: Java"
[Зависимость](general.md#_4) `build.gradle`:
```groovy
implementation "ru.tinkoff.kora:micrometer-module"
```
Модуль:
```java
@KoraApp
public interface Application extends MetricsModule { }
```
=== ":simple-kotlin: Kotlin"
[Зависимость](general.md#_4) `build.gradle.kts`:
```groovy
implementation("ru.tinkoff.kora:micrometer-module")
```
Модуль:
```kotlin
@KoraApp
interface Application : MetricsModule
```
Пример конфигурации пути HTTP сервера для получения метрик, описанной в классе HttpServerConfig (указаны значения по умолчанию):
===! ":material-code-json: Hocon"
```javascript
httpServer {
privateApiHttpMetricsPath = "/metrics" //(1)!
}
```
1. Путь для получения метрик в формате `prometheus` (если подключен модуль [HTTP сервера](http-server.md)):
=== ":simple-yaml: YAML"
```yaml
httpServer:
privateApiHttpMetricsPath: "/metrics" #(1)!
```
1. Путь для получения метрик в формате `prometheus` (если подключен модуль [HTTP сервера](http-server.md)):
Пример полной конфигурации, описанной в классе MetricsConfig (указаны значения по умолчанию):
===! ":material-code-json: Hocon"
```javascript
metrics {
opentelemetrySpec = "V120" //(1)!
}
```
1. Формат метрик по стандарту OpenTelemetry (доступные значения: [V120](https://opentelemetry.io/docs/specs/semconv/http/migration-guide/#migrating-from-a-version-prior-to-v1200) / [V123](https://opentelemetry.io/docs/specs/semconv/http/migration-guide/))
=== ":simple-yaml: YAML"
```yaml
metrics:
opentelemetrySpec: "V120" #(1)!
```
1. Формат метрик по стандарту OpenTelemetry (доступные значения: [V120](https://opentelemetry.io/docs/specs/semconv/http/migration-guide/#migrating-from-a-version-prior-to-v1200) / [V123](https://opentelemetry.io/docs/specs/semconv/http/migration-guide/))
Параметры конфигурации сбора метрик описываются в модулях в которых присутствует сбор метрик, например HTTP сервер, HTTP клиент и т.д.
Мы следуем и вам советуем использовать нотацию, описанную в спецификации.
После подключения модуля Metrics.globalRegistry будет зарегистрирован PrometheusMeterRegistry, который будет использоваться во всех компонентах, собирающих метрики.
Для внесения изменений в конфигурацию PrometheusMeterRegistry нужно добавить в контейнер PrometheusMeterRegistryInitializer.
Важно, PrometheusMeterRegistryInitializer применяется только один раз при инициализации приложения.
Например, мы хотим добавить общий тег для всех метрик:
===! ":fontawesome-brands-java: Java"
```java
@Module
public interface MetricsConfigModule {
default PrometheusMeterRegistryInitializer commonTagsInit() {
return registry -> {
registry.config().commonTags("tag", "value");
return registry;
};
}
}
```
=== ":simple-kotlin: Kotlin"
```kotlin
@Module
interface MetricsConfigModule {
fun commonTagsInit(): PrometheusMeterRegistryInitializer? {
return PrometheusMeterRegistryInitializer {
it.config().commonTags("tag", "value")
it
}
}
}
```
Так же стандартные метрики имеют некоторые конфигурации, такие как ServiceLayerObjectives для Distribution summary метрик.
Имена полей конфигурации можно посмотреть в ru.tinkoff.kora.micrometer.module.MetricsConfig.
Изначальный формат метрик использовал стандарт OpenTelemetry V120, после Kora 1.1.0 появилась возможность предоставления метрик
в стандарте OpenTelemetry V123, частичный список изменений можно посмотреть в документации OpenTelemetry
и рекомендациях миграции OpenTelemetry