Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Journalisation
Les applications conteneurisées dirigent généralement les journaux des applications vers STDOUT. Le moteur d'exécution du conteneur intercepte ces journaux et en fait quelque chose, généralement en écrivant dans un fichier. L'emplacement de stockage de ces fichiers dépend de l'environnement d'exécution et de la configuration du conteneur.
L'une des différences fondamentales avec les pods Windows est qu'ils ne génèrent pas de STDOUT. Vous pouvez exécuter LogMonitor
Le mécanisme de collecte des STDOUT/STDERR journaux récupère les journaux des pods Kubernetes. A DaemonSet
Recommandations en matière de journalisation
Les meilleures pratiques générales de journalisation ne sont pas différentes lors de l'exploitation de charges de travail Windows dans Kubernetes.
-
Enregistrez toujours les entrées de journal structurées (JSON/SYSLOG), ce qui facilite la gestion des entrées de journal car il existe de nombreux analyseurs préécrits pour de tels formats structurés.
-
Centralisation des journaux : des conteneurs de journalisation dédiés peuvent être utilisés spécifiquement pour recueillir et transférer les messages de journal de tous les conteneurs vers une destination
-
Limitez la verbosité du journal, sauf lors du débogage. La verbosité exerce un stress important sur l'infrastructure forestière et des événements importants peuvent être perdus dans le bruit.
-
Enregistrez toujours les informations de l'application ainsi que l'identifiant de la transaction ou de la demande à des fins de traçabilité. Les objets Kubernetes ne portent pas le nom de l'application. Par exemple, le nom d'un pod
windows-twryrqyw
peut ne pas avoir de sens lors du débogage des journaux. Cela facilite la traçabilité et le dépannage des applications avec vos journaux agrégés.La façon dont vous générez ces transaction/correlation identifiants dépend de la structure de programmation. Mais un modèle très courant consiste à utiliser un aspect/intercepteur de journalisation, qui peut utiliser le MDC
(Mapped Diagnostic Context) pour injecter un transaction/correlation identifiant unique à chaque demande entrante, comme suit :
import org.slf4j.MDC; import java.util.UUID; Class LoggingAspect { //interceptor @Before(value = "execution(* *.*(..))") func before(...) { transactionId = generateTransactionId(); MDC.put(CORRELATION_ID, transactionId); } func generateTransactionId() { return UUID.randomUUID().toString(); } }