Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bump io.micrometer:micrometer-registry-prometheus from 1.12.5 to 1.13.1 #767

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion dusseldorf-ktor-health/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_common</artifactId>
<artifactId>prometheus-metrics-core</artifactId>
<version>${prometheus.version}</version>
</dependency>
</dependencies>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package no.nav.helse.dusseldorf.ktor.health

import io.prometheus.client.Gauge
import io.prometheus.metrics.core.metrics.Gauge
import kotlinx.coroutines.runBlocking
import java.time.Duration
import java.util.*
Expand All @@ -16,9 +16,9 @@ class HealthReporter(
private const val HEALTHY = 0.0
private const val UNHEALTHY = 1.0

private val gauge = Gauge
.build("health_check_status",
"Indikerer applikasjonens helse status. 0 er OK, 1 indikerer feil.")
private val gauge = Gauge.builder()
.name("health_check_status")
.help("Indikerer applikasjonens helse status. 0 er OK, 1 indikerer feil.")
.labelNames("app")
.register()
}
Expand All @@ -41,9 +41,9 @@ class HealthReporter(

private fun Gauge.setFromResults(results: List<Result>) {
if (results.any { it is UnHealthy }) {
labels(app).set(UNHEALTHY)
labelValues(app).set(UNHEALTHY)
} else {
labels(app).set(HEALTHY)
labelValues(app).set(HEALTHY)
}
}
}
7 changes: 1 addition & 6 deletions dusseldorf-ktor-metrics/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,7 @@
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_common</artifactId>
<version>${prometheus.version}</version>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_hotspot</artifactId>
<artifactId>prometheus-metrics-core</artifactId>
<version>${prometheus.version}</version>
</dependency>
</dependencies>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,33 +1,25 @@
package no.nav.helse.dusseldorf.ktor.metrics

import io.ktor.server.application.*
import io.ktor.http.*
import io.ktor.server.response.*
import io.ktor.server.routing.Route
import io.ktor.server.routing.get
import io.prometheus.client.CollectorRegistry
import io.prometheus.client.exporter.common.TextFormat
import io.ktor.server.routing.*
import io.micrometer.core.instrument.Clock
import io.micrometer.prometheusmetrics.PrometheusConfig
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
import io.prometheus.metrics.model.registry.PrometheusRegistry
import no.nav.helse.dusseldorf.ktor.core.Paths
import org.slf4j.Logger
import org.slf4j.LoggerFactory

private val logger: Logger = LoggerFactory.getLogger("no.nav.helse.dusseldorf.ktor.metrics.MetricsRoute")

fun Route.MetricsRoute(
collectorRegistry: CollectorRegistry = CollectorRegistry.defaultRegistry,
path: String = Paths.DEFAULT_METRICS_PATH) {

fun ApplicationCall.names() =
request.queryParameters.getAll("name[]")?.toSet() ?: emptySet()

registry : PrometheusMeterRegistry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT, PrometheusRegistry.defaultRegistry, Clock.SYSTEM),
path: String = Paths.DEFAULT_METRICS_PATH
) {

get(path) {
logger.debug("Metrics hentes")
val names = call.names()
val metrics = collectorRegistry.filteredMetricFamilySamples(names)

call.respondTextWriter(ContentType.parse(TextFormat.CONTENT_TYPE_004)) {
TextFormat.write004(this, metrics)
}
call.respondText { registry.scrape() }
}
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
package no.nav.helse.dusseldorf.ktor.metrics

import io.ktor.server.application.ApplicationCall
import io.ktor.http.HttpStatusCode
import io.ktor.http.*
import io.ktor.http.HttpStatusCode.Companion.Forbidden
import io.ktor.http.HttpStatusCode.Companion.NotFound
import io.ktor.http.HttpStatusCode.Companion.Unauthorized
import io.ktor.server.metrics.micrometer.MicrometerMetricsConfig
import io.ktor.util.AttributeKey
import io.ktor.server.application.*
import io.ktor.server.metrics.micrometer.*
import io.ktor.util.*
import io.micrometer.core.instrument.Clock
import io.micrometer.prometheus.PrometheusConfig
import io.micrometer.prometheus.PrometheusMeterRegistry
import io.prometheus.client.CollectorRegistry
import io.micrometer.prometheusmetrics.PrometheusConfig
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
import io.prometheus.metrics.model.registry.PrometheusRegistry

fun MicrometerMetricsConfig.init(
app: String,
collectorRegistry: CollectorRegistry = CollectorRegistry.defaultRegistry
registry : PrometheusMeterRegistry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT, PrometheusRegistry.defaultRegistry, Clock.SYSTEM)
) {
registry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT, collectorRegistry, Clock.SYSTEM)
this.registry = registry
timers { call, throwable ->
tag("app", app)
tag("result",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
package no.nav.helse.dusseldorf.ktor.metrics

import io.prometheus.client.Counter
import io.prometheus.client.Histogram
import io.prometheus.metrics.core.metrics.Counter
import io.prometheus.metrics.core.metrics.Histogram


class Operation {
companion object {
private val histogram = Histogram
.build("monitored_operation_histogram",
"Histogram som måler operasjoner.")
private val histogram = Histogram.builder()
.name ("monitored_operation_histogram")
.labelNames("app", "operation")
.register()

private val counter = Counter
.build(
"monitored_operation_counter",
"Teller for alle målte operasjoenr.")
private val counter = Counter.builder()
.name("monitored_operation_counter")
.labelNames("app", "operation", "result")
.register()

Expand All @@ -24,13 +22,13 @@ class Operation {
resultResolver: (T) -> Boolean = { true },
block: suspend () -> T
) : T {
val timer = histogram.labels(app, operation).startTimer()
val timer = histogram.labelValues(app, operation).startTimer()
return try {
val result = block()
counter.labels(app, operation, resultResolver(result).toResult())
counter.labelValues(app, operation, resultResolver(result).toResult())
result
} catch (cause: Throwable) {
counter.labels(app, operation, false.toResult()).inc()
counter.labelValues(app, operation, false.toResult()).inc()
throw cause
} finally {
timer.observeDuration()
Expand Down
5 changes: 5 additions & 0 deletions dusseldorf-ktor-streams/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,11 @@
<artifactId>json</artifactId>
<version>${orgjson.version}</version>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>prometheus-metrics-core</artifactId>
<version>${prometheus.version}</version>
</dependency>
</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package no.nav.helse.dusseldorf.ktor.streams

import io.prometheus.client.Gauge
import io.prometheus.metrics.core.metrics.Gauge
import no.nav.helse.dusseldorf.ktor.health.HealthCheck
import no.nav.helse.dusseldorf.ktor.health.Result
import no.nav.helse.dusseldorf.ktor.health.Healthy
Expand All @@ -22,9 +22,9 @@ class ManagedStream(
private val unreadyAfterStreamStoppedIn: Duration) {

private companion object {
private val streamStatus = Gauge
.build("stream_status",
"Indikerer streamens status. 0 er Running, 1 er stopped.")
private val streamStatus = Gauge.builder()
.name("stream_status")
.help("Indikerer streamens status. 0 er Running, 1 er stopped.")
.labelNames("stream")
.register()
}
Expand Down Expand Up @@ -119,8 +119,8 @@ class ManagedStream(
return streams
}

private fun Gauge.running() = labels(name).set(0.0)
private fun Gauge.stopped() = labels(name).set(1.0)
private fun Gauge.running() = labelValues(name).set(0.0)
private fun Gauge.stopped() = labelValues(name).set(1.0)
}

class ManagedStreamHealthy(private val managedStream: ManagedStream) : HealthCheck {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package no.nav.helse.dusseldorf.ktor.streams

import io.prometheus.client.Counter
import io.prometheus.metrics.core.metrics.Counter
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.slf4j.MDCContext
import no.nav.helse.dusseldorf.ktor.core.Retry
Expand All @@ -11,13 +11,13 @@ import java.time.ZoneId
import java.time.ZonedDateTime

private object StreamCounter {
private val counter = Counter.build()
private val counter = Counter.builder()
.name("stream_processing_status_counter")
.help("Teller for status av prosessering av meldinger på streams.")
.labelNames("stream", "status")
.register()
internal fun ok(stream: String) = counter.labels(stream, "OK").inc()
internal fun feil(stream: String) = counter.labels(stream, "FEIL").inc()
internal fun ok(stream: String) = counter.labelValues(stream, "OK").inc()
internal fun feil(stream: String) = counter.labelValues(stream, "FEIL").inc()
}

fun process(
Expand Down
9 changes: 6 additions & 3 deletions dusseldorf-ktor-testapp/src/main/kotlin/no/nav/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import io.ktor.client.statement.*
import io.ktor.http.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
import io.prometheus.client.hotspot.DefaultExports
import kotlinx.coroutines.delay
import no.nav.helse.dusseldorf.ktor.client.HttpRequestHealthCheck
import no.nav.helse.dusseldorf.ktor.client.HttpRequestHealthConfig
Expand All @@ -30,18 +29,22 @@ fun main(args: Array<String>): Unit = EngineMain.main(args)
private val logger: Logger = LoggerFactory.getLogger("no.nav.App")

fun Application.app() {
DefaultExports.initialize()

val preStopActions = listOf(FullførAktiveRequester(application = this))
preStopOnApplicationStopPreparing(preStopActions)

var prometheusMeterRegistry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT, PrometheusRegistry.defaultRegistry, Clock.SYSTEM)

install(ContentNegotiation) {
jackson {}
}
install(MicrometerMetrics) {
init("testapp", registry = prometheusMeterRegistry)
}

routing {
DefaultProbeRoutes()
MetricsRoute()
MetricsRoute(registry = prometheusMeterRegistry)
PreStopRoute(preStopActions)
HealthRoute(
healthService = HealthService(setOf(
Expand Down
2 changes: 1 addition & 1 deletion gradle/dusseldorf-ktor.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ val ktorVersion by extra("2.3.2")
val kotlinVersion by extra("1.9.0")
val logbackVersion by extra("1.4.8")
val logstashLogbackVersion by extra("7.4")
val prometheusVersion by extra("0.16.0")
val prometheusVersion by extra("1.3.1")
val jacksonVersion by extra("2.15.2")
val caffeineVersion by extra("3.1.7")
val slf4jVersion by extra("2.0.7")
Expand Down
9 changes: 2 additions & 7 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,12 @@
<kotlin.version>2.0.0</kotlin.version>
<ktor.version>2.3.11</ktor.version>
<jackson.version>2.17.1</jackson.version>
<micrometer.version>1.12.5</micrometer.version>
<micrometer.version>1.13.1</micrometer.version>
<jackson.version>2.17.1</jackson.version>
<logback.version>1.5.6</logback.version>
<slf4j.version>2.0.13</slf4j.version>
<logstash.logback.version>7.4</logstash.logback.version>
<prometheus.version>0.16.0</prometheus.version>
<prometheus.version>1.3.1</prometheus.version>
<caffeine.version>3.1.8</caffeine.version>
<kafka.version>3.7.0</kafka.version>
<orgjson.version>20240303</orgjson.version>
Expand Down Expand Up @@ -86,11 +86,6 @@
<version>${ktor.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_common</artifactId>
<version>${prometheus.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test-junit</artifactId>
Expand Down
Loading