Docker verfügt über viele Log-Plugins. Standardmäßig wird JSON-File verwendet. Nur wenn JSON-File verwendet wird, kann sudo docker logs -f angezeigt werden. Geben Sie den folgenden Befehl ein, um das Docker-Log-Plugin anzuzeigen: $ sudo docker info | grep Protokollierung Lassen Sie mich hier erklären, dass Docker beim Ausführen des Containers eine mit dem Container verknüpfte Datei auf dem Hostcomputer erstellt und dann die vom Container generierten Protokolle in diese Datei überträgt. Der Befehl „Docker Logs -f“ findet den Inhalt der Datei und zeigt ihn auf dem Terminal an. Wir alle wissen, dass Docker Logs -f alle entsprechenden Dienstprotokolle an das Terminal ausgibt, unabhängig davon, auf welchem Knoten der Dienst bereitgestellt wird. Jetzt habe ich also eine Frage: Speichert die Containerdatei, die jedem Knoten entspricht, die vollständige Protokollsicherung des Dienstes oder werden nur die Protokolle gespeichert, die vom Container generiert werden, der dem Knotendienst entspricht? Denn dieses Problem besteht darin, dass, wenn jeder Knoten Filebeat verwendet, um die Containerprotokolldatei des Hostcomputers abzuhören, das Protokoll wiederholt wird, wenn das Containerprotokoll jedes Knotens eine vollständige Sicherung ist. Wenn nur das Protokoll des Containers auf dem Knoten gespeichert wird, wird es nicht wiederholt. Die Antwort besteht darin, nur die Protokolle des Containers auf dem Knoten zu behalten. Der Befehl docker logs -f führt lediglich eine Protokollschicht auf dem Overlay-Netzwerkmodell aus, um dieselben Containerprotokolle auf anderen Knoten zu aggregieren. Standardmäßig wird die JSON-Datei von Docker verwendet. Konfigurieren Sie zuerst den Daemon: $ sudo dockerd \ --log-driver=json-datei \ --log-opt labels=Dienstname Um den Container zu starten, müssen Sie die folgenden Parameter hinzufügen: $ sudo Docker-Dienst-Update --label Dienstname=test Oder markieren Sie es direkt in docker-compose.yml: Version: "3" Leistungen: go-gin-demo: Bild: chenghuizhang/go-gin-demo:v3 Häfen: -8081:8081 Netzwerke: - Überlagerung einsetzen: Modus: repliziert Replikate: 3 Beschriftungen: Dienstname: go-gin-demoxxxxxxx Protokollierung: Optionen: Beschriftungen: „Dienstname“ Netzwerke: Überlagerung: Installieren Sie Filebeat auf jedem Knoten und konfigurieren Sie filebeat.yml wie folgt: Dateibeat.prospectors: - Typ: Protokoll Pfade: # Container-Protokollverzeichnis - /var/lib/docker/containers/*/*.log # Da der von Docker verwendete Protokolltreiber eine JSON-Datei ist, ist das gesammelte Protokollformat das JSON-Format. Nachdem es auf true gesetzt wurde, führt Filebeat eine json_decode-Verarbeitung für das Protokoll durch json.keys_under_root: true tail_files: wahr Ausgabe.logstash: Gastgeber: ["172.17.10.114:5044"] Konfigurieren Sie den Index in logstash.conf: Ausgabe { elastische Suche Aktion => "Index" Hosts => ["172.17.10.114:9200"] # Holen Sie sich das Log-Label index => "%{attrs.servicename}-%{+JJJJ.MM.tt}" } } Die Dockerfile-Datei muss die vom Projekt ausgegebenen Protokolle auf stdout und stderr drucken. Andernfalls sammelt der JSON-File-Protokolltreiber die Protokollausgabe im Container nicht. Mit sudo docker logs -f werden die Containerprotokolle nicht im Terminal angezeigt. Der folgende Befehl muss zur Dockerfile hinzugefügt werden: RUN ln -sf /dev/stdout /xx/xx.log \ # info && ln -sf /dev/stderr /xx/xx.log # Fehler Oder in der Log4j-Konfigurationsausgabekonsole des Projekts: <Anhänge> <Konsolenname="Konsole" Ziel="SYSTEM_OUT"> <PatternLayout-Muster="[%d{DEFAULT}]%m"/> </Konsole> </Anhänge> Wenn das Protokoll den Container-ID-Namen und den Image-Namen aufzeichnen muss, können Sie beim Ausführen des Containers die folgenden Parameter hinzufügen: --log-opt tag="//" Schließlich generiert das JSON-File-Log-Plugin die Protokolle, die der Container im folgenden Format auf der Konsole im lokalen Verzeichnis { "log":"[GIN-debug] [WARNUNG] Derzeit erfordert Gin Go 1.6 oder höher und Go 1.7 wird bald erforderlich sein.", "stream":"stderr", "Attribute": { "Tag":"chenghuizhang/go-gin-demo:v3@sha256:e6c0419d64e5eda510056a38cfb803750e4ac2f0f4862d153f7c4501f576798b/mygo.2.jhqptjugfti2t4emf55sehamo/647eaa4b3913", "Dienstname": "Test" }, "Zeit":"2019-01-29T10:08:59.780161908Z" } Protokolle in Logstash formatieren: Filter { grok { patterns_dir => "/etc/logstash/conf.d/patterns" Übereinstimmung => {"Nachricht" => "%{TIMESTAMP_ISO8601:time}%{SERVICENAME:attr.servicename}%{DOCKER_TAG:attr.tag}"} } Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Der gesamte Prozess der Verwendung von node.js Express zum automatischen Erstellen des Projekts
>>: So ändern Sie MySQL-Berechtigungen, um Hosts den Zugriff zu ermöglichen
Dieser Abschnitt beginnt mit den Details der Text...
Zwei Parameter der MySQL-Paging Wählen Sie * aus ...
Die im Internet gefundene Methode funktioniert Die...
Vorwort Im vorherigen Artikel wurde die Installat...
1. Zabbix-Backup [root@iZ2zeapnvuohe8p14289u6Z /]...
Inhaltsverzeichnis 1. Herunterladen 2. Bereitstel...
Inhaltsverzeichnis Vorwort Kern - CancelToken Pra...
Inhaltsverzeichnis Vorwort Browser kompilierte Ve...
Inhaltsverzeichnis Vorwort Der Unterschied zwisch...
Inhaltsverzeichnis 1. Projektumgebung: 2: DNS-Ser...
Erstellen eines zweidimensionalen Arrays in Js: Z...
Durchscheinender Rand Ergebnis: Implementierungsc...
In diesem Artikelbeispiel wird der spezifische Co...
Pseudoelemente und Pseudoklassen Apropos, schauen...
Vorwort Es gibt zwei Arten von Nginx-Modulen: off...