Developer-kit spring-boot-actuator
Provides patterns to configure Spring Boot Actuator for production-grade monitoring, health probes, secured management endpoints, and Micrometer metrics across JVM services. Use when setting up monitoring, health checks, or metrics for Spring Boot applications.
install
source · Clone the upstream repo
git clone https://github.com/giuseppe-trisciuoglio/developer-kit
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/giuseppe-trisciuoglio/developer-kit "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/developer-kit-java/skills/spring-boot-actuator" ~/.claude/skills/giuseppe-trisciuoglio-developer-kit-spring-boot-actuator && rm -rf "$T"
manifest:
plugins/developer-kit-java/skills/spring-boot-actuator/SKILL.mdsource content
Spring Boot Actuator Skill
Overview
- Deliver production-ready observability for Spring Boot services using Actuator endpoints, probes, and Micrometer integration.
- Standardize health, metrics, and diagnostics configuration while delegating deep reference material to
.references/ - Support platform requirements for secure operations, SLO reporting, and incident diagnostics.
When to Use
- Trigger: "enable actuator endpoints" – Bootstrap Actuator for a new or existing Spring Boot service.
- Trigger: "secure management port" – Apply Spring Security policies to protect management traffic.
- Trigger: "configure health probes" – Define readiness and liveness groups for orchestrators.
- Trigger: "export metrics to prometheus" – Wire Micrometer registries and tune metric exposure.
- Trigger: "debug actuator startup" – Inspect condition evaluations and startup metrics when endpoints are missing or slow.
Quick Start
<!-- Maven --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
// Gradle dependencies { implementation "org.springframework.boot:spring-boot-starter-actuator" }
After adding the dependency, verify endpoints respond:
curl http://localhost:8080/actuator/health curl http://localhost:8080/actuator/info
Instructions
1. Add Actuator Dependency
Include
spring-boot-starter-actuator in your build configuration.
Validate: Restart the service and confirm
and/actuator/healthrespond with/actuator/info.200 OK
2. Expose Required Endpoints
- Set
to the precise list ormanagement.endpoints.web.exposure.include
for internal deployments."*" - Adjust
(e.g.,management.endpoints.web.base-path
) when the default/management
conflicts with routing./actuator - Review detailed endpoint semantics in
.references/endpoint-reference.md
Validate:
returns the list of exposed endpoints.curl http://localhost:8080/actuator
3. Secure Management Traffic
- Apply an isolated
usingSecurityFilterChain
with role-based rules.EndpointRequest.toAnyEndpoint() - Combine
with firewall controls or service mesh policies for operator-only access.management.server.port - Keep
publicly accessible only when required; otherwise enforce authentication./actuator/health/**
Validate: Unauthenticated requests to protected endpoints return
.401 Unauthorized
4. Configure Health Probes
- Enable
formanagement.endpoint.health.probes.enabled=true
and/health/liveness
./health/readiness - Group indicators via
to match platform expectations.management.endpoint.health.group.* - Implement custom indicators by extending
orHealthIndicator
; sample implementations inReactiveHealthContributor
.references/examples.md#custom-health-indicator
Validate:
returns/actuator/health/readinesswith all mandatory components before promoting to production.UP
5. Publish Metrics and Traces
- Activate Micrometer exporters (Prometheus, OTLP, Wavefront, StatsD) via
.management.metrics.export.* - Apply
beans to addMeterRegistryCustomizer
,application
, and business tags for observability correlation.environment - Surface HTTP request metrics with
configuration when using Spring Boot 3.2+.server.observation.*
Validate: Scrape
and confirm required meters (/actuator/prometheus,http.server.requests) are present.jvm.memory.used
6. Enable Diagnostics Tooling
- Turn on
(Spring Boot 3.5+) and/actuator/startup
during incident response to inspect auto-configuration decisions./actuator/conditions - Register an
(e.g.,HttpExchangeRepository
) before enablingInMemoryHttpExchangeRepository
for request auditing./actuator/httpexchanges - Consult
for endpoint behaviors and limits.references/endpoint-reference.md
Validate:
and/actuator/startupreturn valid JSON payloads./actuator/conditions
Examples
Basic – Expose health and info safely
management: endpoints: web: exposure: include: "health,info" endpoint: health: show-details: never
Intermediate – Readiness group with custom indicator
@Component public class PaymentsGatewayHealth implements HealthIndicator { private final PaymentsClient client; public PaymentsGatewayHealth(PaymentsClient client) { this.client = client; } @Override public Health health() { boolean reachable = client.ping(); return reachable ? Health.up().withDetail("latencyMs", client.latency()).build() : Health.down().withDetail("error", "Gateway timeout").build(); } }
management: endpoint: health: probes: enabled: true group: readiness: include: "readinessState,db,paymentsGateway" show-details: always
Advanced – Dedicated management port with Prometheus export
management: server: port: 9091 ssl: enabled: true endpoints: web: exposure: include: "health,info,metrics,prometheus" base-path: "/management" metrics: export: prometheus: descriptions: true step: 30s endpoint: health: show-details: when-authorized roles: "ENDPOINT_ADMIN"
@Configuration public class ActuatorSecurityConfig { @Bean SecurityFilterChain actuatorChain(HttpSecurity http) throws Exception { http.securityMatcher(EndpointRequest.toAnyEndpoint()) .authorizeHttpRequests(c -> c .requestMatchers(EndpointRequest.to("health")).permitAll() .anyRequest().hasRole("ENDPOINT_ADMIN")) .httpBasic(Customizer.withDefaults()); return http.build(); } }
More end-to-end samples are available in
references/examples.md.
Best Practices
- Keep SKILL.md concise and rely on
for verbose documentation to conserve context.references/ - Apply the principle of least privilege: expose only required endpoints and restrict sensitive ones.
- Use immutable configuration via profile-specific YAML to align environments.
- Monitor actuator traffic separately to detect scraping abuse or brute-force attempts.
- Automate regression checks by scripting
probes in CI/CD pipelines.curl
Constraints and Warnings
- Avoid exposing
,/actuator/env
,/actuator/configprops
, and/actuator/logfile
on public networks./actuator/heapdump - Do not ship custom health indicators that block event loop threads or exceed 250 ms unless absolutely necessary.
- Ensure Actuator metrics exporters run on supported Micrometer registries; unsupported exporters require custom registry beans.
- Maintain compatibility with Spring Boot 3.5.x conventions; older versions may lack probes and observation features.
- Never expose actuator endpoints without authentication in production environments.
- Health indicators should not perform expensive operations that could impact application performance.
- Be cautious with
and/actuator/beans
as they reveal internal application structure./actuator/mappings
Reference Materials
- Endpoint quick reference
- Implementation examples
- Official documentation extract
- Auditing with Actuator
- Cloud Foundry integration
- Enabling Actuator features
- HTTP exchange recording
- JMX exposure
- Monitoring and metrics
- Logging configuration
- Metrics exporters
- Observability with Micrometer
- Process and Monitoring
- Tracing
- Scripts directory (
) reserved for future automation; no runtime dependencies today.scripts/
Validation Checklist
- Confirm
ormvn spring-boot:run
exposes expected endpoints under./gradlew bootRun
(or custom base path)./actuator - Verify
returns/actuator/health/readiness
with all mandatory components before promoting to production.UP - Scrape
or/actuator/metrics
to ensure required meters (/actuator/prometheus
,http.server.requests
) are present.jvm.memory.used - Run security scans to validate only intended ports and endpoints are reachable from outside the trusted network.