4.5 KiB
Monitoring bare metalu (Solana RPC box)
Cel: mieć twarde metryki dla prywatnego RPC (i opcjonalnie Geysera), żeby:
- szybko wykrywać
slot lag, spadki wydajności i problemy I/O, - mieć “SLO” dla komponentów zależnych na VPS (DLOB / executor),
- nie zgadywać “czy to RAM/CPU/dysk/sieć”.
Wszystko poniżej zakłada, że RPC box jest prywatny (dostęp tylko po WireGuard).
Co instalujemy (MVP)
1) Node exporter (hostowe metryki)
Pakiet: prometheus-node-exporter
Daje standardowe metryki hosta:
- CPU / iowait,
- RAM,
- filesystem usage,
- network,
- podstawowe statystyki procesów.
Bindujemy go na IP WireGuard (żeby nie wystawiać publicznie).
2) RPC probe → node_exporter textfile collector
To jest mały probe uruchamiany systemd timerem, który zapisuje plik
*.prom do textfile collector node_exportera.
Wystawia m.in.:
solana_rpc_up(1/0),solana_rpc_latency_seconds{method="getHealth|getSlot"},solana_rpc_slot,solana_rpc_block_height,solana_rpc_slot_lag(opcjonalnie, jeśli podasz endpoint referencyjny).
3) Yellowstone (Geyser) Prometheus endpoint (opcjonalnie)
Jeśli uruchamiasz plugin yellowstone-grpc, on sam
wystawia /metrics (adres/port z configu pluginu).
To jest osobny target do scrapowania w Prometheus.
Gdzie jest IaC (Ansible)
IaC jest w infra/baremetal-solana-rpc/:
- playbook:
infra/baremetal-solana-rpc/ansible/playbook.yml - przykładowe zmienne:
infra/baremetal-solana-rpc/ansible/group_vars/solana_rpc.yml.example
Monitoring jest domyślnie “włączony” w przykładzie. Najważniejsze zmienne:
node_exporter_listen(np.10.10.0.2:9100)node_exporter_textfile_collector_dirsolana_rpc_probe_endpoint(np.http://10.10.0.2:8899)solana_rpc_probe_reference_endpoint(opcjonalnie; slot lag vs referencja)yellowstone_prometheus_listen(np.10.10.0.2:8999)
Jak wdrożyć (z VPS / runnera)
- Uzupełnij inventory i vars (bez commitowania sekretów):
cd infra/baremetal-solana-rpc/ansible
cp inventory/hosts.ini.example inventory/hosts.ini
cp group_vars/solana_rpc.yml.example group_vars/solana_rpc.yml- Uruchom playbook:
ansible-playbook -i inventory/hosts.ini playbook.ymlJak sprawdzić, że działa
Z VPS (po WireGuard):
- node exporter:
curl -sS http://<rpc_wg_ip>:9100/metrics | head - RPC probe metryki:
curl -sS http://<rpc_wg_ip>:9100/metrics | rg "solana_rpc_" | head - yellowstone:
curl -sS http://<rpc_wg_ip>:8999/metrics | head(jeśli włączone)
Slot lag
Żeby dashboard miał metrykę solana_rpc_slot_lag, ustaw
solana_rpc_probe_reference_endpoint na publiczny RPC
(przykład: https://api.mainnet-beta.solana.com). W
konfiguracji Ansible:
solana_rpc_probe_reference_endpoint: "https://api.mainnet-beta.solana.com"Po restarcie timer/probe:
systemctl restart solana-rpc-textfile-probe.timersystemctl start solana-rpc-textfile-probe.service
W Prometheus/Grafanie:
solana_rpc_slot{job="mpabi-node-exporter",instance="<twoj-node-exporter-instance>"}solana_rpc_slot_reference{job="mpabi-node-exporter",instance="<twoj-node-exporter-instance>"}solana_rpc_slot_lag{job="mpabi-node-exporter",instance="<twoj-node-exporter-instance>"}
Alerty Prometheus
W trade-deploy/kustomize/infra/monitoring-extras dodane
zostały alerty:
AgaveRPCDown—solana_rpc_up == 0przez >30sAgaveRPCSlotLagHigh— lag > 50 slotów przez >2mAgaveRPCSlotLagCritical— lag > 500 slotów przez >2mAgaveIOHigh— wysoki throughput nanvme(read+write > 300MiB/s przez 5m)AgaveIOWaitHigh—iowait > 20%przez 5m
Po deployu ArgoCD (monitoring-extras) alerty są od razu
aktywne.
Jeśli chcesz od razu zaciągnąć zmianę:
kubectl -n argocd get application monitoring-extras -o widekubectl -n argocd annotate application monitoring-extras argocd.argoproj.io/refresh=hard --overwritekubectl -n monitoring get prometheusrules.monitoring.coreos.com agave-rpc-alerts -o wide
Prometheus na VPS: co scrapować
Najprostszy wariant to statyczne targety po WG:
http://<rpc_wg_ip>:9100/metrics(host + solana_rpc_*),http://<rpc_wg_ip>:8999/metrics(yellowstone, jeśli używasz).
Zasada: żadnych portów RPC/metrics na publicznym NIC.
Minimalne alerty (polecane)
solana_rpc_up == 0przez > 30ssolana_rpc_slot_lag > 50przez > 1–2 min (jeśli liczysz lag)node_filesystem_avail_bytes< 10–15% (ledger/accounts szybko zjadają dysk)- wysokie
node_cpu_seconds_total{mode="iowait"}(NVMe bottleneck)