synor/monitoring/alertmanager.yml
Gulshan Yadav 6b5a232a5e feat: Desktop wallet, gas estimator UI, and 30-day monitoring stack
Security (Desktop Wallet):
- Implement BIP39 mnemonic generation with cryptographic RNG
- Add Argon2id password-based key derivation (64MB, 3 iterations)
- Add ChaCha20-Poly1305 authenticated encryption for seed storage
- Add mnemonic auto-clear (60s timeout) and clipboard auto-clear (30s)
- Add sanitized error logging to prevent credential leaks
- Strengthen CSP with object-src, base-uri, form-action, frame-ancestors
- Clear sensitive state on component unmount

Explorer (Gas Estimator):
- Add Gas Estimation page with from/to/amount/data inputs
- Add bech32 address validation (synor1/tsynor1 prefix)
- Add BigInt-based amount parsing to avoid floating point errors
- Add production guard for mock mode (cannot enable in prod builds)

Monitoring (30-day Testnet):
- Add Prometheus config with 30-day retention
- Add comprehensive alert rules for node health, consensus, network, mempool
- Add Alertmanager with severity-based routing and inhibition rules
- Add Grafana with auto-provisioned datasource and dashboard
- Add Synor testnet dashboard with uptime SLA tracking

Docker:
- Update docker-compose.testnet.yml with monitoring profile
- Fix node-exporter for macOS Docker Desktop compatibility
- Change Grafana port to 3001 to avoid conflict
2026-01-10 04:38:09 +05:30

91 lines
2.5 KiB
YAML

# Alertmanager Configuration for Synor Testnet
# Routes alerts to appropriate channels based on severity
global:
# Default timeout for resolving alerts
resolve_timeout: 5m
# Alert routing configuration
route:
# Group alerts by alertname and instance
group_by: ['alertname', 'instance']
# Wait before sending initial notification
group_wait: 30s
# Wait between sending notifications for new alerts in same group
group_interval: 5m
# Wait before resending notification for same alert
repeat_interval: 4h
# Default receiver
receiver: 'default-receiver'
# Child routes for specific severities
routes:
# Critical alerts - immediate notification
- match:
severity: critical
receiver: 'critical-receiver'
group_wait: 10s
repeat_interval: 1h
continue: true
# Warning alerts - batched notification
- match:
severity: warning
receiver: 'warning-receiver'
group_wait: 1m
repeat_interval: 6h
# Receivers define where alerts go
receivers:
- name: 'default-receiver'
# Default: log to stdout (visible in docker logs)
webhook_configs: []
- name: 'critical-receiver'
# Critical alerts - configure your preferred channel
# Example: Discord webhook (uncomment and add your URL)
# webhook_configs:
# - url: 'https://discord.com/api/webhooks/YOUR_WEBHOOK_ID/YOUR_WEBHOOK_TOKEN'
# send_resolved: true
# http_config:
# follow_redirects: true
# Example: Slack webhook (uncomment and add your URL)
# slack_configs:
# - api_url: 'https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK'
# channel: '#synor-alerts'
# title: '{{ .Status | toUpper }}: {{ .CommonAnnotations.summary }}'
# text: '{{ .CommonAnnotations.description }}'
# send_resolved: true
webhook_configs: []
- name: 'warning-receiver'
# Warning alerts - lower priority channel
webhook_configs: []
# Inhibition rules - suppress lower severity when higher fires
inhibit_rules:
# If SynorNodeDown fires, suppress other alerts for same instance
- source_match:
alertname: 'SynorNodeDown'
target_match_re:
alertname: 'Synor.*'
equal: ['instance']
# If NetworkPartition fires, suppress LowPeerCount
- source_match:
alertname: 'SynorNetworkPartition'
target_match:
alertname: 'SynorLowPeerCount'
equal: ['instance']
# Critical suppresses warning for same alert type
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'instance']