Commit 1a84b061 authored by Andy Wilkinson's avatar Andy Wilkinson

Align PushGatewayManager's exception handling with PushMeterRegistry's

Previously, would log an error for any exception and also stop
publishing for an UnknownHostException. By constrast, Micrometer's
PushMeterRegistry treats all exceptions the same, logging a warning
and continuing with subsequent push attempts.

This commit updates the push gateway manager's behaviour to match
PushMeterRegistry. UknownHostExceptions no longer receive special
treatment and push (and delete) failures are now logged as warnings
rather than errors.

Fixes gh-25804
parent da9d8d60
/* /*
* Copyright 2012-2019 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
package org.springframework.boot.actuate.metrics.export.prometheus; package org.springframework.boot.actuate.metrics.export.prometheus;
import java.net.UnknownHostException;
import java.time.Duration; import java.time.Duration;
import java.util.Map; import java.util.Map;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
...@@ -31,7 +30,6 @@ import org.apache.commons.logging.LogFactory; ...@@ -31,7 +30,6 @@ import org.apache.commons.logging.LogFactory;
import org.springframework.scheduling.TaskScheduler; import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
/** /**
* Class that can be used to manage the pushing of metrics to a {@link PushGateway * Class that can be used to manage the pushing of metrics to a {@link PushGateway
...@@ -107,16 +105,8 @@ public class PrometheusPushGatewayManager { ...@@ -107,16 +105,8 @@ public class PrometheusPushGatewayManager {
try { try {
this.pushGateway.pushAdd(this.registry, this.job, this.groupingKey); this.pushGateway.pushAdd(this.registry, this.job, this.groupingKey);
} }
catch (UnknownHostException ex) {
String host = ex.getMessage();
String message = "Unable to locate prometheus push gateway host"
+ (StringUtils.hasLength(host) ? " '" + host + "'" : "")
+ ". No longer attempting metrics publication to this host";
logger.error(message, ex);
shutdown(ShutdownOperation.NONE);
}
catch (Throwable ex) { catch (Throwable ex) {
logger.error("Unable to push metrics to Prometheus Pushgateway", ex); logger.warn("Unexpected exception thrown while pushing metrics to Prometheus Pushgateway", ex);
} }
} }
...@@ -125,7 +115,7 @@ public class PrometheusPushGatewayManager { ...@@ -125,7 +115,7 @@ public class PrometheusPushGatewayManager {
this.pushGateway.delete(this.job, this.groupingKey); this.pushGateway.delete(this.job, this.groupingKey);
} }
catch (Throwable ex) { catch (Throwable ex) {
logger.error("Unable to delete metrics from Prometheus Pushgateway", ex); logger.warn("Unexpected exception thrown while deleting metrics from Promethues Pushgateway", ex);
} }
} }
......
/* /*
* Copyright 2012-2019 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
package org.springframework.boot.actuate.metrics.export.prometheus; package org.springframework.boot.actuate.metrics.export.prometheus;
import java.net.UnknownHostException;
import java.time.Duration; import java.time.Duration;
import java.util.Collections; import java.util.Collections;
import java.util.Map; import java.util.Map;
...@@ -165,17 +164,6 @@ class PrometheusPushGatewayManagerTests { ...@@ -165,17 +164,6 @@ class PrometheusPushGatewayManagerTests {
verifyNoInteractions(this.pushGateway); verifyNoInteractions(this.pushGateway);
} }
@Test
void pushWhenUnknownHostExceptionIsThrownDoesShutdown() throws Exception {
new PrometheusPushGatewayManager(this.pushGateway, this.registry, this.scheduler, this.pushRate, "job",
this.groupingKey, null);
verify(this.scheduler).scheduleAtFixedRate(this.task.capture(), eq(this.pushRate));
willThrow(new UnknownHostException("foo")).given(this.pushGateway).pushAdd(this.registry, "job",
this.groupingKey);
this.task.getValue().run();
verify(this.future).cancel(false);
}
@Test @Test
void pushDoesNotThrowException() throws Exception { void pushDoesNotThrowException() throws Exception {
new PrometheusPushGatewayManager(this.pushGateway, this.registry, this.scheduler, this.pushRate, "job", new PrometheusPushGatewayManager(this.pushGateway, this.registry, this.scheduler, this.pushRate, "job",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment