Spring Boot Actuator provides production-ready monitoring and management features including health checks, metrics, auditing, and operational endpoints.
npx @tessl/cli install tessl/maven-org-springframework-boot--spring-boot-actuator@3.5.0Spring Boot Actuator provides production-ready monitoring and management features for Spring Boot applications. It includes built-in endpoints for health checks, metrics collection, auditing, and application introspection, with support for both HTTP and JMX access.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
<version>3.5.3</version>
</dependency>import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.boot.actuate.health.ReactiveHealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.info.InfoContributor;
import org.springframework.boot.actuate.info.Info;
import org.springframework.boot.actuate.audit.AuditEvent;
import org.springframework.boot.actuate.metrics.MetricsEndpoint;import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.stereotype.Component;
@Component
public class CustomHealthIndicator implements HealthIndicator {
@Override
public Health health() {
// Perform your health check logic
boolean healthy = checkSystemHealth();
if (healthy) {
return Health.up()
.withDetail("status", "All systems operational")
.build();
} else {
return Health.down()
.withDetail("error", "System unavailable")
.build();
}
}
private boolean checkSystemHealth() {
// Your health check implementation
return true;
}
}import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.stereotype.Component;
import java.util.Map;
@Endpoint(id = "custom")
@Component
public class CustomEndpoint {
@ReadOperation
public Map<String, Object> customInfo() {
return Map.of(
"status", "active",
"version", "1.0.0",
"uptime", getUptime()
);
}
private String getUptime() {
// Calculate uptime
return "5 days, 3 hours";
}
}Spring Boot Actuator is built around several key architectural components:
Core framework for creating custom actuator endpoints with support for HTTP and JMX access. Provides annotations for defining operations and automatic integration with Spring Boot's management infrastructure.
// Endpoint creation annotations
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Endpoint {
String id() default "";
@Deprecated(since = "3.4.0", forRemoval = true)
boolean enableByDefault() default true;
Access defaultAccess() default Access.UNRESTRICTED;
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ReadOperation {
String[] produces() default {};
Class<? extends Producible> producesFrom() default Producible.class;
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface WriteOperation {
String[] produces() default {};
Class<? extends Producible> producesFrom() default Producible.class;
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DeleteOperation {
String[] produces() default {};
Class<? extends Producible> producesFrom() default Producible.class;
}Comprehensive health checking system with built-in indicators for databases, messaging systems, and infrastructure components. Supports both blocking and reactive implementations.
public interface HealthIndicator {
Health health();
}
public interface ReactiveHealthIndicator {
Mono<Health> health();
}
public final class Health {
public static Builder up();
public static Builder down();
public static Builder unknown();
public static Builder status(Status status);
}Integration with Micrometer for comprehensive application metrics including JVM, HTTP, database, and custom metrics. Supports various monitoring system exports including Prometheus, CloudWatch, and more.
public class MetricsEndpoint {
public MetricsEndpoint(MeterRegistry registry);
public MetricNamesDescriptor listNames();
public MetricDescriptor metric(String requiredMetricName, List<String> tag);
}
// Auto-configuration for metrics binders
public interface MeterBinder {
void bindTo(MeterRegistry registry);
}System for contributing application metadata, build information, Git details, and environment information accessible via the info endpoint.
public interface InfoContributor {
void contribute(Info.Builder builder);
}
public final class Info {
public Map<String, Object> getDetails();
public static final class Builder {
public Builder withDetail(String key, Object value);
public Builder withDetails(Map<String, Object> details);
public Info build();
}
}Event auditing system for tracking authentication events, authorization failures, and custom application events with pluggable storage backends.
public class AuditEvent {
public AuditEvent(String principal, String type, Map<String, Object> data);
public AuditEvent(String principal, String type, String... data);
public AuditEvent(Instant timestamp, String principal, String type, Map<String, Object> data);
public Instant getTimestamp();
public String getPrincipal();
public String getType();
public Map<String, Object> getData();
}
public interface AuditEventRepository {
void add(AuditEvent event);
List<AuditEvent> find(String principal, Instant after, String type);
}Comprehensive set of pre-built endpoints for application management including beans, environment, configuration properties, thread dumps, heap dumps, and more.
// Key built-in endpoints
public class BeansEndpoint { /* Application context beans */ }
public class EnvironmentEndpoint { /* Environment properties */ }
public class ConfigurationPropertiesEndpoint { /* Configuration properties */ }
public class ThreadDumpEndpoint { /* Thread dump generation */ }
public class HeapDumpEndpoint { /* Heap dump generation */ }
public class ShutdownEndpoint { /* Graceful shutdown */ }// Endpoint access level enumeration
public enum Access {
/** No access to the endpoint is permitted */
NONE,
/** Read-only access to the endpoint is permitted */
READ_ONLY,
/** Unrestricted access to the endpoint is permitted */
UNRESTRICTED;
/** Cap access to a maximum permitted level */
public Access cap(Access maxPermitted);
}
// Health status enumeration
public final class Status {
public static final Status UP;
public static final Status DOWN;
public static final Status OUT_OF_SERVICE;
public static final Status UNKNOWN;
public Status(String code, String description);
public String getCode();
public String getDescription();
}
// Endpoint identifier
public final class EndpointId {
public static EndpointId of(String value);
public String getValue();
}
// Security context for operations
public final class SecurityContext {
public static SecurityContext of(Principal principal, String... roles);
public Principal getPrincipal();
public boolean isUserInRole(String role);
}
// Web endpoint response wrapper
public final class WebEndpointResponse<T> {
public WebEndpointResponse(T body, int status);
public T getBody();
public int getStatus();
}