Aller au contenu

Journaux du serveur

DumbMonit écrit ses propres journaux sur disque, permet à un administrateur de télécharger les derniers jours, et peut les envoyer à un serveur de logs au fil de l’eau. Tout se trouve dans Réglages → Système → Journaux du serveur (administrateurs seulement).

Les journaux sont dans le volume de données, sous /data/logs/ :

/data/logs/dumbmonit-2026-10-20.log aujourd'hui, en clair
/data/logs/dumbmonit-2026-10-19.log.gz jours passés, compressés

Chaque ligne est un objet JSON (JSON lines) :

{"ts":"2026-10-20T12:34:56.123Z","level":"INFO","target":"dumbmonit_server::scheduler","msg":"cycle done","fields":{"targets":42},"kind":"app"}
ChampSens
tsheure UTC, RFC 3339
levelERROR, WARN, INFO ou DEBUG
targetle module qui a écrit la ligne
msgle message
fieldsvaleurs structurées attachées au message
kindapp pour l’application, audit pour le journal d’audit (connexions, jetons, utilisateurs…)

Le filtre global DUMBMONIT_LOG (par exemple info ou dumbmonit_server=debug) décide de ce qui est journalisé. Tout ce qui suit ne voit que ce qui passe ce filtre.

Aucun secret n’est écrit dans les journaux : mots de passe, jetons, clés d’API et valeurs similaires sont masqués avant l’écriture, sur disque comme vers chaque destination.

  • Un nouveau fichier démarre chaque jour (UTC). Le fichier du jour reste en clair ; les jours passés sont compressés en gzip.
  • Rétention : le nombre de jours conservés, 14 par défaut (de 1 à 365). Les fichiers plus anciens sont supprimés.
  • Plafond de taille : la taille totale du dossier, 1024 Mo par défaut (de 16 à 102400). Quand il est atteint, les jours les plus anciens partent d’abord.

Les deux se règlent dans les Réglages. Si l’écriture disque ne suit pas, ou si le plafond est atteint, des enregistrements ne sont pas écrits ; la section en donne le nombre.

Choisissez les 1, 7, 14 ou 30 derniers jours, ou un nombre de jours personnalisé (jamais plus que la rétention). La taille estimée du téléchargement s’affiche avant le bouton Télécharger les journaux. L’archive est un .tar.gz qui contient les fichiers quotidiens de la période et audit.jsonl, le journal d’audit filtré sur la même période.

Le même téléchargement est disponible pour des scripts avec une session ouverte : GET /api/logs/export?days=7.

Une destination envoie les journaux à un serveur de logs. Vous pouvez en ajouter plusieurs. Réglages communs :

  • Nom et Activée.
  • Niveau minimal : error, warn, info (par défaut) ou debug. Les enregistrements en dessous ne sont pas envoyés. Le filtre global DUMBMONIT_LOG s’applique d’abord : une destination ne reçoit jamais plus que ce qu’il laisse passer.
  • Chaque destination a sa propre file en mémoire de 10 000 enregistrements. Les envois se font par lots de 500 au maximum, ou chaque seconde.

La perte est acceptée. Si un lot ne part pas (serveur arrêté, refus, délai dépassé), il est abandonné et compté, pas rejoué, et une file pleine écarte les plus anciens enregistrements. Un serveur de logs lent ou injoignable ne ralentit donc jamais DumbMonit. La liste montre, pour chaque destination, les enregistrements envoyés, les enregistrements perdus et la dernière erreur. La copie sur disque n’est jamais touchée.

Envoyer un test envoie un enregistrement et indique si le serveur l’a accepté.

Les secrets (mots de passe, jetons, clés d’API) sont stockés chiffrés et jamais réaffichés. En modification, laissez-les vides pour conserver ceux qui sont enregistrés. Si vous changez l’adresse, saisissez-les à nouveau.

Créez une entrée GELF dans Graylog, puis :

ChampSens
transportudp (par défaut), tcp ou http
addresshôte:port pour UDP et TCP (port 12201 par défaut) ; une URL pour HTTP, par exemple http://graylog:12201/gelf
tlsTLS sur TCP
insecure_tlsaccepter un certificat qui ne se vérifie pas
username, password (secret)authentification basique HTTP

UDP découpe les messages de plus de 8192 octets en morceaux GELF. TCP envoie un document JSON par enregistrement, terminé par un octet nul.

Exemple : transport = udp, address = graylog:12201.

ChampSens
urlURL de base, par exemple http://victorialogs:9428
stream_fieldschamps qui identifient un flux, service,host par défaut
username, password (secret)authentification basique
token (secret)jeton Bearer, à la place d’un mot de passe

Les enregistrements sont envoyés à /insert/jsonline?_msg_field=_msg&_time_field=_time&_stream_fields=service,host.

Exemple : url = http://victorialogs:9428.

ChampSens
urlURL de base, par exemple http://loki:3100
tenantfacultatif, envoyé dans X-Scope-OrgID
username, password (secret)authentification basique (Grafana Cloud)
token (secret)jeton Bearer, à la place d’un mot de passe

Les enregistrements sont envoyés à /loki/api/v1/push avec les étiquettes de flux service_name="dumbmonit", host et level.

Exemple : url = http://loki:3100. Dans Grafana, requête {service_name="dumbmonit"}.

Elasticsearch / OpenSearch { #elasticsearch-opensearch }

Section intitulée « Elasticsearch / OpenSearch { #elasticsearch-opensearch } »
ChampSens
urlpar exemple https://es:9200
indexindex ou data stream, dumbmonit-logs par défaut
insecure_tlsaccepter un certificat qui ne se vérifie pas
username, password (secret)authentification basique
api_key (secret)envoyée dans Authorization: ApiKey …, à la place d’un mot de passe

Les enregistrements partent vers /_bulk en NDJSON avec l’action create, ce qui fonctionne aussi avec un data stream.

Exemple : url = https://es:9200, index = dumbmonit-logs.

Les messages Syslog suivent la RFC 5424.

ChampSens
transportudp (par défaut), tcp ou tls
addresshôte:port ; 514 par défaut en UDP et TCP, 6514 en TLS
framingTCP et TLS seulement : octet-counting (par défaut, RFC 6587 et 5425) ou newline
facilitylocal0 (par défaut) à local7, user ou daemon
app_namedumbmonit par défaut
insecure_tlsaccepter un certificat qui ne se vérifie pas
ca_certautorité de certification PEM facultative à faire approuver en TLS

Exemple : transport = tls, address = syslog.example.org:6514.