v1.3.3Version stable

Version stable v1.3.3

Journal et exports

Depuis la version 0.0.65, conservez les actions manuelles et automatiques, leurs résultats et les notifications prises en charge, puis exportez-les ou transmettez-les en HTTPS.

Événements et identité

Chaque événement comporte une date UTC, un identifiant, la source manuelle ou automatique, l’acteur et le résultat. Les étapes d’une même action partagent un identifiant de corrélation. Les commandes et secrets ne sont pas enregistrés. L’identité provient du compte local en ligne de commande ou d’un proxy d’authentification explicitement approuvé ; sans identité fiable, elle vaut anonymous.

Sur la démo publique, les visiteurs sont anonymes. La page Journal partagée affiche les vraies actions de démonstration et leurs résultats, avec filtres et exports CSV/JSONL de la page affichée. Le redémarrage des conteneurs de test par le timer du VPS est enregistré séparément dans le journal système.

Stockage persistant et rétention

Montez un volume persistant sur le répertoire du journal. Par défaut, cinq fichiers de 5 Mio au maximum sont conservés, avec des permissions 0600. Les plus anciens événements expirent par taille. Le journal structuré est également émis sur stderr pour les collecteurs de logs.

monit-docker --audit-file /var/lib/monit-docker/events.jsonl \
  --audit-max-bytes 5242880 --audit-files 5 \
  serve --state-file /var/lib/monit-docker/state.json --cmd 'status == exited ? start'

Si l’événement initial ne peut pas être écrit, l’action ne démarre pas. Un échec d’écriture après exécution conserve le résultat réel et produit une alerte sur stderr ; il ne provoque pas une nouvelle exécution.

La version 0.0.65 utilisait 10 Mio par fichier. La nouvelle limite s’applique aux écritures et rotations à venir ; les anciennes archives ne sont pas tronquées. Pour exporter une archive plus grande, conservez temporairement son ancien paramètre de taille.

Consulter le journal dans l’interface

Depuis la version 0.0.66, la page Journal affiche les actions, notifications, dates, auteurs et résultats. Filtrez par période, conteneur, origine manuelle ou automatique, catégorie et résultat. Chaque page contient au maximum 100 événements ; les boutons CSV et JSONL exportent uniquement cette page. Utilisez la ligne de commande pour exporter tout l’historique conservé.

Pour une nouvelle installation privée, depuis le clone v1.3.3 :

cd examples/ui
python3 prepare.py --journal --self-signed
docker compose -f compose.yaml -f compose.journal.yaml up -d

Connectez-vous sur https://localhost:8443/logs. Le certificat autosigné convient au test local ; utilisez un certificat reconnu à distance. Le journal peut être vide tant qu’aucune action ou notification n’a eu lieu. Cette variante ne permet pas d’exécuter des actions manuelles.

L’accès est désactivé par défaut et nécessite un secret de lecture distinct, conservé côté proxy. Tous les utilisateurs authentifiés de ce proxy peuvent consulter le journal configuré. Sur une installation existante, préservez vos secrets et suivez le guide d’activation : les variantes Compose remplacent la commande de l’agent et ne doivent pas être empilées sans réunir leurs options.

La lecture est limitée à 1 Mio par requête, sans chargement de tout le journal ni actualisation automatique. Un filtre rare peut donner une page vide avec un bouton pour poursuivre. Actualisez si la pagination expire après une rotation ou un redémarrage. Seul le journal dédié à la démo est public ; conservez l’authentification sur vos installations.

Exporter ou transmettre

Les options du journal se placent avant le sous-ordre. Ces commandes ne se connectent pas à Docker. Utilisez les mêmes paramètres de rétention que le service.

umask 077
monit-docker --audit-file /var/lib/monit-docker/events.jsonl audit-export > events.jsonl
monit-docker --audit-file /var/lib/monit-docker/events.jsonl audit-export --format csv > events.csv
monit-docker --audit-file /var/lib/monit-docker/events.jsonl \
  audit-send --url https://logs.example.org/events --token-file /run/secrets/logs-token

L’envoi HTTPS transmet un événement JSON par requête, vérifie le certificat et refuse les redirections. Le récepteur doit accepter ce format et dédupliquer par identifiant d’événement. Il n’y a pas de file d’attente ni de reprise automatique ; les données locales restent disponibles après un échec.

Protection commune des valeurs

Le schéma 2 protège les champs textuels avant stockage et export : les contrôles, caractères de formatage et préfixes de formule deviennent des échappements visibles. Les accents restent lisibles. Les anciens journaux sont convertis à la lecture, sans réécriture. Les consommateurs doivent conserver ces valeurs échappées et utiliser le sérialiseur adapté à leur format.

Résultats des notifications

Le webhook Alertmanager journalise la réception des alertes, sans affirmer qu’un email ou message Slack a été livré. Les adaptateurs Redis et DWho HTTP enregistrent leurs tentatives et l’acceptation ou l’échec côté destination. Consultez le guide complet pour l’activation du webhook privé, les volumes des adaptateurs et la récupération après incident.

Depuis la 0.0.71, les événements apparaissent dans des bandeaux colorés : vert pour un succès, rouge pour un échec ou un refus, jaune pour une action ignorée, bleu pour une action en attente ou une notification acceptée, violet pour une action en cours (depuis la 0.0.72), et gris pour une simulation. Les titres et les raisons restent en anglais ; la raison est directement visible. Les champs techniques restent disponibles dans les détails et les exports. Une acceptation ne prouve pas qu’une personne a reçu la notification.

De petits encadrés distinguent les actions manuelles (bleu) et automatiques (ambre), avec l’acteur et l’hôte sur fond gris clair.

Depuis la 0.0.73, les événements occupent moins de hauteur : action, hôte et date figurent en haut, séparés par des points médians, avec les détails à droite. Le conteneur, la source et l’acteur sont regroupés en dessous.

Le contrat API HTTP et métriques détaille les réponses, les erreurs, la fraîcheur et les exports, avec des exemples curl.

Consultez la compatibilité du journal pour les anciens schémas, les limites des exports, la sauvegarde et le retour arrière.

Consultez les notes de version 1.3.3 pour le contrat de compatibilité, les mises à niveau testées et les limites de validation.

Utilisez des secrets distincts pour les actions, les notifications, la lecture du journal et les métriques. Pour conserver un curseur par utilisateur, activez --trust-proxy-user uniquement derrière un proxy qui authentifie les utilisateurs, remplace l’en-tête de l’acteur et limite l’accès direct à l’agent. Sinon, les lecteurs partagent le curseur anonyme.

Depuis la 0.0.74, cliquez sur le conteneur, l’origine manuelle ou automatique, ou le résultat pour combiner les filtres du journal. Les filtres actifs apparaissent au-dessus des événements et se retirent individuellement ; le bouton Clear les efface tous. Chaque changement revient à la première page. Les événements en attente et en cours partagent le filtre Pending. Le filtre du conteneur utilise son identifiant complet, quand il est disponible, sinon son nom. Les exports suivent la page et les filtres appliqués. Un clic sur une étiquette remplace les modifications du formulaire qui n’ont pas encore été appliquées.

Depuis la 0.0.75, le bouton View action ouvre les étapes conservées d’une action dans une fenêtre dédiée, de la plus ancienne à la plus récente. On y retrouve l’origine, l’acteur, l’hôte, le conteneur, la raison et la durée enregistrée, indépendamment des filtres du journal. Load older events poursuit la recherche à la demande ; Refresh action actualise l’historique. Des étapes manquantes ne permettent pas de déduire l’état actuel de l’action. L’affichage est limité à 500 événements. Fermer la fenêtre conserve la page et les filtres du journal. Les événements sans identifiant de corrélation n’ont pas ce bouton.

Depuis la 0.0.76, l’historique affiche immédiatement les événements correspondants déjà chargés dans le journal pendant la vérification auprès de l’agent. Cet aperçu est signalé comme provisoire, puis remplacé par la réponse reçue. En cas d’échec, il reste visible avec une indication précisant qu’il peut être incomplet ou ancien. La validation des textes ordinaires du journal est également accélérée, avec les mêmes règles d’échappement.