|
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