000bringing the node online
NODEWATCH

Your node droppedout of rotation.Now you know why.

Nodewatch runs next to your Arkiv node and shows what only the inside of the host can see. One container. One command to install. One wallet can open it: yours.

1
container, next to the node
42
query shapes benchmarked
~2 min
until a dead node is visible on Arkiv
0
extra cloud services
nodewatch · overview
healthylearing-test-rishabh · rabdi

Serving the pool. Head lag 0, 10 peers, agreement 71 h left.

head lag
0 blk
peers
10 / 7
disk
958 GiB free

Most of the time it just says this.

One word, from a rule engine over the host, Docker, the execution and consensus clients, the tunnel and the marketplace entities.

Then one day the pool stops paying you.

nodes.arkiv.network shows out of rotation. Nodewatch names the cause, in 15 seconds, and gives you the exact command. Telegram pings you.

And the one that would have got you next week.

A forecast from allocated bytes, because reth's database file is sparse and every other disk tool is wrong about it.

nodes.arkiv.network sees your node from the outside. This is the inside.

Three things no external monitor can do, because they need the host, the keys, or the chain itself.

A heartbeat on the chain

Every 30 seconds Nodewatch renews an Arkiv entity that expires two minutes later. If the host dies, the entity vanishes. Anyone can check it with one query, and no monitoring server exists.

arkiv.schema = str('nodewatch.heartbeat')
  AND status = str('degraded')

A disk forecast that is right

Measures allocated bytes, not file size, because reth's database is sparse. Turns the growth rate into a date, and alerts a week before it.

Opened by the node's owner only

At install, the node's provider key signs one statement naming your wallet. From then on only that wallet can sign in. The provider key never touches a browser.

Node 0xbD78…1880
admin wallet 0xb45b…844e
authorised by the provider key

Verdict with the fix

healthy, lagging, tunnel_down, no_agreement, low_gas… each with the command that resolves it.

Pool and earnings

Offer, agreement and time left, calls served vs counted vs paid, from the marketplace entities.

Host and containers

CPU, memory, I/O, network for the host and each node container; OOM kills; restart loops.

Chain view

Head lag against the network, execution and consensus peers, finality, sync.

Alerts

Telegram and PagerDuty with grouping, inhibition and silences. Nothing to self-host.

Encrypted vault

Diagnostic bundles encrypted to an Arkiv engineer's Ethereum key, stored on Swarm.

Which queries will hurt at ten times the data?

The slow-query finder loads test entities into your own node, grows the dataset step by step, and times 42 query shapes at every size. Each shape gets a growth factor: 0 means the index does its job, 1 means time follows the data.

  • Own node · your real node on Rabdi state, up to 5,000 entities
  • Private node · a throwaway Arkiv dev node on the same host, free, up to 50,000
  • Live market · read-only timings over the real pool entities

Findings stay private: query text is encrypted at rest, a demo-safe switch shows shapes as #N only, and reports reach Arkiv's team through the encrypted vault.

p95 latency by shape and dataset sizems
5001k2.5k5kkequality
3.6
4.0
3.9
3.6
0.00prefix
3.7
3.8
4.1
3.4
-0.01range
4.9
5.3
7.3
9.6
0.42or fan-out
4.4
5.7
12
23
0.62and ×3
4.8
7.0
16
33
0.84and ×5
4.7
6.6
15
33
0.86

Flat rows stay flat as data grows. AND chains follow the data: at 5,000 entities they are still 33 ms, well under the 250 ms line, but they are the ones to watch at 50,000.

One command on the node host.

Needs a host that already runs the Arkiv community node kit, Docker, and the wallet address you will sign in with. Four minutes on a fresh host.

as root, on the node host
$ curl -fsSL https://raw.githubusercontent.com/rishabh-onerx/nodewatch/main/scripts/install.sh \
    | sudo bash -s -- 0xYourAdminWallet

Reads the provider address

from the node kit's keystore. No password needed for that.

Step 1

Signs the authorisation

asks the keystore password once, signs inside the kit's own image, keystore read-only. Nothing is stored.

Step 2

Creates a heartbeat key

a separate hot key for the on-chain heartbeat. Fund it later from the faucet.

Step 3

Builds and starts

writes .env with mode 600, starts the one container, prints your URL.

Step 4