Source « logs système de l'hôte » (journal systemd ou /var/log) #6

Merged
claude Bot merged 1 commits from feat/logs-systeme into main 2026-10-03 10:20:31 +02:00

Requested by Cédric

Avant : Logstream ne recevait que le syslog réseau et les logs des conteneurs Docker ; les logs système de la machine qui héberge la stack n'y arrivaient que si on configurait l'hôte pour les envoyer en syslog.

Après : Réglages > Sources propose une nouvelle source « Logs système de l'hôte », désactivée par défaut. Une fois activée, Logstream lit le journal systemd de l'hôte (ou, sans journald, les fichiers texte de /var/log). Ces logs ont la source host, sélectionnable dans le filtre Source.

Comment :

  • journal.go : lecteur minimal des fichiers *.journal en Go pur (pas de journalctl dans l'image, image inchangée). Les objets sont parcourus dans l'ordre d'écriture ; une entrée n'est lue qu'une fois liée (seqnum ≤ celui de l'en-tête), donc pas de lecture à moitié écrite.
  • hostlogs.go : sondage toutes les secondes, positions dans /data/hostlogs-state.json (par file_id du journal, ou par fichier + inode pour /var/log), HOST_LOGS_BACKFILL (1h) lu à l'activation, état et erreurs (non monté, accès refusé) affichés dans Réglages.
  • docker-compose.yml : montage en lecture seule de /var/log et /run/log/journal sous /host, group_add HOST_LOGS_GID (4 = adm, qui lit le journal et /var/log sur Debian/Ubuntu).
  • Filtre Source : host ajouté côté LogsQL et direct ; syslog exclut désormais docker et host.
  • README EN/FR et .env.example mis à jour.

Limites : les champs du journal compressés par journald (messages > 512 octets, zstd/lz4/xz) ne sont pas décodables sans bibliothèque externe ; ils sont comptés dans Réglages. Les fichiers tournés (*.1, *.gz) ne sont pas lus.

Validation : go vet, go build, go test (tests sur faux journaux compact et classique, reprise après entrée inachevée, suivi de fichiers, répertoire absent). Interface vérifiée dans le navigateur (FR/EN). Pas testé sur un vrai journal ni en Docker (indisponible sur scarif) : à essayer sur la machine sandbox avant fusion.

🤖 Generated with Claude Code

<!-- ccr-projects-attribution: {"github_login":"vblogio"} --> _Requested by **Cédric**_ Avant : Logstream ne recevait que le syslog réseau et les logs des conteneurs Docker ; les logs système de la machine qui héberge la stack n'y arrivaient que si on configurait l'hôte pour les envoyer en syslog. Après : Réglages > Sources propose une nouvelle source « Logs système de l'hôte », désactivée par défaut. Une fois activée, Logstream lit le journal systemd de l'hôte (ou, sans journald, les fichiers texte de /var/log). Ces logs ont la source `host`, sélectionnable dans le filtre Source. Comment : - `journal.go` : lecteur minimal des fichiers `*.journal` en Go pur (pas de `journalctl` dans l'image, image inchangée). Les objets sont parcourus dans l'ordre d'écriture ; une entrée n'est lue qu'une fois liée (seqnum ≤ celui de l'en-tête), donc pas de lecture à moitié écrite. - `hostlogs.go` : sondage toutes les secondes, positions dans `/data/hostlogs-state.json` (par file_id du journal, ou par fichier + inode pour /var/log), `HOST_LOGS_BACKFILL` (1h) lu à l'activation, état et erreurs (non monté, accès refusé) affichés dans Réglages. - `docker-compose.yml` : montage en lecture seule de `/var/log` et `/run/log/journal` sous `/host`, `group_add` `HOST_LOGS_GID` (4 = adm, qui lit le journal et /var/log sur Debian/Ubuntu). - Filtre Source : `host` ajouté côté LogsQL et direct ; `syslog` exclut désormais `docker` et `host`. - README EN/FR et `.env.example` mis à jour. Limites : les champs du journal compressés par journald (messages > 512 octets, zstd/lz4/xz) ne sont pas décodables sans bibliothèque externe ; ils sont comptés dans Réglages. Les fichiers tournés (`*.1`, `*.gz`) ne sont pas lus. Validation : `go vet`, `go build`, `go test` (tests sur faux journaux compact et classique, reprise après entrée inachevée, suivi de fichiers, répertoire absent). Interface vérifiée dans le navigateur (FR/EN). Pas testé sur un vrai journal ni en Docker (indisponible sur scarif) : à essayer sur la machine sandbox avant fusion. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude Bot added 1 commit 2026-10-03 10:05:56 +02:00
New source, off by default and switched in Settings > Sources, that
collects the system logs of the machine hosting the stack:
- reads the systemd journal files directly (pure Go reader, no
  journalctl in the image), from /var/log/journal and /run/log/journal
  mounted read-only under /host;
- falls back to following the text files of /var/log (syslog,
  messages, *.log) on hosts without journald;
- positions saved in /data/hostlogs-state.json, HOST_LOGS_BACKFILL
  read when the source is turned on;
- source_type "host", selectable in the Source filter;
- compose mounts and group_add (HOST_LOGS_GID, adm by default), docs.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
claude Bot marked the pull request as ready for review 2026-10-03 10:20:24 +02:00
claude Bot merged commit 84f8b9f9ad into main 2026-10-03 10:20:31 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: vLab-BZH/logstream#6