doc-locale/fr-fr/administration/cicd/job_logs.md
{{< details >}}
{{< /details >}}
Les job logs sont envoyés par un runner pendant qu'il traite un job. Vous pouvez consulter les logs dans des endroits tels que les pages de job, les pipelines et les notifications par e-mail.
En général, il existe deux états pour les job logs : log et archived log. Le tableau suivant présente les phases par lesquelles passe un log :
| Phase | État | Condition | Flux de données | Chemin de stockage |
|---|---|---|---|---|
| 1 : patching | log | Lorsqu'un job est en cours d'exécution | Runner => Puma => stockage de fichiers | #{ROOT_PATH}/gitlab-ci/builds/#{YYYY_mm}/#{project_id}/#{job_id}.log |
| 2 : archiving | log archivé | Après la fin d'un job | Sidekiq déplace le log vers le dossier des artefacts | #{ROOT_PATH}/gitlab-rails/shared/artifacts/#{disk_hash}/#{YYYY_mm_dd}/#{job_id}/#{job_artifact_id}/job.log |
| 3 : uploading | log archivé | Après l'archivage d'un log | Sidekiq déplace le log archivé vers l'object storage (si configuré) | #{bucket_name}/#{disk_hash}/#{YYYY_mm_dd}/#{job_id}/#{job_artifact_id}/job.log |
Le ROOT_PATH varie selon l'environnement :
/var/opt/gitlab./home/git/gitlab.[!note] Pour les installations Docker, vous pouvez modifier le chemin de montage de vos données. Pour le chart Helm, utilisez l'object storage.
Pour modifier l'emplacement de stockage des job logs :
{{< tabs >}}
{{< tab title="Linux package (Omnibus)" >}}
Facultatif. Si vous avez des job logs existants, suspendez le traitement des données d'intégration continue en arrêtant temporairement Sidekiq :
sudo gitlab-ctl stop sidekiq
Définissez le nouvel emplacement de stockage dans /etc/gitlab/gitlab.rb :
gitlab_ci['builds_directory'] = '/mnt/gitlab-ci/builds'
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
Utilisez rsync pour déplacer les job logs de l'emplacement actuel vers le nouvel emplacement :
sudo rsync -avzh --remove-source-files --ignore-existing --progress /var/opt/gitlab/gitlab-ci/builds/ /mnt/gitlab-ci/builds/
Utilisez --ignore-existing pour ne pas écraser les nouveaux job logs avec des versions plus anciennes du même log.
Si vous avez choisi de suspendre le traitement des données d'intégration continue, vous pouvez redémarrer Sidekiq :
sudo gitlab-ctl start sidekiq
Supprimez l'ancien emplacement de stockage des job logs :
sudo rm -rf /var/opt/gitlab/gitlab-ci/builds
{{< /tab >}}
{{< tab title="Self-compiled (source)" >}}
Facultatif. Si vous avez des job logs existants, suspendez le traitement des données d'intégration continue en arrêtant temporairement Sidekiq :
# For systems running systemd
sudo systemctl stop gitlab-sidekiq
# For systems running SysV init
sudo service gitlab stop
Modifiez /home/git/gitlab/config/gitlab.yml pour définir le nouvel emplacement de stockage :
production: &base
gitlab_ci:
builds_path: /mnt/gitlab-ci/builds
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
Utilisez rsync pour déplacer les job logs de l'emplacement actuel vers le nouvel emplacement :
sudo rsync -avzh --remove-source-files --ignore-existing --progress /home/git/gitlab/builds/ /mnt/gitlab-ci/builds/
Utilisez --ignore-existing pour ne pas écraser les nouveaux job logs avec des versions plus anciennes du même log.
Si vous avez choisi de suspendre le traitement des données d'intégration continue, vous pouvez redémarrer Sidekiq :
# For systems running systemd
sudo systemctl start gitlab-sidekiq
# For systems running SysV init
sudo service gitlab start
Supprimez l'ancien emplacement de stockage des job logs :
sudo rm -rf /home/git/gitlab/builds
{{< /tab >}}
{{< /tabs >}}
Les logs archivés sont considérés comme des artefacts de job. Par conséquent, lorsque vous configurez l'intégration de l'object storage, les job logs sont automatiquement migrés vers celui-ci avec les autres artefacts de job.
Consultez « Phase 3 : uploading » dans Flux de données pour en savoir plus sur le processus.
La limite de taille des fichiers job log dans GitLab est de 100 mégaoctets par défaut. Tout job dépassant cette limite est marqué comme ayant échoué et abandonné par le runner. Pour plus de détails, consultez Taille maximale des fichiers pour les job logs.
Si vous souhaitez éviter toute utilisation du disque local pour les job logs, vous pouvez utiliser l'une des options suivantes :
Il n'existe pas de méthode pour faire expirer automatiquement les anciens job logs. Cependant, il est possible de les supprimer en toute sécurité s'ils occupent trop d'espace. Si vous supprimez les logs manuellement, la sortie du job dans l'interface utilisateur sera vide.
Pour plus de détails sur la suppression des job logs à l'aide de GitLab CLI, consultez Supprimer les job logs.
Pour le chart Helm, utilisez les outils de gestion du stockage fournis avec votre object storage.
Vous pouvez également supprimer les job logs à l'aide de commandes shell. Par exemple, pour supprimer tous les job logs de plus de 60 jours, exécutez la commande suivante depuis un shell dans votre instance GitLab.
[!warning] La commande suivante supprime définitivement les fichiers log et est irréversible.
{{< tabs >}}
{{< tab title="Linux package (Omnibus)" >}}
find /var/opt/gitlab/gitlab-rails/shared/artifacts -name "job.log" -mtime +60 -delete
{{< /tab >}}
{{< tab title="Docker" >}}
En supposant que vous avez monté /var/opt/gitlab sur /srv/gitlab :
find /srv/gitlab/gitlab-rails/shared/artifacts -name "job.log" -mtime +60 -delete
{{< /tab >}}
{{< tab title="Self-compiled (source)" >}}
find /home/git/gitlab/shared/artifacts -name "job.log" -mtime +60 -delete
{{< /tab >}}
{{< /tabs >}}
Une fois les logs supprimés, vous pouvez trouver les références de fichiers rompues en exécutant la tâche Rake qui vérifie l'intégrité des fichiers téléversés. Pour plus d'informations, consultez comment supprimer les références aux artefacts manquants.
La journalisation incrémentielle modifie la façon dont les job logs sont traités et stockés, améliorant ainsi les performances dans les déploiements à grande échelle.
Par défaut, les job logs sont envoyés depuis GitLab Runner par blocs et mis en cache temporairement sur le disque. Une fois le job terminé, un job en arrière-plan archive le log dans le répertoire des artefacts ou dans l'object storage si celui-ci est configuré.
Avec la journalisation incrémentielle, les logs sont stockés dans Redis et un stockage persistant au lieu du stockage de fichiers. Cette approche :
Le processus de journalisation incrémentielle utilise Redis comme stockage temporaire et suit ce flow :
Gitlab::Redis::TraceChunks.Redis Cluster n'est pas pris en charge avec la journalisation incrémentielle. Pour plus d'informations, consultez l'issue 224171.
Avant d'activer la journalisation incrémentielle, vous devez configurer l'object storage pour les artefacts CI/CD, les logs et les builds. Une fois la journalisation incrémentielle activée, les fichiers ne peuvent plus être écrits sur le disque et il n'existe aucune protection contre les erreurs de configuration.
Lorsque vous activez la journalisation incrémentielle, les logs des jobs en cours d'exécution continuent d'être écrits sur le disque, mais les nouveaux jobs utilisent la journalisation incrémentielle.
Lorsque vous désactivez la journalisation incrémentielle, les jobs en cours d'exécution continuent d'utiliser la journalisation incrémentielle, mais les nouveaux jobs écrivent sur le disque.
Pour configurer la journalisation incrémentielle :