Skip to main content

Actuator Read ExecModule

Overview

ActuatorReadModule reads a fresh Spring Boot Actuator health response and up to 24 individual metric responses from one configured service origin. It writes the observed health, metrics, failed endpoints, elapsed duration, and the selected healthy or unhealthy transition to workflow state.

Version 2.0 replaces the module's undocumented, open-ended HTTP behavior with an explicit read contract. Only health and metrics/<name> paths are accepted. Redirects are disabled so credentials cannot be forwarded to another origin, response bodies are capped at 256 KiB, timeouts are capped at 30 seconds, and secrets are accepted only through a bound IntegrationAccount.

Usage

  1. Configure the target Spring Boot application to expose only the required Actuator endpoints.
  2. Prefer HTTPS whenever the request crosses a host or trust boundary.
  3. If the endpoint requires Basic or Bearer authentication, store the credential in an IntegrationAccount and bind it through ExecModuleConfig.authConfig.integrationAccount.
  4. Set base_url to the exact Actuator root, such as https://orders.internal.example/actuator.
  5. Include health plus any individual metrics/<name> paths in endpoints.
  6. Set the healthy and unhealthy workflow transitions, then execute the module under normal generated workflow ACL enforcement.

Every execution performs a fresh read. The module does not serve a cached health result or skip the request because an earlier attempt used the same configuration.

Inputs

NameTypeRequiredDescriptionConstraints
base_urlstringYesAbsolute URL of the Actuator root.HTTP or HTTPS; must contain a host; user info, query strings, fragments, and path traversal are rejected.
endpointsarray of stringsYesActuator paths to read.1-25 unique items; must include health; remaining items must match metrics/<name>.

The values are stored in normalized ExecModule payload configuration and appear as inputs in Workflow Studio metadata. Arbitrary Actuator paths such as env, configprops, heapdump, logfile, mappings, or shutdown are not supported.

Outputs

NameTypeDescription
actuator.health.statusstringUppercase status returned by the health endpoint, such as UP, DOWN, OUT_OF_SERVICE, or UNKNOWN.
actuator.metricsobjectRequested metric names mapped to the first numeric measurement value.
actuator.failed_endpointsarrayEndpoint names that failed transport, HTTP, or response validation.
actuator.duration_msintegerTotal elapsed time for the bounded read.
wf.nextstringnext_on_healthy only when health is UP and every requested endpoint succeeds; otherwise next_on_unhealthy.

The runtime ExecModule is marked GOOD only for a complete healthy result. Any missing, malformed, non-200, or failed endpoint marks it ERROR and selects the unhealthy transition.

IntegrationAccount Requirements

AuthenticationIntegrationAccount fieldsNotes
noneNoneUse only when the target safely permits the requested reads without credentials.
basicusername, encrypted passwordThe account must be READY. A legacy non-secret auth.username fallback is accepted, but the password never comes from payload configuration.
bearerencrypted apiKeyThe account must be READY; apiKey is sent as the Bearer token.

Bind the account through the generated ExecModuleConfig.authConfig.integrationAccount relationship. Do not put passwords, tokens, API keys, bearer values, or credential-bearing URLs in payloadConfig.parameters; the module rejects them before network access.

Configuration

FieldTypeDefaultDescription
actuatorAccountIntegrationAccountNoneWorkflow Studio account selector for authenticated reads.
auth_typenone, basic, or bearernoneAuthentication strategy.
base_urlURLNoneExact Actuator root.
endpointsJSON array["health"]Health plus optional individual metric paths.
timeout_secinteger10Per-endpoint connection and read timeout, from 1 through 30 seconds.
next_on_healthystringpromoteBounded transition name selected after a complete UP result.
next_on_unhealthystringrollbackBounded transition name selected for every other result.

Illustrative normalized payload parameters:

{
"base_url": "https://orders.internal.example/actuator",
"endpoints": ["health", "metrics/process.uptime"],
"auth_type": "bearer",
"timeout_sec": 5,
"next_on_healthy": "promote",
"next_on_unhealthy": "rollback"
}

The Bearer token is not part of this JSON. It remains in the encrypted apiKey field of the bound account.

Operations

The module performs one bounded operation:

  1. Validate the URL, endpoint allowlist, timeout, transition names, and account binding.
  2. Read health and each configured metric sequentially from the same origin.
  3. Reject redirects and any response larger than 256 KiB.
  4. Parse health.status and the first numeric value in each metric's measurements array.
  5. Record the complete result and select the healthy or unhealthy transition.

The module does not enumerate metric names, read arbitrary Actuator resources, mutate the target, retry automatically, or follow redirects.

Errors and Failure Modes

FailureResultRecovery
Invalid URL or endpointNo request is sent; module is ERROR.Correct the URL and use only health or metrics/<name>.
Inline credentialNo request is sent; module is ERROR.Remove the secret and bind a READY IntegrationAccount.
Missing or unusable accountNo request is sent; module is ERROR.Bind an account with the required Basic or Bearer fields.
HTTP redirectRedirect is not followed; endpoint fails.Point base_url at the final same-origin Actuator root.
HTTP non-200Endpoint is added to actuator.failed_endpoints.Check endpoint exposure, authentication, authorization, proxy, and service state.
Timeout or network errorEndpoint fails with a sanitized EventLog.Check connectivity and service health, then run a deliberate fresh read.
Oversized or malformed responseEndpoint fails without retaining the response body.Reduce exposed detail or correct the target's Actuator response contract.
Health not UP or any metric failureRuntime module is ERROR; next_on_unhealthy is selected.Inspect service-side diagnostics under separately authorized operational access.

Credentials, response bodies, and transport exception bodies are never written to workflow state or failure events.

Example

Configuration:

{
"base_url": "https://orders.internal.example/actuator",
"endpoints": ["health", "metrics/process.uptime"],
"auth_type": "bearer",
"timeout_sec": 5
}

Given {"status":"UP"} and a metric response containing {"measurements":[{"value":123.5}]}, the expected result shape is:

{
"actuator.health.status": "UP",
"actuator.metrics": {"process.uptime": 123.5},
"actuator.failed_endpoints": [],
"actuator.duration_ms": 42,
"wf.next": "promote"
}

Notes

  • Pagination: not applicable. Each configured path is a single bounded Actuator read.
  • Limits: at most 25 endpoints, 30 seconds per endpoint, and 256 KiB per response. Reads are sequential to avoid a monitoring burst against a degraded target.
  • Idempotency: reads are naturally safe to retry, but health is time-sensitive. The module always performs a fresh request and does not cache or short-circuit repeated configurations.
  • API constraints: only the standard health shape and the first numeric value in a standard metric measurements array are normalized. Composite components and metric tags remain service-side details.
  • Rate limits: there is no automatic retry. A target or proxy can rate-limit the read; the affected endpoint then fails closed.
  • Destructive behavior: none. The module supports GET reads only and never calls write-capable Actuator paths.
  • Security: this module intentionally reaches operator-configured internal services. Generated workflow ACLs remain authoritative; the module's URL and path checks reduce, but do not replace, network egress policy and service-side Actuator authorization.
  • Observability: EventLogs contain endpoint names, HTTP status codes, and bounded success/failure summaries, never credentials or response bodies.
  • Unverified boundary: deterministic tests cover configuration validation, same-origin request construction, account binding, response mapping, fresh repeated reads, metadata serialization, and secret-safe failures. A live authenticated customer Actuator service is not called in repository tests.

See the Spring Boot reference for service-side endpoint exposure, security, and health or metric response configuration.