Runbook: MinIO / S3 Full or Unavailable
Symptoms
POST /v1/transcriptsreturning 500 or 503.GET /readyzon ingest showschecks.s3: "error".- MinIO console (
http://localhost:9001) unreachable. - Disk usage on the MinIO volume approaching capacity.
Observe
Metrics: Grafana — http://localhost:3001 (see on-call.md)
Grafana: http://localhost:3001 (see on-call.md)Check the Ingest Service dashboard:
- Transcripts Stored (total) — if counter stopped incrementing, S3 writes are failing.
- Error Rate (5xx) — elevated errors on
/v1/transcriptsroute.
MinIO Console (local): http://localhost:9001 (credentials: MINIO_ROOT_USER / MINIO_ROOT_PASSWORD)
Check disk usage (local):
docker system dfdu -sh ./data/minioDiagnose
- Bucket missing? — The
createbucketsinit container creates thetranscriptsbucket on first boot. If it failed, re-run:docker compose -f docker-compose.infra.yml run --rm createbuckets. - Credentials wrong? — Compare the effective
S3_*credentials withMINIO_ROOT_USER/MINIO_ROOT_PASSWORDin.env(development) or.env.production(production). - Volume full? — Expand the volume or free space. In prod (real S3), check bucket quota/billing limits.
- MinIO container crashed? —
docker compose -f docker-compose.infra.yml ps minio— restart if exited. - Network partition? — Ingest container can’t reach MinIO. Check Docker network:
docker network inspect.
Mitigate
- Transcript uploads fail independently of event ingestion — the service degrades gracefully.
- Restart MinIO:
docker compose -f docker-compose.infra.yml restart minio - If disk is full: remove confirmed orphan objects after identifying them, or expand the filesystem that backs
./data/minio. - Lifecycle rules: the bucket is configured for 365-day expiry. Verify with
mc ilm rule ls local/transcripts.
Escalate
Data loss risk if the MinIO volume is corrupted. Escalate to the team lead immediately. See on-call.md.