|
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; |
31 | 23 |
|
32 |
| -import org.springframework.beans.factory.ObjectProvider; |
33 | 24 | import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint;
|
34 | 25 | import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
|
35 | 26 | import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
|
36 | 27 | import org.springframework.boot.actuate.autoconfigure.metrics.export.ConditionalOnEnabledMetricsExport;
|
37 | 28 | 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 | 29 | import org.springframework.boot.actuate.metrics.export.prometheus.PrometheusScrapeEndpoint;
|
| 30 | +import org.springframework.boot.actuate.metrics.export.prometheus.PrometheusSimpleclientScrapeEndpoint; |
41 | 31 | import org.springframework.boot.autoconfigure.AutoConfiguration;
|
42 | 32 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
43 | 33 | import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
44 | 34 | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
45 | 35 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
46 |
| -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
47 | 36 | import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
48 | 37 | import org.springframework.context.annotation.Bean;
|
49 | 38 | import org.springframework.context.annotation.Configuration;
|
50 |
| -import org.springframework.core.env.Environment; |
51 |
| -import org.springframework.util.StringUtils; |
52 | 39 |
|
53 | 40 | /**
|
54 | 41 | * {@link EnableAutoConfiguration Auto-configuration} for exporting metrics to Prometheus.
|
|
58 | 45 | * @author Jonatan Ivanov
|
59 | 46 | * @since 2.0.0
|
60 | 47 | */
|
61 |
| -@SuppressWarnings("deprecation") |
62 | 48 | @AutoConfiguration(
|
63 | 49 | before = { CompositeMeterRegistryAutoConfiguration.class, SimpleMetricsExportAutoConfiguration.class },
|
64 | 50 | after = MetricsAutoConfiguration.class)
|
65 | 51 | @ConditionalOnBean(Clock.class)
|
66 |
| -@ConditionalOnClass(io.micrometer.prometheus.PrometheusMeterRegistry.class) |
| 52 | +@ConditionalOnClass(PrometheusMeterRegistry.class) |
67 | 53 | @ConditionalOnEnabledMetricsExport("prometheus")
|
68 | 54 | @EnableConfigurationProperties(PrometheusProperties.class)
|
69 | 55 | public class PrometheusMetricsExportAutoConfiguration {
|
70 | 56 |
|
71 | 57 | @Bean
|
72 | 58 | @ConditionalOnMissingBean
|
73 |
| - public io.micrometer.prometheus.PrometheusConfig prometheusConfig(PrometheusProperties prometheusProperties) { |
| 59 | + public PrometheusConfig prometheusConfig(PrometheusProperties prometheusProperties) { |
74 | 60 | return new PrometheusPropertiesConfigAdapter(prometheusProperties);
|
75 | 61 | }
|
76 | 62 |
|
77 | 63 | @Bean
|
78 | 64 | @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()); |
| 65 | + public PrometheusMeterRegistry prometheusMeterRegistry(PrometheusConfig prometheusConfig, |
| 66 | + PrometheusRegistry prometheusRegistry, Clock clock) { |
| 67 | + return new PrometheusMeterRegistry(prometheusConfig, prometheusRegistry, clock, null); |
84 | 68 | }
|
85 | 69 |
|
86 | 70 | @Bean
|
87 | 71 | @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); |
| 72 | + public PrometheusRegistry prometheusRegistry() { |
| 73 | + return new PrometheusRegistry(); |
97 | 74 | }
|
98 | 75 |
|
99 | 76 | @Configuration(proxyBeanMethods = false)
|
100 | 77 | @ConditionalOnAvailableEndpoint(endpoint = PrometheusScrapeEndpoint.class)
|
101 | 78 | public static class PrometheusScrapeEndpointConfiguration {
|
102 | 79 |
|
| 80 | + @SuppressWarnings("removal") |
103 | 81 | @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"; |
126 |
| - |
127 |
| - @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; |
| 82 | + @ConditionalOnMissingBean( |
| 83 | + value = { PrometheusScrapeEndpoint.class, PrometheusSimpleclientScrapeEndpoint.class }) |
| 84 | + public PrometheusScrapeEndpoint prometheusEndpoint(PrometheusRegistry prometheusRegistry) { |
| 85 | + return new PrometheusScrapeEndpoint(prometheusRegistry); |
153 | 86 | }
|
154 | 87 |
|
155 | 88 | }
|
|
0 commit comments