Files
trade-doc/rpc/baremetal-monitoring.md

4.5 KiB
Raw Blame History

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):
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
  1. Uruchom playbook:
ansible-playbook -i inventory/hosts.ini playbook.yml

Jak 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.timer
  • systemctl 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:

  • AgaveRPCDownsolana_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)
  • AgaveIOWaitHighiowait > 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://<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 == 0 przez > 30s
  • solana_rpc_slot_lag > 50 przez > 12 min (jeśli liczysz lag)
  • node_filesystem_avail_bytes < 1015% (ledger/accounts szybko zjadają dysk)
  • wysokie node_cpu_seconds_total{mode="iowait"} (NVMe bottleneck)