🖥️ Validator Dashboard
Web dashboard running on port 3030 with dark/light theme support. Visualize your validator uptime in real-time.
📡 RPC Endpoints
Used to display Current Height. Auto-failover when primary goes down. Alerts when all RPCs are offline for 3+ minutes.
🔔 Telegram & Discord Alerting (Optional)
Get instant notifications for every missed block. Enable
RPC_ALERTS=on to also monitor RPC endpoints (offline/online, failover, all RPCs down alerts).
📟 PagerDuty Integration(Optional)
Automatically triggers a call when 5 or more consecutive blocks are missed. Threshold is configurable via
.env file.
⚡ No Node Required
This alerting/monitoring system does not require a Monad Node. Just fill in your
.env file properly.
Supports both Mainnet and Testnet.
Requirements: Node.js 20+ and npm
# Install PM2 globally (if not already installed)
npm install -g pm2
# Clone the repository
git clone https://github.com/Huginn-Tech/monadoring.git
cd monadoring
# Install dependencies
npm install
# Copy and configure environment
cp .env.example .env
nano .env # Edit your configuration
# Build the project
npm run build
# Start with PM2
pm2 start npm --name "monadoring" -- start
# Save PM2 process list (auto-restart on reboot)
pm2 save
# (Optional) Enable PM2 startup on boot
pm2 startup
# Dashboard available at http://localhost:3030Useful PM2 Commands:
pm2 status # Check status
pm2 logs monadoring # View logs
pm2 restart monadoring # Restart app
pm2 stop monadoring # Stop app
pm2 delete monadoring # Remove from PM2# Clone the repository
git clone https://github.com/Huginn-Tech/monadoring.git
cd monadoring
# Copy and configure environment
cp .env.example .env
nano .env # Edit your configuration
# Start with Docker
docker compose up -d
# Dashboard available at http://localhost:3030Create a .env file in the root directory (copy from .env.example):
# ============================================
# VALIDATORS
# ============================================
# Comma-separated validator IDs to monitor
# Can be numeric IDs or secp addresses
MAINNET_VALIDATORS=1,2
TESTNET_VALIDATORS=1,2
# ============================================
# RPC ENDPOINTS
# ============================================
# Comma-separated RPC endpoints (first one is primary)
MAINNET_RPCS=https://monad-rpc.huginn.tech,https://rpc.monad.xyz,https://rpc1.monad.xyz,https://rpc3.monad.xyz
TESTNET_RPCS=https://monad-testnet-rpc.huginn.tech,https://rpc-testnet.monadinfra.com,https://testnet-rpc.monad.xyz
# Enable RPC health check alerts (on/off)
# Checks all RPCs every 1 minute and alerts on:
# - RPC going offline/online
# - Primary to secondary failover
RPC_ALERTS=off
# ============================================
# SERVER (Dashboard Port)
# ============================================
PORT=3030
HOST=0.0.0.0
# ============================================
# TELEGRAM ALERTS (Optional)
# ============================================
# Get bot token from @BotFather on Telegram
# Chat ID can be obtained from @userinfobot
TELEGRAM_BOT_TOKEN=
TELEGRAM_CHAT_ID=
# ============================================
# DISCORD ALERTS (Optional)
# ============================================
# Create a webhook in Discord: Server Settings > Integrations > Webhooks
DISCORD_WEBHOOK_URL=
# ============================================
# PAGERDUTY ALERTS (Optional)
# ============================================
# Get routing key from PagerDuty service integration
PAGERDUTY_ROUTING_KEY=
PAGERDUTY_THRESHOLD=5| Variable | Required | Description |
|---|---|---|
MAINNET_VALIDATORS |
✅ | Validator ID(s) for Mainnet |
TESTNET_VALIDATORS |
❌ | Validator ID(s) for Testnet |
MAINNET_RPCS |
✅ | RPC endpoints for Mainnet |
TESTNET_RPCS |
❌ | RPC endpoints for Testnet |
RPC_ALERTS |
❌ | RPC monitoring: offline/failover/all-down alerts (on/off, default: off) |
PORT |
❌ | Dashboard port (default: 3030) |
TELEGRAM_BOT_TOKEN |
❌ | Telegram bot token |
TELEGRAM_CHAT_ID |
❌ | Telegram chat/group ID |
DISCORD_WEBHOOK_URL |
❌ | Discord webhook URL |
PAGERDUTY_ROUTING_KEY |
❌ | PagerDuty routing key |
PAGERDUTY_THRESHOLD |
❌ | Consecutive misses before PagerDuty alert (default: 5) |
This project is licensed under the MIT License - see the LICENSE file for details.
- Built for the Monad ecosystem
- Powered by Huginn Tech

