Skip to content

Conversation

@zeitlinger
Copy link
Member

@zeitlinger zeitlinger commented Jan 28, 2026

Summary

No Breaking Changes. This is fully backward compatible:

  • ✅ Existing camelCase properties in files still work
  • ✅ Existing system properties still work
  • ✅ Property precedence maintains existing behavior (external > system > file)
  • ✅ New environment variable layer added between external and system properties

Migration Guide

No migration required. However, to adopt the new features:

  1. To use environment variables: Convert property names to uppercase with underscores

    • io.prometheus.exporter.httpServer.portIO_PROMETHEUS_EXPORTER_HTTP_SERVER_PORT
  2. To use snake_case (recommended): Update properties files

    • io.prometheus.metrics.exemplarsEnabledio.prometheus.metrics.exemplars_enabled
    • Old camelCase names continue to work

Notes

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an environment-variable configuration layer and standardizes property naming to snake_case while preserving backward compatibility via key normalization.

Changes:

  • Introduces PropertySource to unify external, environment, and “regular” (system/file/classpath) properties with defined precedence.
  • Adds environment-variable loading (IO_PROMETHEUS_*) and camelCase→snake_case normalization for file/system/external keys.
  • Updates config docs, test resources, and tests to use the new snake_case property names and new loader APIs.

Reviewed changes

Copilot reviewed 23 out of 23 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PropertySource.java New abstraction for multi-source property lookup with precedence and key transformations.
prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/PrometheusPropertiesLoader.java Loads properties from file/classpath/system, adds env var layer, normalizes keys, validates leftovers.
prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/Util.java Refactors property lookup helpers to read from PropertySource and improve key formatting in errors.
prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/MetricsProperties.java Migrates internal property-name constants to snake_case and updates loading/validation paths.
prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterProperties.java Switches exporter property keys to snake_case and loads via PropertySource.
prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterHttpServerProperties.java Updates prefix/key naming to snake_case and loads via PropertySource.
prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterFilterProperties.java Renames filter keys to snake_case and updates loader wiring.
prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterOpenTelemetryProperties.java Renames OTel keys to snake_case and updates loader wiring.
prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExporterPushgatewayProperties.java Renames pushgateway keys to snake_case and updates loader wiring.
prometheus-metrics-config/src/main/java/io/prometheus/metrics/config/ExemplarsProperties.java Renames exemplars keys to snake_case and loads via PropertySource.
prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/UtilTest.java Updates tests to use PropertySource-based APIs.
prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesTest.java Updates loading tests to use PropertySource and asserts properties are consumed.
prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/PrometheusPropertiesLoaderTest.java Updates loader tests to snake_case keys.
prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/MetricsPropertiesTest.java Updates expected exception messages and property keys to snake_case.
prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPropertiesTest.java Updates keys and loader helper to use PropertySource.
prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterHttpServerPropertiesTest.java Updates keys and loader helper to use PropertySource.
prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterFilterPropertiesTest.java Updates keys and loader helper to use PropertySource.
prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterOpenTelemetryPropertiesTest.java Updates keys and loader helper to use PropertySource.
prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExporterPushgatewayPropertiesTest.java Updates loader helper to use PropertySource.
prometheus-metrics-config/src/test/java/io/prometheus/metrics/config/ExemplarsPropertiesTest.java Updates keys and loader helper to use PropertySource.
prometheus-metrics-config/src/test/resources/prometheus.properties Updates test properties file to snake_case keys.
prometheus-metrics-config/src/test/resources/emptyUpperBounds.properties Updates test properties key to snake_case.
docs/content/config/config.md Documents env var support, precedence, and snake_case naming; updates examples/tables.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
@zeitlinger zeitlinger force-pushed the feature/env-var-properties branch from 1d05224 to 8ee2b21 Compare January 29, 2026 11:51
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants