Docker-Container-Protokollierung konfigurieren

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Docker ist zu einer weit verbreiteten Plattform für die Containerisierung von Anwendungen geworden, aber die Verwaltung der Protokollierung dieser Container kann ein entscheidender Aspekt für die Aufrechterhaltung einer gesunden und effizienten Docker-Umgebung sein. Dieses Tutorial führt Sie durch den Prozess der Konfiguration der Protokollierung für Ihre Docker-Container, von den Grundlagen bis hin zu fortgeschritteneren Techniken, um Ihnen eine bessere Sichtbarkeit und Kontrolle über das Verhalten Ihrer Anwendung zu ermöglichen.

Einführung in die Docker-Protokollierung

Docker ist eine beliebte Plattform zur Containerisierung, die es Entwicklern ermöglicht, Anwendungen konsistent und reproduzierbar zu verpacken und bereitzustellen. Bei der Ausführung von Anwendungen in Docker-Containern ist die Protokollierung ein kritischer Aspekt für die Überwachung und Fehlerbehebung. Docker bietet verschiedene Optionen zur Konfiguration und Verwaltung der Protokollierung Ihrer containerisierten Anwendungen.

Verständnis der Docker-Protokollierung

Docker verwendet den Logging-Treiber, um die von Containern generierten Protokolle zu verarbeiten. Der Logging-Treiber bestimmt, wie die Protokolle gespeichert und abgerufen werden. Docker unterstützt verschiedene Logging-Treiber, darunter:

  • json-file: Der Standard-Logging-Treiber, der Protokolle im JSON-Format auf dem Dateisystem des Hosts speichert.
  • syslog: Sendet Protokolle an einen Syslog-Server.
  • journald: Sendet Protokolle an das systemd-Journal.
  • gelf: Sendet Protokolle an einen Graylog Extended Log Format (GELF)-Endpunkt.
  • fluentd: Sendet Protokolle an einen Fluentd-Server.
  • awslogs: Sendet Protokolle an Amazon CloudWatch Logs.
  • splunk: Sendet Protokolle an eine Splunk Enterprise- oder Splunk Cloud-Instanz.

Die Wahl des Logging-Treibers hängt von den Anforderungen Ihrer Anwendung, der Infrastruktur, auf der Sie laufen, und den Tools für die Protokollverwaltung und -analyse ab.

Zugriff auf Container-Protokolle

Sie können auf die Protokolle eines laufenden Containers über den Befehl docker logs zugreifen. Dieser Befehl ermöglicht Ihnen, die Protokolle eines bestimmten Containers anzuzeigen, die Protokolle in Echtzeit zu verfolgen und die Protokolle sogar basierend auf verschiedenen Kriterien zu filtern.

## Anzeige der Protokolle eines Containers
docker logs my-container

## Echtzeit-Verfolgung der Protokolle
docker logs -f my-container

## Anzeige der letzten 10 Zeilen der Protokolle
docker logs --tail 10 my-container

Standardmäßig ruft der Befehl docker logs die Protokolle vom für den Container angegebenen Logging-Treiber ab. Wenn Sie den Treiber json-file verwenden, werden die Protokolle auf dem Dateisystem des Hosts gespeichert, und Sie können darauf auch direkt vom Host zugreifen.

Konfiguration der Protokollierung für Docker-Container

Konfiguration des Logging-Treibers

Sie können den Logging-Treiber für einen Docker-Container auf verschiedene Weise konfigurieren:

  1. Konfiguration des Logging-Treibers für den gesamten Docker-Daemon:

    ## Bearbeiten Sie die Konfigurationsdatei des Docker-Daemons
    
    ## Fügen Sie die Konfiguration des Logging-Treibers hinzu
    
    ## Starten Sie den Docker-Daemon neu
  2. Konfiguration des Logging-Treibers für einen bestimmten Container:

    ## Starten Sie einen Container mit einem spezifischen Logging-Treiber
    docker run -d --log-driver=syslog --log-opt syslog-address=tcp://192.168.1.100:514 my-app
  3. Konfiguration des Logging-Treibers für einen Docker-Service:

    ## Erstellen Sie einen Docker-Service mit einem spezifischen Logging-Treiber
    docker service create --log-driver=fluentd --log-opt fluentd-address=192.168.1.100:24224 my-service

Konfiguration von Protokolloptionen

Je nach Logging-Treiber können Sie verschiedene Optionen konfigurieren, um das Protokollverhalten anzupassen. Zu den gängigen Optionen gehören:

  • max-size: Die maximale Größe der Protokolldatei, bevor sie rotiert wird.
  • max-file: Die maximale Anzahl der zu verwahrenden Protokolldateien.
  • syslog-address: Die Adresse des Syslog-Servers.
  • fluentd-address: Die Adresse des Fluentd-Servers.
  • awslogs-group: Der Name der CloudWatch Logs-Gruppe.
  • splunk-url: Die URL der Splunk-Instanz.

Sie können diese Optionen mit dem Flag --log-opt beim Starten eines Containers oder der Erstellung eines Services festlegen.

Anzeigen der protokollierten Daten

Nachdem Sie den Logging-Treiber und die Optionen konfiguriert haben, können Sie die protokollierten Daten mit den entsprechenden Tools anzeigen. Wenn Sie beispielsweise den Treiber json-file verwenden, können Sie die Protokolle direkt auf dem Dateisystem des Hosts anzeigen. Wenn Sie einen Remote-Logging-Dienst wie Syslog oder Fluentd verwenden, müssen Sie auf die Protokolle über die jeweilige Management-Schnittstelle zugreifen.

Erweiterte Protokollierungsmethoden

Aggregation von Protokollen mit Fluentd

Fluentd ist ein beliebter Open-Source-Datenkollektor, der verwendet werden kann, um Protokolle aus verschiedenen Quellen, einschließlich Docker-Containern, zu aggregieren und zu verarbeiten. Um Fluentd mit Docker zu verwenden, gehen Sie folgendermaßen vor:

  1. Installieren Sie Fluentd auf einem Host-Computer:

    ## Installieren Sie Fluentd unter Ubuntu 22.04
    sudo apt-get update
    sudo apt-get install -y td-agent
  2. Konfigurieren Sie Fluentd zum Sammeln von Protokollen aus Docker-Containern:

    ## Bearbeiten Sie die Fluentd-Konfigurationsdatei
    sudo vim /etc/td-agent/td-agent.conf
    
    ## Fügen Sie die folgende Konfiguration hinzu
    <source>
      @type docker
      tag docker.*
      dump_stdin true
    </source>
    
    <match docker.**>
      @type forward
      send_timeout 60s
      recover_wait 10s
      heartbeat_interval 1s
      hard_timeout 60s
      <server>
        host 192.168.1.100
        port 24224
      </server>
    </match>
  3. Starten Sie den Fluentd-Dienst neu:

    sudo systemctl restart td-agent
  4. Führen Sie einen Docker-Container mit dem fluentd Logging-Treiber aus:

    docker run -d --log-driver=fluentd --log-opt fluentd-address=192.168.1.100:24224 my-app

Mit dieser Konfiguration werden die Protokolle Ihrer Docker-Container an den Fluentd-Server weitergeleitet, wo Sie sie weiter verarbeiten, analysieren und speichern können.

Integration mit Elasticsearch und Kibana

Eine weitere erweiterte Protokollierungsmethode ist die Integration von Docker-Protokollen mit Elasticsearch und Kibana. Elasticsearch ist eine leistungsstarke Such- und Analyse-Engine, während Kibana eine benutzerfreundliche Oberfläche für die Visualisierung und Analyse der protokollierten Daten bietet.

Um Docker-Protokolle mit Elasticsearch und Kibana zu integrieren, können Sie den logstash Logging-Treiber oder den elastic Logging-Treiber verwenden. Hier ist ein Beispiel mit dem logstash-Treiber:

  1. Führen Sie einen Elasticsearch- und Kibana-Stack mithilfe von Docker Compose aus:

    version: "3"
    services:
      elasticsearch:
        image: elasticsearch:7.9.2
        environment:
          - discovery.type=single-node
      kibana:
        image: kibana:7.9.2
        ports:
          - 5601:5601
      logstash:
        image: logstash:7.9.2
        command: logstash -f /etc/logstash/conf.d/logstash.conf
        volumes:
          - ./logstash.conf:/etc/logstash/conf.d/logstash.conf
  2. Erstellen Sie eine Datei logstash.conf mit folgender Konfiguration:

    input {
      docker {
        host => "unix:///var/run/docker.sock"
        tags => ["docker"]
      }
    }
    
    output {
      elasticsearch {
        hosts => ["elasticsearch:9200"]
        index => "docker-%{+YYYY.MM.dd}"
      }
    }
  3. Führen Sie den Elasticsearch-, Kibana- und Logstash-Stack aus:

    docker-compose up -d
  4. Führen Sie einen Docker-Container mit dem logstash Logging-Treiber aus:

    docker run -d --log-driver=logstash --log-opt logstash-address=logstash:5000 my-app

Mit dieser Konfiguration werden die Protokolle Ihrer Docker-Container an Logstash weitergeleitet, der sie dann an Elasticsearch sendet. Anschließend können Sie Kibana verwenden, um die protokollierten Daten zu visualisieren und zu analysieren.

Zusammenfassung

In diesem umfassenden Leitfaden lernen Sie, wie Sie die Protokollierung Ihrer Docker-Container konfigurieren, von den grundlegenden Einstellungen bis hin zu fortgeschrittenen Techniken. Am Ende dieses Tutorials verfügen Sie über ein fundiertes Verständnis der Optimierung der Protokollierungsfunktionen Ihrer Docker-Umgebung. Dies ermöglicht Ihnen, Probleme effektiv zu beheben, Ihre Anwendungen zu überwachen und eine gut organisierte und effiziente containerisierte Infrastruktur zu pflegen.