Skip to main content
CID222 Docs

Health matrix

Every service in the deployment: what it does, what stops working while it is down, the endpoint that reports its health, and the finding that fires.

  • Version: 0.4
  • Role: admin_user, viewer
  • Type: reference

One row per service in the deployment. The What stops column is the one to read during an incident: several services fail in ways that leave the product serving, which is why a container that is down does not always match the symptom the user reported.

The full port, profile, memory-limit and image table is generated from the deployment definition: see Services, ports and profiles. This page adds what breaks and what to do.

How health is measured

The snapshot reports two different things, and they disagree usefully:

  • Container health is the deployment's own healthcheck, in the containers section. It says whether the process is up.
  • Service health is the service's own endpoint, in the services section. It says whether the service can do its job. A container can be running while its model failed to load.

Every service row is measured the same way — one request, a three-second cap, all in parallel — so the latencies are comparable with each other. A service that is not deployed is absent from the map rather than reported unhealthy.

Request path — the detection services

These run in the synchronous path. When one is down, the detection it performs does not happen; nothing retries it later.

ServiceWhat it doesWhat stops while it is downHealth endpointFinding
nestjs-coreThe gateway: chat, detection, admin API, ICAP listenerEverything. The dashboard loads and every call fails — and the snapshot itself cannot be collected, because the gateway serves itGET /healthnone: read the container's state and restart count instead
ml-detectorMachine-learning PII detection over named entitiesML PII detection. Regex patterns still fire, so masking degrades rather than stoppingGET /api/v1/healthservice-unhealthy-ml-detector
hap-guard-v2Toxicity classification across 13 labelsToxicity detection on input and outputGET /healthservice-unhealthy-hap-guard-v2
attack-guardJailbreak and injection classification, plus SQL and script injection scanningJailbreak and injection detectionGET /api/v1/jailbreak/healthservice-unhealthy-attack-guard
language-detectorLanguage identification ahead of detectionAutomatic language selection. Detection continues with the configured defaultGET /healthservice-unhealthy-language-detector

Danger

A detector that is down does not fail closed. Traffic that would have been masked or blocked during the outage was not, and there is no retrospective pass — so after any detector outage, review what went through the gateway in that window.

Content services

ServiceWhat it doesWhat stops while it is downHealth endpointFinding
ocr-serviceText extraction from imagesImage analysis returns no text, so PII in screenshots is not seenGET /api/v1/healthservice-unhealthy-ocr-service
document-parserText extraction from PDF and Office documentsDocument analysisGET /api/v1/healthservice-unhealthy-document-parser
redactorRedaction of images and documentsRedacted downloads. Detection still reports what it foundGET /api/v1/healthservice-unhealthy-redactor
doc-classifierImage document classificationThe stronger image classifier. The image path falls back to text-based classification and machine-readable-zone detectionGET /healthservice-unhealthy-doc-classifier
hallucination-guardGrounding checks on responses that carry contextHallucination scoring. This runs behind the response, so users see no changeGET /api/v1/healthservice-unhealthy-hallucination-guard
report-rendererRendering of compliance reports to PDF and HTMLReport export. The data is still on screenGET /healthservice-unhealthy-report-renderer

Cost and analysis services

ServiceWhat it doesWhat stops while it is downHealth endpointFinding
prompt-compressorReduces input tokens before the provider callToken reduction. Requests go to the provider uncompressed and cost moreGET /healthservice-unhealthy-prompt-compressor
cost-analyzerBuilds the model-routing policy from request historyRouting recommendations and projected savingsGET /healthservice-unhealthy-cost-analyzer
risk-analystThe local-model analyst that reviews repeated detectionsAnalyst reviews. It reports healthy only when both the local model and the database tool server answerGET /healthservice-unhealthy-risk-analyst
mcp-serverRead-only database access for the analystThe analyst, which depends on itGET /healthzservice-unhealthy-mcp-server
llm-inferenceServes the local model the analyst usesThe analystReported through the analyst's own healthservice-unhealthy-risk-analyst
deepteamRed-team test executionFilter testing runsGET /healthservice-unhealthy-deepteam
code-safetyThe external code auditor the gateway callsCode Safety verdicts. Everything else keeps workingGET /api/v1/code/healthservice-unhealthy-code-safety

Platform

These have no application health endpoint of their own. Read them in the containers and datastores sections instead.

ComponentWhat it doesWhat stops while it is downWhere to read itFinding
postgresEvery persisted record: tenants, credentials, filters, detections, sessions, eventsEffectively everything. Lists come back empty rather than erroringdatastores.postgresdatastore-unreachable, migrations-pending
redisRate-limit counters and the cluster lockRate limiting degrades open and scheduled work stops. Requests keep flowing, so it looks healthydatastores.redisdatastore-unreachable
caddyTerminates 80 and 443 in front of the dashboard and the gatewayEverything, from the outside. Nothing answers on 443appliance.tls.servedBytls-443-not-served
frontendThe dashboardThe dashboard. The API keeps serving its own clientscontainers entrycontainer-restarting
cid-proxyAuthentication and routing in front of the gatewayWhatever is routed through it, depending on the topologycontainers entrycontainer-restarting
reconfigure-agentThe host agent: host repair, detector re-tuning, and the host and container facts in the snapshotHost repair, and the host and containers sections of the snapshothost reads nullnone — the snapshot stays silent on what it cannot measure

Optional edge components

ComponentWhat it doesWhat stops while it is downWhere to read itFinding
cid-inline-proxyThe forward proxy that decrypts client traffic and calls the inspection listenerInline inspection of browser trafficcontainers entrycontainer-restarting
cid-userid-agentAttributes traffic to directory usersUser attribution on inspected traffic; detections still record the addressGET /healthzservice-unhealthy-userid-agent — the snapshot keys this service as userid-agent
ocr-service-gpuThe GPU build of the OCR serviceNothing extra — it replaces the CPU OCR service where a card is presentcontainers entrycontainer-oom

Support tooling

These never run on a customer appliance. They exist for development and laboratory work, and a finding about one on a production box means the wrong profile was started.

ComponentWhat it does
pgadminDatabase browser
redis-commanderRedis browser
mailpitCaptures outbound mail during testing
openldap-testA directory to test integration against
weights-fetchFetches local-model weights at build time

Reading a row during an incident

  1. Find the service in the services section of the snapshot. If it is absent, it is not deployed — that is not a fault.
  2. If reachable is false, the problem is below the application: read the container's state and restart count. Follow service-unhealthy.
  3. If reachable is true and healthy is false, read the error. A model that did not load is the usual answer, and on an air-gapped appliance the OCR service is the usual service — see ocr-models-missing-airgapped.
  4. If the container has been killed for memory, the machine is the fault and not the service: container-oom.

Last updated on

On this page

Download PDF