|
16 | 16 |
|
17 | 17 | package org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus;
|
18 | 18 |
|
19 |
| -import java.net.MalformedURLException; |
20 |
| -import java.net.URL; |
21 |
| -import java.time.Duration; |
22 |
| -import java.util.Map; |
23 |
| - |
24 | 19 | import io.micrometer.core.instrument.Clock;
|
25 |
| -import io.prometheus.client.CollectorRegistry; |
26 |
| -import io.prometheus.client.exemplars.DefaultExemplarSampler; |
27 |
| -import io.prometheus.client.exemplars.ExemplarSampler; |
28 |
| -import io.prometheus.client.exemplars.tracer.common.SpanContextSupplier; |
29 |
| -import io.prometheus.client.exporter.BasicAuthHttpConnectionFactory; |
30 |
| -import io.prometheus.client.exporter.PushGateway; |
| 20 | +import io.micrometer.prometheusmetrics.PrometheusConfig; |
| 21 | +import io.micrometer.prometheusmetrics.PrometheusMeterRegistry; |
| 22 | +import io.prometheus.metrics.model.registry.PrometheusRegistry; |
| 23 | +import io.prometheus.metrics.tracer.common.SpanContext; |
31 | 24 |
|
32 | 25 | import org.springframework.beans.factory.ObjectProvider;
|
33 | 26 | import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint;
|
34 | 27 | import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
|
35 | 28 | import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
|
36 | 29 | import org.springframework.boot.actuate.autoconfigure.metrics.export.ConditionalOnEnabledMetricsExport;
|
37 | 30 | import org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration;
|
38 |
| -import org.springframework.boot.actuate.metrics.export.prometheus.PrometheusPushGatewayManager; |
39 |
| -import org.springframework.boot.actuate.metrics.export.prometheus.PrometheusPushGatewayManager.ShutdownOperation; |
40 | 31 | import org.springframework.boot.actuate.metrics.export.prometheus.PrometheusScrapeEndpoint;
|
| 32 | +import org.springframework.boot.actuate.metrics.export.prometheus.PrometheusSimpleclientScrapeEndpoint; |
41 | 33 | import org.springframework.boot.autoconfigure.AutoConfiguration;
|
42 | 34 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
43 | 35 | import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
44 | 36 | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
45 | 37 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
46 |
| -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
47 | 38 | import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
48 | 39 | import org.springframework.context.annotation.Bean;
|
49 | 40 | import org.springframework.context.annotation.Configuration;
|
50 |
| -import org.springframework.core.env.Environment; |
51 |
| -import org.springframework.util.StringUtils; |
52 | 41 |
|
53 | 42 | /**
|
54 | 43 | * {@link EnableAutoConfiguration Auto-configuration} for exporting metrics to Prometheus.
|
|
58 | 47 | * @author Jonatan Ivanov
|
59 | 48 | * @since 2.0.0
|
60 | 49 | */
|
61 |
| -@SuppressWarnings("deprecation") |
62 | 50 | @AutoConfiguration(
|
63 | 51 | before = { CompositeMeterRegistryAutoConfiguration.class, SimpleMetricsExportAutoConfiguration.class },
|
64 | 52 | after = MetricsAutoConfiguration.class)
|
65 | 53 | @ConditionalOnBean(Clock.class)
|
66 |
| -@ConditionalOnClass(io.micrometer.prometheus.PrometheusMeterRegistry.class) |
| 54 | +@ConditionalOnClass(PrometheusMeterRegistry.class) |
67 | 55 | @ConditionalOnEnabledMetricsExport("prometheus")
|
68 | 56 | @EnableConfigurationProperties(PrometheusProperties.class)
|
69 | 57 | public class PrometheusMetricsExportAutoConfiguration {
|
70 | 58 |
|
71 | 59 | @Bean
|
72 | 60 | @ConditionalOnMissingBean
|
73 |
| - public io.micrometer.prometheus.PrometheusConfig prometheusConfig(PrometheusProperties prometheusProperties) { |
| 61 | + PrometheusConfig prometheusConfig(PrometheusProperties prometheusProperties) { |
74 | 62 | return new PrometheusPropertiesConfigAdapter(prometheusProperties);
|
75 | 63 | }
|
76 | 64 |
|
77 | 65 | @Bean
|
78 | 66 | @ConditionalOnMissingBean
|
79 |
| - public io.micrometer.prometheus.PrometheusMeterRegistry prometheusMeterRegistry( |
80 |
| - io.micrometer.prometheus.PrometheusConfig prometheusConfig, CollectorRegistry collectorRegistry, |
81 |
| - Clock clock, ObjectProvider<ExemplarSampler> exemplarSamplerProvider) { |
82 |
| - return new io.micrometer.prometheus.PrometheusMeterRegistry(prometheusConfig, collectorRegistry, clock, |
83 |
| - exemplarSamplerProvider.getIfAvailable()); |
| 67 | + PrometheusMeterRegistry prometheusMeterRegistry(PrometheusConfig prometheusConfig, |
| 68 | + PrometheusRegistry prometheusRegistry, Clock clock, ObjectProvider<SpanContext> spanContext) { |
| 69 | + return new PrometheusMeterRegistry(prometheusConfig, prometheusRegistry, clock, spanContext.getIfAvailable()); |
84 | 70 | }
|
85 | 71 |
|
86 | 72 | @Bean
|
87 | 73 | @ConditionalOnMissingBean
|
88 |
| - public CollectorRegistry collectorRegistry() { |
89 |
| - return new CollectorRegistry(true); |
90 |
| - } |
91 |
| - |
92 |
| - @Bean |
93 |
| - @ConditionalOnMissingBean(ExemplarSampler.class) |
94 |
| - @ConditionalOnBean(SpanContextSupplier.class) |
95 |
| - public DefaultExemplarSampler exemplarSampler(SpanContextSupplier spanContextSupplier) { |
96 |
| - return new DefaultExemplarSampler(spanContextSupplier); |
| 74 | + PrometheusRegistry prometheusRegistry() { |
| 75 | + return new PrometheusRegistry(); |
97 | 76 | }
|
98 | 77 |
|
99 | 78 | @Configuration(proxyBeanMethods = false)
|
100 | 79 | @ConditionalOnAvailableEndpoint(endpoint = PrometheusScrapeEndpoint.class)
|
101 |
| - public static class PrometheusScrapeEndpointConfiguration { |
102 |
| - |
103 |
| - @Bean |
104 |
| - @ConditionalOnMissingBean |
105 |
| - public PrometheusScrapeEndpoint prometheusEndpoint(CollectorRegistry collectorRegistry) { |
106 |
| - return new PrometheusScrapeEndpoint(collectorRegistry); |
107 |
| - } |
108 |
| - |
109 |
| - } |
110 |
| - |
111 |
| - /** |
112 |
| - * Configuration for <a href="https://github.com/prometheus/pushgateway">Prometheus |
113 |
| - * Pushgateway</a>. |
114 |
| - */ |
115 |
| - @Configuration(proxyBeanMethods = false) |
116 |
| - @ConditionalOnClass(PushGateway.class) |
117 |
| - @ConditionalOnProperty(prefix = "management.prometheus.metrics.export.pushgateway", name = "enabled") |
118 |
| - public static class PrometheusPushGatewayConfiguration { |
119 |
| - |
120 |
| - /** |
121 |
| - * The fallback job name. We use 'spring' since there's a history of Prometheus |
122 |
| - * spring integration defaulting to that name from when Prometheus integration |
123 |
| - * didn't exist in Spring itself. |
124 |
| - */ |
125 |
| - private static final String FALLBACK_JOB = "spring"; |
| 80 | + static class PrometheusScrapeEndpointConfiguration { |
126 | 81 |
|
| 82 | + @SuppressWarnings("removal") |
127 | 83 | @Bean
|
128 |
| - @ConditionalOnMissingBean |
129 |
| - public PrometheusPushGatewayManager prometheusPushGatewayManager(CollectorRegistry collectorRegistry, |
130 |
| - PrometheusProperties prometheusProperties, Environment environment) throws MalformedURLException { |
131 |
| - PrometheusProperties.Pushgateway properties = prometheusProperties.getPushgateway(); |
132 |
| - Duration pushRate = properties.getPushRate(); |
133 |
| - String job = getJob(properties, environment); |
134 |
| - Map<String, String> groupingKey = properties.getGroupingKey(); |
135 |
| - ShutdownOperation shutdownOperation = properties.getShutdownOperation(); |
136 |
| - PushGateway pushGateway = initializePushGateway(properties.getBaseUrl()); |
137 |
| - if (StringUtils.hasText(properties.getUsername())) { |
138 |
| - pushGateway.setConnectionFactory( |
139 |
| - new BasicAuthHttpConnectionFactory(properties.getUsername(), properties.getPassword())); |
140 |
| - } |
141 |
| - return new PrometheusPushGatewayManager(pushGateway, collectorRegistry, pushRate, job, groupingKey, |
142 |
| - shutdownOperation); |
143 |
| - } |
144 |
| - |
145 |
| - private PushGateway initializePushGateway(String url) throws MalformedURLException { |
146 |
| - return new PushGateway(new URL(url)); |
147 |
| - } |
148 |
| - |
149 |
| - private String getJob(PrometheusProperties.Pushgateway properties, Environment environment) { |
150 |
| - String job = properties.getJob(); |
151 |
| - job = (job != null) ? job : environment.getProperty("spring.application.name"); |
152 |
| - return (job != null) ? job : FALLBACK_JOB; |
| 84 | + @ConditionalOnMissingBean({ PrometheusScrapeEndpoint.class, PrometheusSimpleclientScrapeEndpoint.class }) |
| 85 | + PrometheusScrapeEndpoint prometheusEndpoint(PrometheusRegistry prometheusRegistry) { |
| 86 | + return new PrometheusScrapeEndpoint(prometheusRegistry); |
153 | 87 | }
|
154 | 88 |
|
155 | 89 | }
|
|
0 commit comments