From 9b3a579cb3b07689be05e65164a817b51a874e45 Mon Sep 17 00:00:00 2001 From: Iilun Date: Tue, 25 Feb 2025 13:55:04 +0100 Subject: [PATCH] + prometheus: add configuration parameters to the accumulator --- .../src/main/resources/reference.conf | 9 ++++++++- .../prometheus/PrometheusPushgatewayReporter.scala | 7 ++++++- .../kamon/prometheus/PrometheusReporter.scala | 9 +++++++-- .../kamon/prometheus/PrometheusSettings.scala | 14 +++++++++++++- 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/reporters/kamon-prometheus/src/main/resources/reference.conf b/reporters/kamon-prometheus/src/main/resources/reference.conf index fd9043f71..10e88d104 100644 --- a/reporters/kamon-prometheus/src/main/resources/reference.conf +++ b/reporters/kamon-prometheus/src/main/resources/reference.conf @@ -4,7 +4,7 @@ kamon.prometheus { - # Enable or disable publishing the Prometheus scraping enpoint using a embedded server. + # Enable or disable publishing the Prometheus scraping endpoint using a embedded server. start-embedded-http-server = yes # Enable or disable including tags from kamon.environment.tags as labels @@ -98,6 +98,13 @@ kamon.prometheus { ] } + periods { + # Period over which to accumulate snapshots in the reporter + accumulation = "1825d" + # Period after which metrics are considered stale and are removed from the prometheus exported data + stale = "1825d" + } + embedded-server { # Hostname and port used by the embedded web server to publish the scraping enpoint. diff --git a/reporters/kamon-prometheus/src/main/scala/kamon/prometheus/PrometheusPushgatewayReporter.scala b/reporters/kamon-prometheus/src/main/scala/kamon/prometheus/PrometheusPushgatewayReporter.scala index 221a2a7b3..ea9e948ac 100644 --- a/reporters/kamon-prometheus/src/main/scala/kamon/prometheus/PrometheusPushgatewayReporter.scala +++ b/reporters/kamon-prometheus/src/main/scala/kamon/prometheus/PrometheusPushgatewayReporter.scala @@ -31,8 +31,13 @@ class PrometheusPushgatewayReporter( ) extends MetricReporter { private val _logger = LoggerFactory.getLogger(classOf[PrometheusPushgatewayReporter]) + private val _initialSettings = PrometheusSettings.readSettings(Kamon.config().getConfig(configPath)) private val _snapshotAccumulator = - PeriodSnapshot.accumulator(Duration.ofDays(365 * 5), Duration.ZERO, Duration.ofDays(365 * 5)) + PeriodSnapshot.accumulator( + _initialSettings.periodSettings.accumulationPeriod, + Duration.ZERO, + _initialSettings.periodSettings.stalePeriod + ) @volatile private var httpClient: HttpClient = _ @volatile private var settings: PrometheusSettings.Generic = _ diff --git a/reporters/kamon-prometheus/src/main/scala/kamon/prometheus/PrometheusReporter.scala b/reporters/kamon-prometheus/src/main/scala/kamon/prometheus/PrometheusReporter.scala index 4c9024838..10d1ec8e2 100644 --- a/reporters/kamon-prometheus/src/main/scala/kamon/prometheus/PrometheusReporter.scala +++ b/reporters/kamon-prometheus/src/main/scala/kamon/prometheus/PrometheusReporter.scala @@ -34,8 +34,6 @@ class PrometheusReporter(configPath: String = DefaultConfigPath, initialConfig: private val _logger = LoggerFactory.getLogger(classOf[PrometheusReporter]) private var _embeddedHttpServer: Option[EmbeddedHttpServer] = None - private val _snapshotAccumulator = - PeriodSnapshot.accumulator(Duration.ofDays(365 * 5), Duration.ZERO, Duration.ofDays(365 * 5)) @volatile private var _preparedScrapeData: String = "# The kamon-prometheus module didn't receive any data just yet.\n" @@ -43,6 +41,13 @@ class PrometheusReporter(configPath: String = DefaultConfigPath, initialConfig: @volatile private var _config = initialConfig @volatile private var _reporterSettings = readSettings(initialConfig.getConfig(configPath)) + private val _snapshotAccumulator = + PeriodSnapshot.accumulator( + _reporterSettings.generic.periodSettings.accumulationPeriod, + Duration.ZERO, + _reporterSettings.generic.periodSettings.stalePeriod + ) + { startEmbeddedServerIfEnabled() } diff --git a/reporters/kamon-prometheus/src/main/scala/kamon/prometheus/PrometheusSettings.scala b/reporters/kamon-prometheus/src/main/scala/kamon/prometheus/PrometheusSettings.scala index 07f51b8b9..dd7fd6aba 100644 --- a/reporters/kamon-prometheus/src/main/scala/kamon/prometheus/PrometheusSettings.scala +++ b/reporters/kamon-prometheus/src/main/scala/kamon/prometheus/PrometheusSettings.scala @@ -21,6 +21,8 @@ import kamon.tag.TagSet import kamon.util.Filter.Glob import kamon.{Kamon, UtilsOnConfig} +import java.time.Duration + import scala.collection.JavaConverters._ object PrometheusSettings { @@ -33,7 +35,8 @@ object PrometheusSettings { customBuckets: Map[String, Seq[java.lang.Double]], includeEnvironmentTags: Boolean, summarySettings: SummarySettings, - gaugeSettings: GaugeSettings + gaugeSettings: GaugeSettings, + periodSettings: PeriodSettings ) case class SummarySettings( @@ -41,6 +44,11 @@ object PrometheusSettings { metricMatchers: Seq[Glob] ) + case class PeriodSettings( + accumulationPeriod: Duration, + stalePeriod: Duration + ) + case class GaugeSettings(metricMatchers: Seq[Glob]) def readSettings(prometheusConfig: Config): Generic = { @@ -57,6 +65,10 @@ object PrometheusSettings { ), gaugeSettings = GaugeSettings( metricMatchers = prometheusConfig.getStringList("gauges.metrics").asScala.map(Glob).toSeq + ), + periodSettings = PeriodSettings( + accumulationPeriod = prometheusConfig.getDuration("periods.accumulation"), + stalePeriod = prometheusConfig.getDuration("periods.stale") ) ) }