Wie übertrage ich Docker-Container-Protokolle über einen Proxy an CloudWatch Logs?

Lesedauer: 4 Minute
0

Ich möchte meine Docker-Container-Protokolle über einen Proxy auf Amazon CloudWatch veröffentlichen.

Kurzbeschreibung

Sie können einen Proxy verwenden, wenn Sie Docker-Container-Protokolle an CloudWatch übertragen. Dieser Schritt fügt eine zusätzliche Sicherheitsebene zwischen Ihren Docker-Instances und dem Internetverkehr hinzu.

Lösung

Stellen Sie zunächst sicher, dass Sie Ihre grundlegende Docker-Infrastruktur für Ihren speziellen Anwendungsfall einrichten.

In diesem Beispiel umfasst die Infrastruktur:

  • Eine Amazon Elastic Compute Cloud (Amazon EC2)-Instance, die Teil eines privaten Subnetzes ist, das als Docker-Container-Instance fungiert.
  • Eine Amazon EC2-Instance, die Teil eines öffentlichen Subnetzes ist und als Proxy-Instance fungiert.
  • Ein Docker-Daemon, der auf der Amazon EC2-Instance in einem privaten Subnetz installiert ist. Dieser Daemon ist so konfiguriert, dass alle Container-Aufgaben ihre Standardausgabeprotokolle an CloudWatch übertragen können.
  • Amazon Linux 2 für das Betriebssystem (OS).

Stellen Sie außerdem sicher, dass Ihre AWS Identity and Access Management (IAM)-Rolle über CloudWatchAgentAdminPolicy, CloudWatchAgentServerPolicy oder eine ähnliche Richtlinie verfügt, die mit Ihrer privaten Instance verknüpft ist. Die Richtlinie muss es Ihnen ermöglichen, eine Protokollgruppe zu erstellen, einen Protokollstream zu erstellen und PutLogEvents-Aufrufe zu tätigen.

Vorbereitung Ihre Docker-Instance

1.Richten Sie Linux-Umgebungsvariablen ein, um den gesamten Datenverkehr von der Docker-Container-Instance an Ihre Proxy-Instance weiterzuleiten. Im folgenden Beispiel gilt die IP-Adresse für die EC2-Instance, die als Proxy-Instance fungiert:

$ export https_proxy=http://192.0.2.86:8888/
$ export http_proxy=http://192.0.2.86:8888/
$ export no_proxy=localhost,169.254.169.254

Hinweis: Diese Variablen sind die Mindestanforderungen für die no_proxy-Konfiguration. Stellen Sie sicher, dass Sie alle sonstigen Ziel-IP-Adressen angeben, zu denen Clients nicht über den Proxy gelangen sollen.

2.Installieren Sie den Docker-Container in Ihrer Docker-Instance. Siehe folgendes Beispiel:

$ sudo yum update -y
$ sudo yum install docker -y
$ sudo docker version

3.Aktualisieren Sie Ihre Docker-Instance auf die neueste Version.

4.Starten Sie den Docker-Daemon mit dem folgenden Befehl:

sudo systemctl start docker

5.Führen Sie den folgenden Befehl aus, damit Docker ohne Sudo-Rechte ausgeführt werden kann:

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
docker run hello-world

6.Überprüfen Sie die Ausgabe, um Ihre Docker-Installation zu überprüfen. Vergewissern Sie sich, dass eine Meldung zur Installationsbestätigung angezeigt wird, die der folgenden ähnelt:

"Hello From Docker!"
"This message shows that your installation appears to be working correctly."

Fügen Sie Ihre Proxy-Konfiguration zu Docker hinzu

Für Konfigurationen, bei denen die Docker-Engine in Linux Init installiert ist (einschließlich Amazon Linux-, RHEL 6- oder CentOS 6-Distributionen):

1.Öffnen Sie die Konfigurationsdatei /etc/sysconfig/docker mit Ihrem bevorzugten Editor.

2.Fügen Sie Ihre Proxy-Konfiguration zur Datei hinzu. Verwenden Sie die private IP-Adresse der öffentlichen Instance oder der Proxy-Instance. Siehe folgendes Beispiel:

# Setup proxy
export http_proxy="http://192.0.2.86:8888/"
export https_proxy="http://192.0.2.86:8888/"
export no_proxy="/var/run/docker.sock,localaddress,localhost,169.254.169.254"

Hinweis: Dies sind die Mindestanforderungen für die Konfiguration no_proxy. Stellen Sie sicher, dass Sie alle sonstigen Ziel-IP-Adressen angeben, zu denen Clients nicht über den Proxy gelangen sollen.

3.Speichern Sie Ihre Konfigurationsdatei.

4.Starten Sie den Docker-Dienst neu:

$ sudo service docker restart

Für Konfigurationen, bei denen die Docker-Engine im Systemverwaltungs-Daemon Linux systemd installiert ist (einschließlich der Amazon Linux 2- und RHEL 7-Distributionen):

1.Erstellen Sie ein systemd-Verzeichnis für den Docker-Dienst. Siehe folgendes Beispiel:

$ sudo mkdir -p /etc/systemd/system/docker.service.d

2.Erstellen Sie je nach Konfiguration eine HTTP- oder HTTPS-Proxydatei. Siehe folgende Beispiele:

$ sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.0.2.86:8888/" "NO_PROXY=localhost,127.0.0.1,169.254.169.254"
$ vim /etc/systemd/system/docker.service.d/https-proxy.conf
[Service]
Environment="HTTPS_PROXY=http://192.0.2.86:8888/" "NO_PROXY=localhost,127.0.0.1,169.254.169.254"

Hinweis: Dies sind die Mindestanforderungen für die Konfiguration no_proxy. Stellen Sie sicher, dass Sie alle sonstigen Ziel-IP-Adressen angeben, zu denen Clients nicht über den Proxy gelangen sollen.

3.Verwenden Sie den folgenden Befehl, um Ihre Änderungen zu leeren:

$ sudo systemctl daemon-reload

4.Verwenden Sie den folgenden Befehl, um Docker neu zu starten:

$ sudo systemctl restart docker

5.Überprüfen Sie Ihre neue Konfiguration:

$ systemctl show --property=Environment docker

6.Überprüfen Sie die Ausgabe:

Environment="HTTPS_PROXY=http://192.0.2.86:8888/" "NO_PROXY=localhost,127.0.0.1,169.254.169.254"

Testen Sie, ob Ihre Docker-Protokolle an CloudWatch übertragen werden

1.Führen Sie das nginx-Image in Docker aus.

2.Verwenden Sie den Docker awslogs-Protokolltreiber, um die Standardausgabeprotokolle der Aufgabe an CloudWatch Logs zu übertragen. Siehe folgendes Beispiel:

$ sudo docker run -d --name nginx --log-driver=awslogs --log-opt awslogs-region=eu-west-1 --log-opt awslogs-group=DockerLogGroupWithProxy --log-opt awslogs-create-group=true -p 8112:80 nginx

3.Generieren Sie mit curl Protokolle für Ihre erste Docker-Aufgabe. Siehe folgendes Beispiel:

curl localhost:8112

4.Sehen Sie sich die an Ihre Protokollgruppe gesendeten Daten in der CloudWatch-Konsole an.

5.Stellen Sie sicher, dass das Protokollereignis für Ihre Docker-Aufgabe an die CloudWatch-Protokollgruppe übertragen wird. Suchen Sie beispielsweise nach einem Protokollereignis, das dem folgenden ähnelt:

198.51.100.100 - - [19/Sep/2018:10:13:38 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.53.1" "-"

Ähnliche Informationen

Überwachung Ihrer Container-Instances

Erstellen eines Container-Images für die Verwendung auf Amazon ECS

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr