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
-ucible une unit systemd; ajoutez-fpour suivre,-npour le nombre de lignes,-ppour la priorité.- formats utiles:
-o short-iso(lisible),-o json(parseable),-o cat(message brut). --since/--untilacceptent 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-bufferedoujqpour des analyses ciblées et temps réel sur data-pm-api.service.