# 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_dir` - `solana_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) 1) Uzupełnij inventory i vars (bez commitowania sekretów): ```bash 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 ``` 2) Uruchom playbook: ```bash ansible-playbook -i inventory/hosts.ini playbook.yml ``` ## Jak sprawdzić, że działa Z VPS (po WireGuard): - node exporter: `curl -sS http://:9100/metrics | head` - RPC probe metryki: `curl -sS http://:9100/metrics | rg "solana_rpc_" | head` - yellowstone: `curl -sS http://: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: ```yaml solana_rpc_probe_reference_endpoint: "https://api.mainnet-beta.solana.com" ``` Po restarcie timer/probe: - `systemctl restart solana-rpc-textfile-probe.timer` - `systemctl start solana-rpc-textfile-probe.service` W Prometheus/Grafanie: - `solana_rpc_slot{job="mpabi-node-exporter",instance=""}` - `solana_rpc_slot_reference{job="mpabi-node-exporter",instance=""}` - `solana_rpc_slot_lag{job="mpabi-node-exporter",instance=""}` ### Alerty Prometheus W `trade-deploy/kustomize/infra/monitoring-extras` dodane zostały alerty: - `AgaveRPCDown` — `solana_rpc_up == 0` przez >30s - `AgaveRPCSlotLagHigh` — lag > 50 slotów przez >2m - `AgaveRPCSlotLagCritical` — lag > 500 slotów przez >2m - `AgaveIOHigh` — wysoki throughput na `nvme` (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 wide` - `kubectl -n argocd annotate application monitoring-extras argocd.argoproj.io/refresh=hard --overwrite` - `kubectl -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://:9100/metrics` (host + solana_rpc_*), - `http://:8999/metrics` (yellowstone, jeśli używasz). Zasada: żadnych portów RPC/metrics na publicznym NIC. ## Minimalne alerty (polecane) - `solana_rpc_up == 0` przez > 30s - `solana_rpc_slot_lag > 50` przez > 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)