Mati Galli
11/29/2024, 9:37 PMMati Galli
11/29/2024, 9:38 PMprivate fun getStatsdMeterRegistry(): StatsdMeterRegistry {
val statsdConfig = getMeterConfig()
val statsdMeterRegistry = StatsdMeterRegistry(statsdConfig, Clock.SYSTEM)
statsdMeterRegistry.Config()
.namingConvention { name, _, _ -> "$SERVICE_METRICS_PREFIX.$name" }
.commonTags(
listOf(
Tag.of("env", Environment.getEnvironment()),
Tag.of("service", Config.getAppName()),
Tag.of("version", Config.getAppVersion())
)
)
return statsdMeterRegistry
}
private fun getMeterConfig(): StatsdConfig {
return StatsdConfig { path ->
when (path) {
"statsd.host" -> HOST
"statsd.port" -> PORT.toString()
"statsd.enabled" -> ENABLED.toString()
"statsd.step" -> STEP
else -> null
}
}
}
fun Application.features() {
install(MicrometerMetrics) {
registry = KtorMicrometer.getRegistry()
meterBinders = KtorMicrometer.meterBinders()
timers { call, throwable ->
throwable?.apply { tag("exception_message", this.message ?: String.EMPTY) }
tag("origin", call.request.headers[Headers.ORIGIN] ?: "UNKNOWN")
tag("platform", call.request.headers[Headers.APP_PLATFORM] ?: "UNKNOWN")
tag("app_version", call.request.headers[Headers.APP_VERSION] ?: "UNKNOWN")
}
}
}
Mati Galli
11/29/2024, 9:41 PMMati Galli
11/29/2024, 9:42 PMval ktorVersion: String by project.extra { "2.3.8" }
val micrometerVersion: String by project.extra { "1.12.3" }
implementation("io.ktor:ktor-server-metrics-micrometer:$ktorVersion")
implementation("io.micrometer:micrometer-registry-statsd:$micrometerVersion")
Mati Galli
11/29/2024, 10:29 PMAleksei Tirman [JB]
12/02/2024, 7:38 AMMati Galli
12/02/2024, 1:50 PMMati Galli
12/02/2024, 5:16 PMAleksei Tirman [JB]
12/03/2024, 12:13 PM