|
|
@ -42,8 +42,12 @@ import org.springframework.lang.Nullable;
|
|
|
|
@WebEndpoint(id = "prometheus")
|
|
|
|
@WebEndpoint(id = "prometheus")
|
|
|
|
public class PrometheusScrapeEndpoint {
|
|
|
|
public class PrometheusScrapeEndpoint {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final int METRICS_SCRAPE_CHARS_EXTRA = 1024;
|
|
|
|
|
|
|
|
|
|
|
|
private final CollectorRegistry collectorRegistry;
|
|
|
|
private final CollectorRegistry collectorRegistry;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private volatile int nextMetricsScrapeSize = 16;
|
|
|
|
|
|
|
|
|
|
|
|
public PrometheusScrapeEndpoint(CollectorRegistry collectorRegistry) {
|
|
|
|
public PrometheusScrapeEndpoint(CollectorRegistry collectorRegistry) {
|
|
|
|
this.collectorRegistry = collectorRegistry;
|
|
|
|
this.collectorRegistry = collectorRegistry;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -51,12 +55,16 @@ public class PrometheusScrapeEndpoint {
|
|
|
|
@ReadOperation(producesFrom = TextOutputFormat.class)
|
|
|
|
@ReadOperation(producesFrom = TextOutputFormat.class)
|
|
|
|
public WebEndpointResponse<String> scrape(TextOutputFormat format, @Nullable Set<String> includedNames) {
|
|
|
|
public WebEndpointResponse<String> scrape(TextOutputFormat format, @Nullable Set<String> includedNames) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
Writer writer = new StringWriter();
|
|
|
|
Writer writer = new StringWriter(this.nextMetricsScrapeSize);
|
|
|
|
Enumeration<MetricFamilySamples> samples = (includedNames != null)
|
|
|
|
Enumeration<MetricFamilySamples> samples = (includedNames != null)
|
|
|
|
? this.collectorRegistry.filteredMetricFamilySamples(includedNames)
|
|
|
|
? this.collectorRegistry.filteredMetricFamilySamples(includedNames)
|
|
|
|
: this.collectorRegistry.metricFamilySamples();
|
|
|
|
: this.collectorRegistry.metricFamilySamples();
|
|
|
|
format.write(writer, samples);
|
|
|
|
format.write(writer, samples);
|
|
|
|
return new WebEndpointResponse<>(writer.toString(), format);
|
|
|
|
|
|
|
|
|
|
|
|
String scrapePage = writer.toString();
|
|
|
|
|
|
|
|
this.nextMetricsScrapeSize = scrapePage.length() + METRICS_SCRAPE_CHARS_EXTRA;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return new WebEndpointResponse<>(scrapePage, format);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (IOException ex) {
|
|
|
|
catch (IOException ex) {
|
|
|
|
// This actually never happens since StringWriter doesn't throw an IOException
|
|
|
|
// This actually never happens since StringWriter doesn't throw an IOException
|
|
|
|