Set-OPS-Public/wiki/Métriques-et-journaux.md
Daniel Allaire 2450c9ea65 observatoire : un seul nom pour la console, des deux cotes
grafana.chezlepro.internal et tableaux.genese.internal nommaient le meme
service de deux facons. Les deux deviennent observatoire.

Un nom de produit dans une URL se grave aussi dans les SAN du certificat et
dans les URI de redirection du SSO : remplacer Grafana obligerait alors a
renommer le service. Le nom dit desormais la fonction.

Le renommage a revele que les URI des clients Keycloak repetent a la main les
FQDN declares dans expose:. Rien ne les reliait. P66 garde ce lien, ecrite en
meme temps que le premier renommage.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-10 20:21:13 -04:00

78 lines
3.8 KiB
Markdown

# Métriques & journaux
> **Unité d'apprentissage.** Moule : ① concept → ② Set-OPS → ③ transférable → ④ à toi de jouer.
---
## ① Le concept *(générique)*
**Observer** un système, c'est trois familles de données :
- **Métriques** : des **nombres dans le temps** (CPU, mémoire, requêtes/s) — des *séries temporelles*.
- **Journaux (logs)** : des **événements textuels** datés (« service démarré », « erreur X »).
- *(Traces : le parcours d'une requête — hors périmètre ici.)*
Deux **modèles de collecte** opposés, à bien distinguer :
- **Pull / scrape** : le collecteur **va chercher** les métriques chez chaque nœud (qui les *expose*).
- **Push / ship** : chaque nœud **envoie** ses journaux vers un collecteur central.
Le motif **agent/exporter** : sur chaque machine, un petit agent expose des métriques (*exporter*)
ou expédie des logs (*shipper*). Le serveur central agrège ; un tableau de bord **visualise**.
---
## ② Comment Set-OPS le fait
| Pièce | Modèle | Rôle |
|---|---|---|
| **Prometheus** (`serveur_prometheus`) | **PULL** | scrape `node_exporter` (installé par `client_metrique`) sur chaque nœud, port `:9100`. |
| **Loki** (`serveur_loki`) | **PUSH** | reçoit les journaux `journald` expédiés par `client_journal`. |
| **Grafana** (`serveur_grafana`) | — | tableaux de bord au-dessus des **deux** (au SSO). |
Le point-clé : un serveur d'observabilité **sans agents** ne voit que lui-même. Avec
`client_metrique`/`client_journal` sur les nœuds, Grafana voit **toute la flotte**.
*Serveur ≠ agent* : les deux sont nécessaires.
> **Ces deux liaisons ne sont PAS optionnelles**, contrairement à ce que cette unité a dit
> jusqu'au 2026-09-06. Elles portent `universelle: true` dans leur `meta/integration.yml` :
> tout hôte les reçoit **par dérivation**, sans qu'on écrive une ligne au plan, et **P26**
> refuse qu'un hôte y échappe. C'est exactement la leçon du paragraphe ci-dessus, tirée à
> son terme : le plan portait 28 lignes qui disaient « oui » à quelque chose de vrai pour
> tous — elles n'existaient que pour être oubliées, et quatre l'avaient été. Deux serveurs
> n'étaient alors ni supervisés ni journalisés, et **une machine non supervisée ne
> proteste pas**. Aujourd'hui on ne peut plus oublier : il faut **exempter**, et dire
> pourquoi.
---
## ③ Pourquoi c'est transférable
| Set-OPS | Équivalents ailleurs |
|---|---|
| Prometheus (pull) | tout Prometheus, VictoriaMetrics, la logique **scrape** |
| Loki (push) | ELK/Elasticsearch, Graylog, la logique **ship** |
| Grafana | Kibana, Datadog, Grafana Cloud |
| exporter/shipper | motif **universel** (node_exporter, Fluent Bit, Vector…) |
Tu as appris **métriques vs logs, pull vs push, le motif agent** — pas « Prometheus ».
---
## ④ À toi de jouer
1. **Interroge les métriques** (sur obs-01) — combien de nœuds scrapés, tous **UP** ?
```bash
curl -s 'http://localhost:9090/api/v1/query?query=up{job="node"}' | python3 -m json.tool | grep -E 'instance|"1"'
```
2. **Vois les journaux** : `curl -s http://localhost:3100/loki/api/v1/label/host/values` → les nœuds
qui expédient leurs logs.
3. **Ouvre Grafana** (`https://observatoire.chezlepro.internal`) — métriques *et* logs au même endroit.
4. **Casse & répare.** Arrête `prometheus-node-exporter` sur un nœud : dans Prometheus, sa cible passe
**`up=0`** (DOWN). Redémarre : elle repasse UP. Tu *sens* que c'est **l'agent** qui nourrit le
serveur (modèle pull).
---
## Pour aller plus loin *(dépôt)*
- Rôles : `roles/serveur_prometheus`, `roles/serveur_loki`, `roles/serveur_grafana`.
- Agents : `roles/client_metrique` (node_exporter), `roles/client_journal` (→ Loki).
- Ces agents sont des **intégrations universelles** (posées par dérivation, gardées par P26) : unités **Liaisons** et `docs/integrations-vm.md`.