Monitoring
After a successful setup of a node, the next important step is to set up monitoring for the node. Monitoring is important to keep track of the node's health and performance.
Full Node Monitoring
Test JSON RPC Interface
After the full node starts, you can test the JSON-RPC interfaces.
View Activity on Your Local Full Node with IOTA Explorer
The IOTA Explorer supports connecting to any network as long as it has https
enabled. To view activity on your local full node:
- open the URL: https://explorer.rebased.iota.org/
- then select
Custom RPC URL
from the network dropdown in the top right.
Node Health Metrics
IOTA nodes expose a wide range of metrics to be scraped by Prometheus.
By default, metrics are available at the http://localhost:9184/metrics
endpoint.
The best way to visualize these metrics is to use Grafana.
Additionally, a common approach is to use node exporter to scrape performance metrics from the node and push them to Prometheus.
Some of the important checks are:
- Key health metrics via the
/metrics
HTTP endpoint:
curl -s localhost:9184/metrics | grep -E "^last_executed_checkpoint|^highest_synced_checkpoint|^highest_known_checkpoint|^last_committed_round|^consensus_threshold_clock_round|^highest_received_round|^consensus_proposed_blocks|^uptime"
highest_known_checkpoint 43448601
highest_synced_checkpoint 43448600
last_executed_checkpoint 43448601
last_executed_checkpoint_age_ms{pct="50"} 188
last_executed_checkpoint_age_ms{pct="95"} 221
last_executed_checkpoint_age_ms{pct="99"} 297
last_executed_checkpoint_age_ms_count 287523
last_executed_checkpoint_age_ms_sum 4291692609431
last_executed_checkpoint_timestamp_ms 1741700144842
uptime{chain_identifier="2304aa97",process="fullnode",version="0.10.3-rc-c2adf3fd68e9"} 20925
- Follow the latest checkpoint known by your node via the JSON-RPC endpoint:
curl --json '{"jsonrpc":"2.0","id":1,"method":"iota_getLatestCheckpointSequenceNumber","params":[]}' localhost:9000 -s | jq .result
You can check that this matches the latest checkpoint known by the rest of the network by using the value found on https://explorer.rebased.iota.org/
Monitoring Services
Implementing monitoring services is essential to ensure the reliability, security, and performance of the blockchain network by providing real-time insights, detecting anomalies, enabling proactive issue resolution, and receiving automatic alerts.
Prometheus and Grafana (recommended)
Example pre-made dashboards you can use:
- Community-owned grafana dashboard: https://github.com/stakeme-team/grafana-iota.
- Grafana setup for the local private network, which might be a good example of how to build your own setup.
- Officially supported dashboards can be found here in the IOTA repository.
Dolphin
Dolphin is a CLI tool that provides high-level features for validator, fullnode, and bridge monitoring. Under the hood, it uses the IOTA node Prometheus metric exporter to check the health of the node. More info: https://gitlab.com/blockscope-net/dolphin-v2.
Logs
Configuring Logs
Log level (error, warn, info, trace) is controlled using the RUST_LOG
environment variable.
The RUST_LOG_JSON=1
environment variable can optionally be set to enable logging in JSON structured format.
Depending on your deployment method, these are configured in the following places:
- Systemd
- Docker Compose
[Service]
...
Environment=RUST_BACKTRACE=1
Environment=RUST_LOG=info,iota_core=debug,consensus=debug,jsonrpsee=error
Add the following to the node container settings:
environment:
- RUST_BACKTRACE=1
- RUST_LOG=info,iota_core=debug,consensus=debug,jsonrpsee=error
It is possible to change the logging configuration while a node is running using the admin interface.
Verify Configured Logging Values
To view the currently configured logging values:
curl -w "\n" localhost:1337/logging
To change the currently configured logging values:
curl localhost:1337/logging -d "info"
Viewing Logs
- Systemd
- Docker Compose
To view and follow the IOTA node logs:
journalctl -u iota-node -f
To search for a particular match:
$ journalctl -u iota-node -g <SEARCH_TERM>
View and follow:
sudo docker compose logs -f [node_container_name]
By default, all logs are output. Limit this using --since
:
sudo docker logs --since 10m -f [node_container_name]