> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monad.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# General Operations

## Version Information

View the version and build information for your Monad binaries:

```bash theme={null}
monad-node --version
# Example output: monad-node {"commit":"c0cdcaae8eb527e44d72c4638c1f1335025a5132","tag":"v0.12.2-rc","branch":"","modified":true}
```

## CLI Help

View available command-line arguments for any Monad binary:

```bash theme={null}
monad-rpc --help
monad --help
monad-bft --help
```

<Warning>
  CLI arguments should not be changed arbitrarily as some configurations may result in unexpected behavior or crashes.
</Warning>

## Service Management

Check the status of Monad services:

```bash theme={null}
# Check all services at once
systemctl status monad-bft monad-execution monad-rpc --no-pager -l

# Check individual service status
systemctl status monad-bft
systemctl status monad-execution
systemctl status monad-rpc

# View logs for a specific service
journalctl -u monad-bft -f
journalctl -u monad-execution -f
journalctl -u monad-rpc -f
```

## Monitoring Block Height

The RPC service will start listening on port `8080` when the statesync is completed.

Check the current block height via RPC:

```bash theme={null}
curl http://localhost:8080/ \
  -X POST \
  -H "Content-Type: application/json" \
  --data '{"method":"eth_blockNumber","params":[],"id":1,"jsonrpc":"2.0"}'
```

## Viewing MonadDB Disk Usage

Note that MonadDB (TrieDB) will automatically compact when at 80% capacity to preserve
optimal SSD performance. To check MonadDB disk usage and retained block history:

```bash theme={null}
monad-mpt --storage /dev/triedb
```

Example output:

```
MPT database on storages:
          Capacity           Used      %  Path
           3.49 Tb       24.30 Gb  0.68%  "/dev/nvme1n1p1"
MPT database internal lists:
     Fast: 94 chunks with capacity 23.50 Gb used 23.40 Gb
     Slow: 3 chunks with capacity 768.00 Mb used 658.72 Mb
     Free: 14207 chunks with capacity 3.47 Tb used 0.00 bytes
MPT database has 599928 history, earliest is 36784905 latest is 37384832.
     It has been configured to retain no more than 33554432.
     Latest proposed is (37384832, 88a5550ba067c2f21cef6b6e8953fbf700fe300905952e5621335fe2bd58729c).
     Latest voted is (37384831, 56074c2429909c2966bfe8df55810ec3b8f4f4f599b407ff89ec92b090656ab1).
     Latest finalized is 37384830, latest verified is 37384827, auto expire version is 36784905
```

## Log Analysis with `monlog`

`monlog` is a lightweight tool maintained by [Category Labs](https://www.category.xyz)
that scrapes BFT logs and provides useful status information and suggestions. It
examines logs from the last 60 seconds.

**Setup (as root user):**

First, grant the monad user access to read systemd journal logs:

```bash theme={null}
# Add monad user to systemd-journal group
usermod -a -G systemd-journal monad
```

**Download monlog (as monad user):**

```bash theme={null}
cd /home/monad
curl -sSL https://pub-b0d0d7272c994851b4c8af22a766f571.r2.dev/scripts/monlog -O
chmod u+x ./monlog

# confirm sha
sha256sum ./monlog
f8a1066d8c093bbdb5f722f5b3d89904c17a76fa01fa1dd62e950f445e88327f  ./monlog
```

<Info>
  If you're already logged in as the monad user when the group is added, you'll need to log out and log back in for the group membership to take effect. Alternatively, you can run `su - monad` to start a new session.
</Info>

**Run monlog (as monad user):**

```bash theme={null}
./monlog

# For live updates
watch -d "./monlog"

# Show last 10 lines of grabbed logs
./monlog -r

# Show secp keys mapped to validator names
./monlog -n 
e.g. 
    0123123ae (validator name)

# Show with no color coding
./monlog --no-color
```

Example output for a healthy node:

```
# FYI this is without color coding 

Installed version:
ii monad 0.12.1~rc amd64 Monad BFT stack (symbols stripped)

No StateSync messages.
---
No BlockSync messages.
---
Most recent round: 52268965
Most recent epoch: 1001
Most recent block: 50041845
Blocks processing and being committed ✅
```

## Consensus Information with `ledger-tail`

`monad-ledger-tail` exposes consensus information by directly parsing ledger artifacts
and streams the data in JSON format.

Start the service:

```bash theme={null}
systemctl start monad-ledger-tail

# View output
journalctl -fu monad-ledger-tail
```

Example output:

```json theme={null}
// the real output is all on one line, but we've prettified this for legibility:
{
  "timestamp": "2025-11-23T03:09:09.534974Z",
  "level": "INFO",
  "fields": {
    "message": "proposed_block",
    "round": "53449032",
    "parent_round": "53449031",
    "epoch": "1024",
    "seq_num": "51203516",
    "num_tx": "3",
    "author": "036daee7750e29e46eb64d86ad1cc7b235d7f1ad9597941a3a77cdd641cead4528",
    "block_ts_ms": "1763867349470",
    "now_ts_ms": "1763867349534",
    "author_address": ""
  },
  "target": "ledger_tail"
}
```

## Node Status with `monad-status`

Install `monad-status`:

```
curl -sSL https://bucket.monadinfra.com/scripts/monad-status.sh -o /usr/local/bin/monad-status
chmod +x /usr/local/bin/monad-status
```

Run `monad-status` to get the status of the node.

This should print similar output:

```yaml theme={null}
### Monad Node Status

hostname: monad-node
date: Wed Nov 26 10:48:26 PM CET 2025
uptime: 0d 00h 41m 49s
version: 0.12.2
config:
  network: mainnet
  chain: monad_mainnet
  chainId: 143
  secpPublicKey: 03831b36b50261011d82f94d58f8aa0edfe058359e2c365c37cce678436b9eb371
  blsPublicKey: b9c1905e11e8395a789bece454ec24bed98b96cf9dc04c02c9512fb94900d3e0355383e542c44a0eb1be4d2780a1fb2f
  nodeSignature: 4f6e3e47af0e8ff3614e1eb53f9015ef4fc8593e60c13d52c2b458d05385b5f94cff8776ceb8b9401c3647148637d599622353d0631864a23b07f6d7fb55e84f00
  selfAddress: 65.109.145.172:8000
  recordSeqNum: 0
services:
  monad-bft: running
  monad-execution: running
  monad-rpc: running
  otelcol: running
  monad-cruft:
    activated: true
    previous: 48min ago
    next: 11min
peers:
  peersNumber: 1146
consensus:
  status: in-sync
  mode: live
  epoch: 764
  round: 38259075
  blockNumber: 38200041
  blockNumberFromExternal: 38200040
  blockDifference: 0
statesync:
  percentage: 100.0000%
  progress: 38193694
  target: 38193694
rpc:
  status: active
  clientVersion: Monad/0.12.2
  netVersion: 143
  blockNumber: 38200041
```

## Exporting Key Backups

If you followed the [full node installation](/node-ops/full-node-installation#generate-keystores) guide,
backup files for your keys were automatically created at:

* `/opt/monad/backup/secp-backup`
* `/opt/monad/backup/bls-backup`

If those files are missing or you need to re-export your keys, use the commands below to
recreate them. Any existing backup files will be preserved with a timestamp suffix before
being overwritten.

```bash theme={null}
source /home/monad/.env

[ -f /opt/monad/backup/secp-backup ] && mv /opt/monad/backup/secp-backup "/opt/monad/backup/secp-backup.$(date +%Y%m%d%H%M%S).bak"
[ -f /opt/monad/backup/bls-backup ] && mv /opt/monad/backup/bls-backup "/opt/monad/backup/bls-backup.$(date +%Y%m%d%H%M%S).bak"

monad-keystore recover \
  --password "$KEYSTORE_PASSWORD" \
  --keystore-path /home/monad/monad-bft/config/id-secp \
  --key-type secp > /opt/monad/backup/secp-backup

monad-keystore recover \
  --password "$KEYSTORE_PASSWORD" \
  --keystore-path /home/monad/monad-bft/config/id-bls \
  --key-type bls > /opt/monad/backup/bls-backup
```

<Warning title="External Backup">
  These files contain your node's private keys — they define your node identity. Anyone with access to them can take over your node's identity.

  **Ensure that these backup files are stored in an external location outside of the node (e.g. a password manager or secrets vault). They are required to restore your full node or validator identity in the event of hardware failure or system loss:**

  * `/opt/monad/backup/secp-backup`
  * `/opt/monad/backup/bls-backup`

  For validators, this is especially important: losing your keys means you cannot migrate your validator, and re-registering with a new identity requires moving all delegations manually.
</Warning>

## Importing Keys from Backups

To restore your node identity from a backup, extract the IKM secret from each backup file and
import it using `monad-keystore import`:

```bash theme={null}
source /home/monad/.env

[ -f /home/monad/monad-bft/config/id-secp ] && mv /home/monad/monad-bft/config/id-secp "/home/monad/monad-bft/config/id-secp.$(date +%Y%m%d%H%M%S).bak"
[ -f /home/monad/monad-bft/config/id-bls ] && mv /home/monad/monad-bft/config/id-bls "/home/monad/monad-bft/config/id-bls.$(date +%Y%m%d%H%M%S).bak"

SECP_IKM=$(grep -E "Keystore secret:|Keep your IKM secure:" /opt/monad/backup/secp-backup | awk '{print $NF}')
BLS_IKM=$(grep -E "Keystore secret:|Keep your IKM secure:" /opt/monad/backup/bls-backup | awk '{print $NF}')

monad-keystore import \
  --ikm "$SECP_IKM" \
  --password "$KEYSTORE_PASSWORD" \
  --keystore-path /home/monad/monad-bft/config/id-secp \
  --key-type secp

monad-keystore import \
  --ikm "$BLS_IKM" \
  --password "$KEYSTORE_PASSWORD" \
  --keystore-path /home/monad/monad-bft/config/id-bls \
  --key-type bls
```

## Keeping Updated

To stay updated on new releases:

* join the [Monad Node Announcements](https://t.me/MonadNodeAnnouncements) telegram group, or
* join the [Monad Developer Discord](https://discord.gg/monaddev) and follow the `#mainnet-fullnode-announcements` channel
