← retour aux snippets

journalctl: logs de service avec filtres et plages

Suivre et rechercher les logs systemd d'un service avec filtres, fenêtre temporelle et format lisible.


objectif

Suivre et analyser les logs d’un service systemd (ex: data-pm-api.service) en temps réel, par priorité, avec fenêtres temporelles et formats exploitables.

code minimal

# suivre en temps réel les logs de data-pm-api.service
journalctl -u data-pm-api.service -f -o short-iso

utilisation

# dernières 200 lignes puis suivi (utile après un déploiement)
journalctl -u data-pm-api.service -n 200 -f -o short-iso

# fenêtre temporelle (depuis ce matin UTC jusqu'à maintenant)
journalctl -u data-pm-api.service --since "today 00:00" --until "now" -o short-iso

# filtrer par priorité (err..alert) et afficher le PID
journalctl -u data-pm-api.service -p err..alert -o short-iso -x

# filtrer par motif (grep temps réel sans buffer)
journalctl -u data-pm-api.service -f -o short-iso | grep --line-buffered -E 'ERROR|WARN'

# afficher en JSON et extraire MESSAGE + PRIORITY (jq)
journalctl -u data-pm-api.service -o json -n 500 \
  | jq -r '[.PRIORITY, ._PID, .MESSAGE] | @tsv'

# logs d'un boot spécifique (ex: boot courant)
journalctl -u data-pm-api.service -b 0 -o short-iso

# logs pour un identifiant syslog précis (ex: nginx pour data.pm)
journalctl -t nginx -o short-iso --since "1 hour ago"

# logs d'un PID en particulier
pid="$(pgrep -x data-pm-api)"; [ -n "$pid" ] && journalctl _PID="$pid" -o short-iso

# compacter l'affichage (sans metadonnées verbeuses)
journalctl -u data-pm-api.service --since "2 hours ago" --no-pager -o cat

variante(s) utile(s)

# détecter un redémarrage en boucle: compter les restarts de la dernière heure
journalctl -u data-pm-api.service --since "1 hour ago" \
  | grep -c -E 'Starting|Stopped|Restarting|Core dumped'

# exporter les logs pour un ticket (fichier texte)
journalctl -u data-pm-api.service --since "2025-08-15 08:00" --until "2025-08-15 10:00" -o short-iso > data-pm-api_2025-08-15_0800-1000.log

# surveiller plusieurs services (api + web) en même temps
journalctl -u data-pm-api.service -u data-pm-web.service -f -o short-iso

# limiter la taille et la rotation du journal (configuration journald.conf)
sudo sed -i.bak 's/^#\?SystemMaxUse=.*/SystemMaxUse=500M/' /etc/systemd/journald.conf
sudo systemctl restart systemd-journald

# forcer la persistance des logs (si volatile par défaut)
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald

notes

  • -u cible une unit systemd; ajoutez -f pour suivre, -n pour le nombre de lignes, -p pour la priorité.
  • formats utiles: -o short-iso (lisible), -o json (parseable), -o cat (message brut).
  • --since/--until acceptent des expressions naturelles: “1 hour ago”, “yesterday”, “2025-08-15 09:00”.
  • activez la persistance pour éviter la perte de logs entre redémarrages; ajustez la limite (SystemMaxUse) selon vos disques.
  • combinez avec grep --line-buffered ou jq pour des analyses ciblées et temps réel sur data-pm-api.service.