Das Bereitstellen von Anwendungen ist eine zentrale Administrationsaufgabe und Fehler hierbei fallen Mitarbeitern wie Kunden unmittelbar auf. Eine wichtige ... (mehr)

Logtreiber auswählen

Je nach Distribution findet sich die Basiskonfiguration des Docker-Logging-Treibers an unterschiedlichen Stellen. Fedora beispielsweise deklariert den Logtreiber in der Datei "/etc/sysconfig/docker" in der Zeile

OPTIONS='--selinux-enabled --log-driver=journald –live-restore'

Andere Distributionen konfigurieren den Dienst in der Datei "/etc/docker/ daemon.json", in der dann ein Abschnitt wie dieser steht:

{
     "log-driver": "syslog"
}

Für den Workshop belassen wir den Default-Logging-Treiber und setzen die Logoptionen individuell für jeden Container, was bei der weiteren Analyse hilft. Mit dem Start eines einzelnen Containers lässt sich der Logtreiber per Kommandozeile einstellen, wie folgendes Beispiel zeigt:

docker run\
      --name nginx\
      --log-driver=fluentd\
      --log-opt tag=docker.nginx\
      -p 8002:80\
     -v /root/nginx:/usr/share/nginx/html:ro\
      -d nginx

Dieser Aufruf startet einen Nginx-Webserver mit Fluentd-Logging. Falls nicht anders angegeben, verwendet Docker hierfür die Zieladresse "localhost:24224". Wichtig an dem Aufruf ist der Tag, also die Kennzeichnung der Logdaten mit einer Marke. Das wird später wichtig, um die Logdateien einzelner Dienste aus dem Container-Log weiter auszuwerten.

Für mehr Komfort beim Start von Containern oder Diensten mit mehreren Containern sorgt das Docker-Compose-Tool. Damit starten Sie zunächst einen Stack aus Elasticsearch, Kibana und Fluentbit, wobei wir die Logs der Tools gleich an sich selbst senden lassen und nicht an Journald.

In ein leeres Verzeichnis Ihrer Wahl kommen zunächst die nötigen Konfigurationsdateien wie ".env" und "docker-compose.yml". Im Environment hinterlegen Sie via Umgebungsvariablen, welche Images zum Stack gehören und wie der Stack heißt. Das Compose-File beschreibt dann den Stack. Zusätzlich bedarf es im Verzeichnis eines leeren Ordners für die Daten des Elasticsearch-Containers und eines weiteren Verzeichnisses mit den Konfigurationsdateien von Fluentbit.

Das Environment einrichten

Um die Sache zu vereinfachen, arbeiten wir in diesem Workshop als root auf dem Docker-Host mit abgeschaltetem selinux, das verhindern würde, irgendwelche Verzeichnisse unter "/root/docker" per Volume Bind in einen Container einzublenden. In einer produktiven Umgebung bleibt selinux natürlich aktiviert und Sie passen über das Semanage-Tool den Kontext der Unterverzeichnisse so an, dass der Docker-Dienst sie verwenden darf. Unter "/root/ docker/elk" liegt die Konfiguration des Stacks. Das Environment-File ".env" darin enthält folgende Variablen, auf die später das Docker-Compose-File referenziert:

COMPOSE_PROJECT_NAME=logging
ELASTICSEARCH_IMAGE=docker.elastic.co/elasticsearch/elasticsearch:7.3.1
KIBANA_IMAGE=docker.elastic.co/kibana/kibana:7.3.1
FLUENTBIT_IMAGE=fluent/fluent-bit:1.0
LOG_OPT_TAG_PREFIX=container

Das gibt dem Stack einen Namen, verweist auf die zu ladenden Images und definiert den Prefix für den Logging-Tag. Wichtig hierbei: Wir verwendeten für den Workshop Elasticsearch in der Version 7.3.1. Das erfordert moderne CPUs mit aktuellen SSE-Befehlssätzen und läuft daher nicht auf älteren Prozessoren. Wir hatten für verschiedene Lab-Setups in der Vergangenheit HP-Microserver der Generation 8 oder 7 mit simplen Intel-Celeron- oder AMD-Turion-CPUs verwendet. Auf diesen Maschinen wird die Version 7.3.1 nicht funktionieren. Alternativ lässt sich hier der ältere EK-Stack in der Version 6.8.3 einsetzen. Für den Workshop ist es unwichtig, ob der Aufbau mit Elastic 6 oder 7 läuft.

Bild 1: Ohne den passenden Filter landen alle interessanten Logausgaben des Nginx-Webservers geschlossen in einem "log"-Feld.
comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023