Run a Node
Monitoring & Logs
Keeping a validator healthy · Estimated read time: 5 minutes
TL;DR
Every Asentum node exposes a health JSON endpoint, Prometheus metrics, and standard journalctl logs. Downtime is the #1 avoidable slashing risk (see Slashing Risks) — watch the right handful of signals and you'll catch problems before the chain does.
Tailing logs
Nodes run under systemd. To tail the log live:
From the desktop app, use Settings → View logs. From the VPS installer, use asentum-validator logs.
Logs are structured JSON by default. For human-readable output pipe through | jq.
Health endpoint
Every node serves GET /health returning a JSON status:
{
"status": "ok",
"role": "validator",
"blockHeight": 24189,
"peers": 12,
"synced": true,
"validatorStatus": "active"
}Response is HTTP 200 if healthy, HTTP 503 if degraded (out of sync, no peers, or tombstoned).
Prometheus metrics
GET /metrics returns Prometheus-format metrics:
asentum_block_heightasentum_peers_countasentum_missed_blocks_totalasentum_block_time_seconds(histogram)asentum_validator_is_active(0 or 1)asentum_validator_stake_wei
Point Prometheus at /metrics and pipe to Grafana — a reference dashboard is in the repo.
What to watch
- Sync lag. If
asentum_block_heightfalls behind the chain head by more than a few blocks, you're missing your proposer slots. Likely causes: network, disk I/O, CPU starvation. - Peers. Below ~5 peers you start missing vote gossip and risk falling out of sync. Check your
ASENTUM_PEERSenv var and confirm each peer's HTTP port is reachable. - Missed blocks. A non-zero rate is an early warning — it means your node failed to pre-vote or pre-commit on its turn. Sustained missing triggers downtime slashing.
- Validator status.
is_activedropping to 0 without an unbond is an emergency — either tombstoned or dropped from the committee.
Alerting
Recommended Prometheus alert rules:
- alert: AsentumBehind
expr: asentum_block_height{} < max(asentum_block_height) - 5
for: 2m
- alert: AsentumPeerLow
expr: asentum_peers_count < 4
for: 5m
- alert: AsentumMissedBlocks
expr: rate(asentum_missed_blocks_total[5m]) > 0
for: 10mWire these into Pagerduty, Discord, or whatever your team uses. You want to know within minutes, not days.
Read next