Monitoring

Probes

Endpoint Token Answers
GET /healthz none {"status":"ok"} while the process runs.
GET /ready none {"status":"ready"} once monerod’s RPC answers, 503 before that and while the service shuts down.

Both live on the API listener (8080 in the image). /ready says monerod answers RPC, not that the chain is synced. Read synchronized and syncPercent in GET /v1/node/info for that.

The image’s HEALTHCHECK runs /app/docker-monero healthcheck, which calls /ready on DOCKER_MONERO_HTTP_LISTEN_ADDRESS and exits non-zero unless it answers 200. The compose file runs the same command every 10 seconds. On a slow disk the first open of a large chain can outlast the start period, and the container then reads unhealthy for a while. Docker does not restart it for that.

Metrics

Prometheus scrapes http://<host>:9091/metrics, set by DOCKER_MONERO_METRICS_LISTEN_ADDRESS. The listener has no authentication, so the compose file publishes it on 127.0.0.1 only. The metrics are defined in internal/pkg/metrics.

Metric Type Labels Meaning
monero_api_http_requests_total counter method, route, status HTTP requests. route is the OpenAPI path template, never a raw path.
monero_api_http_request_duration_seconds histogram method, route HTTP request duration.
monero_api_http_requests_in_flight gauge   Requests being served right now.
monero_api_mcp_tool_calls_total counter tool, outcome MCP tool calls. outcome is success or error.
monero_api_mcp_tool_call_duration_seconds histogram tool MCP tool call duration.
monero_open_wallets gauge   Wallets open right now.
monero_max_open_wallets gauge   The configured DOCKER_MONERO_MAX_OPEN_WALLETS.
monero_node_height gauge   The node’s chain height at scrape time, 0 when monerod does not answer.
monero_node_synchronized gauge   1 when monerod reports itself synchronized.
monero_node_restarts gauge   Times monerod crashed and the supervisor restarted it.

The Go runtime and process collectors (go_*, process_*) are registered too. No wallet name, address, amount or transaction hash is ever a label.

Logs

The service logs to stdout as JSON by default (LOG_FORMAT, LOG_LEVEL on the configuration page). monerod’s and the wallet processes’ output goes into the same log. monerod’s lines carry child and stream, both set to monerod. A wallet process’s lines carry stream set to monero-wallet-rpc and the wallet’s name in wallet. Wallet passwords, seeds, keys, the token and request bodies are never logged, and request logging leaves out the query string.

docker logs -f monero