Concierge: declenche au BRANCHEMENT (transition on de evenement) au lieu de la session ; helper porte 'branchement' (ts::text verbatim) ; fraicheur [on-10, min(now, on+30)]. Moniteur LLM/RAM (llm-monitor.js) : endpoint spark + RAM, alerte WhatsApp sur changement d'etat, publie l'etat dans HA (last_seen a chaque passage) + interrupteur de pilotage. Docs: SPEC a jour, MONITORING-LLM.md, brouillons de config HA. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RZsbhyGmRwZogdoBwT6C6y
58 lines
3.1 KiB
Markdown
58 lines
3.1 KiB
Markdown
# 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`).
|