Skip to content

Conversation

@gustavovalverde
Copy link

Summary

Adds an optional observability stack enabled via Docker Compose profiles, based on Zebra's mature monitoring implementation.

Supersedes #8 - This PR replaces the previous monitoring approach with Zebra's comprehensive observability stack.

Changes

  • Prometheus (v3.2.0) - Metrics collection with pre-configured scrape targets
  • Grafana (11.5.1) - 14 pre-built Zebra dashboards (sync, network, RPC, mempool, peers, etc.)
  • Jaeger (2.1.0) - Distributed tracing (ready for future Zebra releases with OpenTelemetry)
  • AlertManager (v0.28.1) - Alert routing with pre-configured rules

Also updates:

  • Zebra image from 3.1.0 to 4.0.0
  • README to reflect all services now use pre-built remote images
  • .env with monitoring configuration options

Usage

```bash

Enable Zebra metrics in .env

ZEBRA_METRICS__ENDPOINT_ADDR=0.0.0.0:9999

Start with monitoring

docker compose --profile monitoring up -d
```

Access Points

Service URL
Grafana http://localhost:3000 (admin/admin)
Prometheus http://localhost:9094
Jaeger http://localhost:16686
AlertManager http://localhost:9093

devdotbo and others added 3 commits December 12, 2025 17:46
…nts (#11)

Fixes #9

The zallet container was failing with "Permission denied (os error 13)"
due to overlapping Docker mounts. Config files were bind-mounted inside
the data volume at /var/lib/zallet/, causing Docker to create them with
root ownership while the container runs as UID 65532.

This commit resolves the issue by:
- Mounting config files to /etc/zallet/ instead of /var/lib/zallet/
- Adding --config flag to zallet command to specify config location
- Using absolute path for encryption_identity in zallet.toml

The fix works on both mainnet and testnet as it addresses Docker
configuration, not network-specific settings.

Changes:
- docker-compose.yml: Updated zallet command and volume mount paths
- config/zallet.toml: Changed encryption_identity to absolute path

Tested on testnet - zallet now starts successfully without permission errors.
* feat(docker): update to latest zaino and official zallet image

Update submodules and Docker configuration:
- Zaino: use GHCR image sha-417b679 (built from zingolabs/zaino:dev)
- Zallet: v0.1.0-alpha.3 (electriccoinco/zallet official image)
- Zebra: v3.1.0 (unchanged)

Add custom entrypoint for Zaino to resolve Docker DNS hostnames to IP
addresses, required because ValidatorConfig uses SocketAddr type which
only accepts IP:port format, not hostname:port.

NOTE: The entrypoint workaround can be removed once zaino PR #784 is
merged and a new image is built:
zingolabs/zaino#784

New files:
- config/zaino/docker-entrypoint.sh (temporary workaround)
- config/zaino/zindexer.toml

* refactor(docker): remove zaino DNS workaround and update submodules

Remove the docker-entrypoint.sh workaround for Zaino hostname resolution
now that upstream PR #784 adds native support for hostname:port format.

Changes:
- Remove config/zaino/docker-entrypoint.sh (no longer needed)
- Simplify config/zaino/zindexer.toml to minimal config-rs requirement
- Update docker-compose.yml to use native hostname resolution
- Remove env_file from zaino service (conflicts with config-rs)
- Update submodules to latest versions:
  - zaino: 49e5241d (config-rs migration + hostname support)
  - zebra: e04845f3e
  - zcashd: cfcfcd93b (v6.11.0)

* chore(docker): update zaino image to sha-1871eba
…AlertManager

Add optional observability stack enabled via Docker Compose profiles:
- Prometheus (v3.2.0) for metrics collection
- Grafana (11.5.1) with 14 pre-built Zebra dashboards
- Jaeger (2.1.0) for distributed tracing (future Zebra releases)
- AlertManager (v0.28.1) for alert routing

Usage: docker compose --profile monitoring up -d

Also updates:
- Zebra image from 3.1.0 to 4.0.0
- README to reflect all services now use pre-built remote images
- .env with monitoring configuration options
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants