An all-in-one monitoring solution for AxeOS (ESP-Miner) Bitaxe miners, bundling Grafana 12.4, Prometheus, and JSON Exporter into a single StartOS service. Includes a preconfigured dashboard; no manual setup required beyond providing your miner's IP address.
- Image and Container Runtime
- Volume and Data Layout
- Installation and First-Run Flow
- Configuration Management
- Network Access and Interfaces
- Actions
- Backups and Restore
- Health Checks
- Dependencies
- Limitations and Differences
- What Is Unchanged from Upstream
- Contributing
- Quick Reference for AI Consumers
Three unmodified upstream Docker images run as separate subcontainers:
| Subcontainer | Image | Architectures |
|---|---|---|
grafana |
grafana/grafana:12.4.3 |
x86_64, aarch64 |
prometheus |
prom/prometheus:v3.11.2 |
x86_64, aarch64 |
json-exporter |
prometheuscommunity/json-exporter:v0.7.0 |
x86_64, aarch64 |
All images use their upstream default entrypoints (/run.sh for Grafana, /bin/prometheus and /bin/json_exporter respectively).
| Volume | Subpath | Mounted at (in subcontainer) | Contents |
|---|---|---|---|
grafana |
/var/lib/grafana |
/var/lib/grafana |
Grafana database, sessions, plugins |
grafana |
/etc/grafana/provisioning |
/etc/grafana/provisioning |
Auto-populated provisioning config |
grafana |
/etc/grafana/dashboards |
/etc/grafana/dashboards |
Active dashboard JSON (version-selected) |
prometheus |
prometheus/ |
/prometheus |
Prometheus TSDB data |
prometheus |
etc/prometheus/ |
/etc/prometheus |
prometheus.yml, scrape configs, store.json |
store.json (inside the prometheus volume at etc/prometheus/store.json) persists the selected AxeOS/ESP-Miner version between restarts.
Grafana provisioning files and the active dashboard JSON are copied from package assets into the volumes on every startup.
On first install, the service creates a critical task prompting you to:
- Enter your Bitaxe/AxeOS IP address(es) — one per line
- Select your AxeOS/ESP-Miner version —
>= 2.11.xor<= 2.10.x
These can be changed later via the Configure AxeOS Monitor action.
Grafana starts with anonymous access enabled and the AxeOS dashboard set as the home dashboard. No login is required.
| StartOS-Managed | Grafana UI / Upstream |
|---|---|
| Prometheus scrape targets (Bitaxe IP addresses) | Additional Grafana dashboards and panels |
| AxeOS/ESP-Miner version selection | Grafana user accounts and preferences |
| Prometheus scrape interval | Alerting rules (not provisioned) |
| Grafana analytics and update checks (disabled) | Prometheus retention and storage settings |
Home dashboard (axeos.json) |
Grafana's GF_ANALYTICS_* env vars are set to disable telemetry and update checks.
| Interface | Port | Protocol | Purpose |
|---|---|---|---|
ui |
3000 | HTTP | Grafana dashboard UI |
prometheus |
9090 | HTTP | Prometheus raw metrics browser |
Both interfaces are accessible over LAN (.local) and Tor (.onion).
- Purpose: Set Bitaxe/AxeOS IP address(es) to scrape, select ESP-Miner version, and set scrape interval
- Visibility: Enabled
- Availability: Any status
- Inputs: IP addresses (one per line), AxeOS version (
>= 2.11.x/<= 2.10.x), scrape interval in seconds - Outputs: Writes scrape config to Prometheus and restarts Prometheus if the version changed
- Purpose: Sends a live reload request to Prometheus (
/-/reload) without restarting the service - Visibility: Hidden (used internally by Configure action)
Both volumes are backed up:
grafana— Grafana database, sessions, user dataprometheus— TSDB metrics data, scrape config, store
On restore, all data is fully restored. Prometheus metrics history is included.
| Daemon | Method | Endpoint / Port | Grace Period | Success Message |
|---|---|---|---|---|
json-exporter |
TCP port check | 7979 | — | JSON Exporter is ready |
prometheus |
TCP port check | 9090 | — | Prometheus is ready |
grafana |
HTTP URL check | 3000 | 60 s | Grafana is ready |
Grafana has a 60-second grace period to allow time for the unified storage migration on startup.
None.
- Grafana runs without authentication — the UI is open to anyone with network access to your StartOS server. This is intentional for ease of use on a private home network.
- The provisioned datasource (
startosprometheus) and home dashboard are read-only from within Grafana's UI — changes to the provisioning config must be made via the Configure action. - Prometheus retention and storage settings are not configurable through the StartOS UI; defaults apply.
- Alerting is not configured out of the box;
manageAlerts: trueis set in the datasource config but no alert rules are provisioned. - Only two AxeOS/ESP-Miner API versions are supported:
>= 2.11.xand<= 2.10.x. Other versions may work but are not tested.
- Grafana's full dashboard and visualization feature set works as upstream
- Prometheus query language (PromQL) and remote read/write behave as upstream
- JSON Exporter config syntax and behavior are unchanged
- All three services run their upstream default entrypoints without modification
See CONTRIBUTING.md for build environment setup and CI pipeline details.
package_id: axeos-monitor-aio
upstream_version: "grafana:12.4.3 / prometheus:3.11.2 / json-exporter:0.7.0"
images:
- grafana/grafana:12.4.3
- prom/prometheus:v3.11.2
- prometheuscommunity/json-exporter:v0.7.0
architectures: [x86_64, aarch64]
volumes:
grafana: /var/lib/grafana, /etc/grafana/provisioning, /etc/grafana/dashboards
prometheus: /prometheus, /etc/prometheus
ports:
ui: 3000
prometheus: 9090
dependencies: none
startos_managed_env_vars:
- GF_ANALYTICS_REPORTING_ENABLED
- GF_ANALYTICS_CHECK_FOR_UPDATES
- GF_ANALYTICS_CHECK_FOR_PLUGIN_UPDATES
- GF_ANALYTICS_FEEDBACK_LINKS_ENABLED
- GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH
- GF_LOG_LEVEL
actions:
- config
- reload-prometheus-config