IncidentCrafterComponentDown

Severity: warning · Fires after: 5m · Rule: central/prometheus/rules/crafter.yml

What it means

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.

Expression

crafter_component_up == 0

⚠️ Read this before debugging

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.

The diagnostic that discriminates

# 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.

First checks

ssh jakefear@docker2 'docker logs --tail 100 crafter-exporter'
ssh jakefear@docker2 'curl -s 172.17.0.1:9209/metrics | grep crafter_component_up'

How to clear

Correct the URL or the token (CRAFTER_MGMT_TOKEN in remote.env, default defaultManagementToken), then:

bin/deploy-crafter-exporter.sh docker2

Notes

⚠️ 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.