Monitoring
What to watch, and what the signals mean.
Health endpoints
| Path | Answers |
|---|---|
/healthz | Is the process alive |
/readyz | Can it reach the database |
Use /healthz to decide whether to restart, /readyz to decide whether to send
traffic.
Worth alerting on
/readyz failing — the database is unreachable. Everything is broken.
A connector stuck in error — visible per connector. Usually an expired credential, and it fails quietly from a user's point of view: search simply stops returning anything new from that source.
Disk. The database grows with your content. Running out is the most common self-inflicted outage.
Job backlog growing without draining — indexing is not keeping up. Raise
WORKER_CONCURRENCY, or find out what is failing repeatedly.
Logs
docker compose logs -f api workerStructured JSON on the API. The worker logs each job it runs, which is where to look when a sync misbehaves.
In the interface
Analytics shows content counts by source, indexing progress and recent activity. It is the fastest way to answer "did that sync actually work".
Normal load
Steady state is light: connectors sync on their schedule, and searches are cheap. Two moments spike:
- A first sync of a large source
- Re-indexing after a model change
Both are one-off, and both end.