docs(snapshot): sync workspace documentation

This commit is contained in:
u1
2026-03-29 13:14:30 +02:00
parent 93a6e4aa2f
commit 0d3d110026
37 changed files with 8500 additions and 123 deletions

136
rpc/baremetal-monitoring.md Normal file
View File

@@ -0,0 +1,136 @@
# 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://<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:
```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="<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 == 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://<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)