# Surveillance LLM + RAM du spark — mode d'emploi But : alerter par WhatsApp **uniquement sur un changement d'état** (LLM injoignable / RAM basse → alerte, puis retour à la normale). Silencieux quand tout va bien. Principe : « le spark mesure, OpenClaw notifie » — déterministe, sans LLM, donc l'alerte part même si le modèle est mort. ## Deux composants 1. **Côté spark (10.10.10.8)** — cron `1 min` : `~/spark-llm-monitor/health-writer.sh` lit la RAM (`/proc/meminfo`) + teste l'endpoint local `:8000/health`, et publie `.spark-health.json` dans le workspace. 2. **Côté OpenClaw (.17)** — cron `*/2 min`, id **`dbd2e8dd-68d1-4ebe-9a55-7f33810de6bc`**, nom `llm-monitor` : `node /home/node/.openclaw/workspace/llm-monitor.js` lit le relevé + teste l'endpoint à distance, et envoie le WhatsApp (announce) sur transition. ## Seuils - RAM : alerte si dispo < **4 %** (~5 Gi), rétabli au-dessus de **6 %**. (earlyoom tue le serveur d'inférence à ~2 %.) - Endpoint : injoignable, ou latence > 10 s. - Relevé spark figé > 5 min → alerte « writer arrêté ou spark KO ». ## Voir l'état courant ``` cat /mnt/ARCH3/docker/openclaw-data/workspace/.spark-health.json # RAM + endpoint (spark) cat /mnt/ARCH3/docker/openclaw-data/workspace/.llm-monitor-state.json # dernier verdict notifier docker exec openclaw-gateway openclaw cron get dbd2e8dd-68d1-4ebe-9a55-7f33810de6bc | tail -20 ``` ## ARRÊTER - Notifier (.17) : `docker exec openclaw-gateway openclaw cron disable dbd2e8dd-68d1-4ebe-9a55-7f33810de6bc` - Mesure (spark) : `crontab -e` puis retirer la ligne contenant `health-writer.sh` (ou `crontab -l | grep -v health-writer.sh | crontab -`). ## RELANCER - Notifier (.17) : `docker exec openclaw-gateway openclaw cron enable dbd2e8dd-68d1-4ebe-9a55-7f33810de6bc` - Mesure (spark) : `( crontab -l 2>/dev/null; echo "* * * * * /home/tmzf5455/spark-llm-monitor/health-writer.sh >/dev/null 2>&1" ) | crontab -` ## Dashboard Home Assistant (affichage live + pilotage) Le notifier publie l'état dans HA à chaque cycle (best-effort) et lit un interrupteur : - `input_number.llm_mem_avail_pct` — RAM disponible (%) du spark. - `input_text.llm_monitor_status` — libellé d'état (« OK · RAM 6% · 15:56 » ou l'alerte). - `input_boolean.llm_monitor_enabled` — **interrupteur de pilotage** : OFF coupe les alertes WhatsApp (l'affichage reste à jour), ON les réactive. À appliquer une fois (fichiers brouillons dans le workspace) : 1. Paquet : `llm-monitor-ha-package.yaml.draft` → déposer dans les `packages/` de HA (ex. `packages/llm_monitor.yaml`), puis Développeur > YAML : recharger `input_boolean`, `input_number`, `input_text`. 2. Carte : `llm-monitor-ha-card.yaml.draft` → ajouter à un tableau de bord (carte manuelle). Les entités se remplissent au cycle suivant (≤ 2 min). ## Tester à la demande ``` docker exec openclaw-gateway openclaw cron run dbd2e8dd-68d1-4ebe-9a55-7f33810de6bc 2>&1 | tail -15 ``` Sortie vide = tout va bien. Pour forcer une alerte de test : arrêter brièvement le serveur d'inférence, ou pointer le notifier sur un port mort (`SPARK_BASE=http://127.0.0.1:9`).