Files
smom-dbis-138/docs/monitoring/MONITORING_SETUP.md

315 lines
7.8 KiB
Markdown
Raw Permalink Normal View History

# Monitoring and Alerting Setup
**Date**: 2025-12-11
**Status**: Configuration Guide
---
## 📋 Overview
This document provides guidance for setting up monitoring and alerting for the deployed MainnetTether and TransactionMirror contracts.
---
## 🔍 Monitoring Targets
### MainnetTether Contract
- **Address**: `0x15DF1D5BFDD8Aa4b380445D4e3E9B38d34283619`
- **Explorer**: https://etherscan.io/address/0x15DF1D5BFDD8Aa4b380445D4e3E9B38d34283619
### TransactionMirror Contract
- **Address**: `0x4CF42c4F1dBa748601b8938be3E7ABD732E87cE9`
- **Explorer**: https://etherscan.io/address/0x4CF42c4F1dBa748601b8938be3E7ABD732E87cE9
---
## 📊 Key Metrics to Monitor
### Contract Health
- **Paused Status**: Monitor if contracts are paused
- **Admin Changes**: Alert on admin address changes
- **Contract Balance**: Monitor ETH balance (if applicable)
### MainnetTether Specific
- **State Proof Anchoring**: Monitor `StateProofAnchored` events
- **Anchored Block Count**: Track number of anchored blocks
- **Anchoring Frequency**: Monitor time between anchors
### TransactionMirror Specific
- **Transaction Mirroring**: Monitor `TransactionMirrored` events
- **Batch Mirroring**: Monitor `BatchTransactionsMirrored` events
- **Mirrored Transaction Count**: Track total mirrored transactions
- **Mirroring Frequency**: Monitor time between mirrors
### Operational
- **Off-Chain Service Status**: Monitor state anchor and transaction mirror services
- **RPC Connection Health**: Monitor Chain-138 and Ethereum Mainnet RPC connections
- **Gas Prices**: Monitor gas prices for cost optimization
---
## 🛠️ Monitoring Tools
### 1. Etherscan Alerts
**Setup**:
1. Go to https://etherscan.io/
2. Create account and verify email
3. Navigate to contract addresses
4. Set up alerts for:
- Contract events
- Admin changes
- Large transactions
**Recommended Alerts**:
- `StateProofAnchored` events
- `TransactionMirrored` events
- `AdminChanged` events
- `Paused` / `Unpaused` events
### 2. OpenZeppelin Defender
**Setup**:
1. Go to https://defender.openzeppelin.com/
2. Create account
3. Add contracts:
- MainnetTether
- TransactionMirror
4. Configure monitoring:
- Event monitoring
- Function call monitoring
- Admin action alerts
**Recommended Monitors**:
- Pause/unpause actions
- Admin changes
- State proof anchoring frequency
- Transaction mirroring frequency
### 3. Custom Monitoring Script
A custom monitoring script can be created using ethers.js:
```javascript
const { ethers } = require('ethers');
const MAINNET_TETHER = '0x15DF1D5BFDD8Aa4b380445D4e3E9B38d34283619';
const TRANSACTION_MIRROR = '0x4CF42c4F1dBa748601b8938be3E7ABD732E87cE9';
const RPC_URL = process.env.ETHEREUM_MAINNET_RPC;
const provider = new ethers.JsonRpcProvider(RPC_URL);
// Monitor events
const tetherContract = new ethers.Contract(MAINNET_TETHER, [...], provider);
const mirrorContract = new ethers.Contract(TRANSACTION_MIRROR, [...], provider);
// Listen for events
tetherContract.on('StateProofAnchored', (blockNumber, blockHash, stateRoot, timestamp, validatorCount) => {
console.log(`State proof anchored: Block ${blockNumber} at ${new Date(timestamp * 1000)}`);
});
mirrorContract.on('TransactionMirrored', (txHash, from, to, value, blockNumber, timestamp) => {
console.log(`Transaction mirrored: ${txHash} from ${from} to ${to}`);
});
```
### 4. Prometheus + Grafana
**Setup**:
1. Deploy Prometheus instance
2. Configure exporters for:
- Ethereum node metrics
- Contract event metrics
- Off-chain service metrics
3. Set up Grafana dashboards
**Metrics to Export**:
- Contract event counts
- Gas usage
- Transaction success rates
- Off-chain service uptime
---
## 🚨 Alerting Rules
### Critical Alerts
1. **Contract Paused**
- Severity: High
- Action: Investigate immediately
- Condition: `paused() == true`
2. **Admin Changed**
- Severity: Critical
- Action: Verify admin change is authorized
- Condition: `AdminChanged` event emitted
3. **Off-Chain Service Down**
- Severity: High
- Action: Restart service
- Condition: Service health check fails
4. **No State Proofs Anchored (24h)**
- Severity: Medium
- Action: Check Chain-138 connection
- Condition: No `StateProofAnchored` events in 24 hours
5. **No Transactions Mirrored (24h)**
- Severity: Medium
- Action: Check Chain-138 connection
- Condition: No `TransactionMirrored` events in 24 hours
### Warning Alerts
1. **High Gas Prices**
- Severity: Low
- Action: Consider delaying non-critical operations
- Condition: Gas price > threshold
2. **Low Contract Balance**
- Severity: Medium
- Action: Fund contract if needed
- Condition: Balance < threshold
3. **Slow Anchoring**
- Severity: Low
- Action: Check Chain-138 block production
- Condition: Time since last anchor > expected interval
---
## 📝 Logging
### Recommended Log Levels
- **ERROR**: Contract errors, RPC failures, service crashes
- **WARN**: High gas prices, slow operations, service degradation
- **INFO**: Successful operations, state changes, service start/stop
- **DEBUG**: Detailed operation logs, transaction details
### Log Storage
- **Local**: Store logs in `/var/log/` or project `logs/` directory
- **Centralized**: Use services like:
- ELK Stack (Elasticsearch, Logstash, Kibana)
- Loki + Grafana
- CloudWatch (AWS)
- Azure Monitor
---
## 🔧 Health Check Endpoints
### Contract Health Check
```bash
#!/bin/bash
# Check contract health
MAINNET_TETHER="0x15DF1D5BFDD8Aa4b380445D4e3E9B38d34283619"
TRANSACTION_MIRROR="0x4CF42c4F1dBa748601b8938be3E7ABD732E87cE9"
RPC_URL="$ETHEREUM_MAINNET_RPC"
# Check if contracts are paused
TETHER_PAUSED=$(cast call $MAINNET_TETHER "paused()" --rpc-url "$RPC_URL")
MIRROR_PAUSED=$(cast call $TRANSACTION_MIRROR "paused()" --rpc-url "$RPC_URL")
if [ "$TETHER_PAUSED" != "0x0000000000000000000000000000000000000000000000000000000000000000" ]; then
echo "⚠️ MainnetTether is paused"
exit 1
fi
if [ "$MIRROR_PAUSED" != "0x0000000000000000000000000000000000000000000000000000000000000000" ]; then
echo "⚠️ TransactionMirror is paused"
exit 1
fi
echo "✅ Contracts are healthy"
```
### Off-Chain Service Health Check
```bash
#!/bin/bash
# Check off-chain service health
# Check state anchor service
if ! pgrep -f "state-anchor-service.js" > /dev/null; then
echo "❌ State anchor service is not running"
exit 1
fi
# Check transaction mirror service
if ! pgrep -f "transaction-mirror-service.js" > /dev/null; then
echo "❌ Transaction mirror service is not running"
exit 1
fi
echo "✅ Off-chain services are running"
```
---
## 📈 Dashboards
### Recommended Dashboard Views
1. **Contract Overview**
- Contract status (paused/active)
- Admin addresses
- Recent events
- Gas usage
2. **State Anchoring**
- Anchored blocks over time
- Anchoring frequency
- Block numbers anchored
- Validator counts
3. **Transaction Mirroring**
- Mirrored transactions over time
- Mirroring frequency
- Batch sizes
- Success rates
4. **Operational**
- Off-chain service uptime
- RPC connection status
- Gas prices
- Error rates
---
## 🔐 Security Monitoring
### Admin Actions
- Monitor all admin function calls
- Alert on unexpected admin changes
- Log all pause/unpause actions
### Access Control
- Monitor contract access patterns
- Alert on suspicious activity
- Track function call frequencies
### Event Analysis
- Analyze event patterns for anomalies
- Monitor for unexpected event sequences
- Track event volumes
---
## 📚 Additional Resources
- [Etherscan API Documentation](https://docs.etherscan.io/)
- [OpenZeppelin Defender Documentation](https://docs.openzeppelin.com/defender/)
- [Prometheus Documentation](https://prometheus.io/docs/)
- [Grafana Documentation](https://grafana.com/docs/)
---
**Last Updated**: 2025-12-11
**Status**: Configuration Guide