Severity: warning · Fires after: 5m · Rule: central/prometheus/rules/crafter.yml
crafter-exporter could not get a valid response from a CrafterCMS component's
Monitoring API. {{ $labels.component }} names it (delivery-engine,
authoring-studio, a deployer, …).
Warning, not critical: this is a visibility signal. User-facing impact is covered by IncidentCrafterVhostDown.
crafter_component_up == 0
The most likely cause is not a down component.
On 2026-06-13 a delivery-stack restart pulled Crafter 5.0 under the
craftercms/delivery_tomcat:latest pin. Crafter 5.0 dropped Spring's
path-extension matching, so /api/1/monitoring/memory.json and …/status.json
started returning HTTP 200 with an empty body — not a 4xx. The exporter's
JSON parse failed (Expecting value: line 1 column 1) and this alert fired
continuously, looking like flapping only because Alertmanager re-notifies. The
site was fine throughout.
Fix: use extension-less paths (…/monitoring/memory, …/status) for all
components, as every non-engine component already did. That asymmetry was the
tell.
# Wrong token -> 401
# Valid token -> 200 with an EMPTY body == the route is the problem
ssh jakefear@docker2 'curl -s -o /dev/null -w "%{http_code}\n" \
"http://localhost:8082/api/1/monitoring/status?token=$CRAFTER_MGMT_TOKEN"'
A 200-empty proves the token is fine and the route is wrong.
ssh jakefear@docker2 'docker logs --tail 100 crafter-exporter'
ssh jakefear@docker2 'curl -s 172.17.0.1:9209/metrics | grep crafter_component_up'
Correct the URL or the token (CRAFTER_MGMT_TOKEN in remote.env, default
defaultManagementToken), then:
bin/deploy-crafter-exporter.sh docker2
⚠️ The exporter joins both crafter docker networks to reach container-only
services. Because of that, docker compose down on a crafter stack warns that
the network still has an active endpoint — stop the exporter first.