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_addHOST_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.
<!-- 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)
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>
claudeBot
marked the pull request as ready for review 2026-10-03 10:20:24 +02:00
claudeBot
merged commit 84f8b9f9ad into main2026-10-03 10:20:31 +02:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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*.journalen Go pur (pas dejournalctldans 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/loget/run/log/journalsous/host,group_addHOST_LOGS_GID(4 = adm, qui lit le journal et /var/log sur Debian/Ubuntu).hostajouté côté LogsQL et direct ;syslogexclut désormaisdockerethost..env.examplemis à 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