Nous avons une application qui écrit trois types de journaux dans trois fichiers distincts: les journaux d'accès, les journaux d'application génériques et les journaux système. Le format (et le but) de ces journaux sont très différents. Et nous avons des gestionnaires de journaux distincts qui les envoient séparément à notre système de journalisation centralisé.
Sur la base du principe des journaux de traitement en tant que flux d'événements , nous envisageons de passer de l'utilisation de fichiers à la sortie standard. Bien que nous connaissions certains des avantages de cette approche, cela signifierait également que nous obtiendrions un flux fusionné des journaux de format différent, que nous aurions besoin de fractionner à nouveau avant de pouvoir les envoyer à notre système central (Kibana / Splunk / etc.), ou à l'intérieur.
Nous nous demandons s'il existe des outils ou des recommandations sur la façon d'aborder cette situation.
Réponses:
Je suis toujours à la recherche d'une approche de fusion / fractionnement moi-même, mais en attendant, cette approche recommandée par la documentation de Kubernetes semble être une bonne solution: utilisez un conteneur de sidecar pour chacun de vos journaux séparés .
Un «sidecar» est un conteneur Docker que vous utilisez à côté d'un autre conteneur Docker pour travailler avec lui d'une manière ou d'une autre. Dans ce cas, pour chacun de vos trois journaux, vous auriez un conteneur séparé qui scanne ou enregistre les journaux et les renvoie vers stdout.
De cette façon, chacun de vos conteneurs log-sidecar a son propre docker-log à partir de sa propre sortie standard. Étant séparés comme celui-ci, vous pouvez utiliser des pratiques de docker standard (et kubernetes, etc.) pour séparer ou agréger. Voici ce que la page Kubernetes a à dire:
Les "flux de journaux séparés" proviennent du balisage intégré que docker applique aux journaux de différents conteneurs, décrit dans la documentation du docker ici:
la source
L'idée de les fusionner en un seul flux juste pour les diviser plus tard semble douloureuse. Je n'ai pas eu de raison de le faire moi-même, mais voici où je commencerais:
Cela semble un peu moins qu'élégant de devoir également effectuer une configuration sur l'hôte, mais si vous utilisez quelque chose comme ansible où vous pouvez exécuter un playbook et le configurer pendant votre déploiement dans la boîte, cela ne devrait pas être trop mal.
la source