Routing benutzerdefinierter Protokolle - Amazon ECS

Routing benutzerdefinierter Protokolle

Mit FireLens for Amazon ECS können Sie Aufgabendefinitions-Parameter verwenden, um Protokolle zur Protokollspeicherung und -Analytik einen AWS-Service oder ein AWS-Partnernetzwerk (APN)-Ziel weiterzuleiten. FireLens funktioniert mit Fluentd und Fluent Bit. Wir stellen AWS für das Fluent Bit-Image bereit oder Sie können Ihr eigenes Fluentd- oder Fluent Bit-Image verwenden.

Das Erstellen von Amazon-ECS-Aufgabendefinitionen mit einer FireLens-Konfiguration wird mithilfe der AWS-SDKs, der AWS CLI und der AWS Management Console unterstützt.

Überlegungen

Bei der Verwendung von FireLens für Amazon ECS sollten Sie Folgendes berücksichtigen:

  • FireLens für Amazon ECS wird für Aufgaben unterstützt, die sowohl auf AWS Fargate auf Linux und auf Amazon EC2 gehostet werden. Windows-Container auf AWS Fargate unterstützen FireLens nicht.

  • FireLens for Amazon ECS wird in AWS CloudFormation-Vorlagen unterstützt. Weitere Informationen finden Sie unter AWS::ECS::TaskDefinition FirelensConfiguration im AWS CloudFormation-Benutzerhandbuch

  • FireLens hört auf Port 24224. Um sicherzustellen, dass der FireLens-Protokollrouter außerhalb der Aufgabe nicht erreichbar ist, lassen Sie keinen eingehenden Datenverkehr auf Port 24224 in der Sicherheitsgruppe zu, die Ihre Aufgabe verwendet. Für Aufgaben, die den awsvpc-Netzwerkmodus verwenden, ist dies die der Aufgabe zugeordnete Sicherheitsgruppe. Für Aufgaben, die den host-Netzwerkmodus verwenden, ist dies die Sicherheitsgruppe, die der Amazon-EC2-Instance zugeordnet ist, die die Aufgabe hostet. Für Aufgaben, die den bridge-Netzwerkmodus verwenden, erstellen Sie keine Portzuordnungen, die Port 24224 verwenden.

  • Bei Aufgaben, die den bridge-Netzwerkmodus verwenden, muss der Container mit der FireLens-Konfiguration gestartet werden, bevor alle Anwendungscontainer gestartet werden, die darauf angewiesen sind. Um die Startreihenfolge Ihrer Container zu steuern, verwenden Sie Abhängigkeitsbedingungen in der Aufgabendefinition. Weitere Informationen finden Sie unter Container-Abhängigkeit.

    Anmerkung

    Wenn Sie Abhängigkeitsbedingungsparameter in Containerdefinitionen mit einer FireLens-Konfiguration verwenden, stellen Sie sicher, dass jeder Container eine START- oder HEALTHY-Bedingungsanforderung hat.

  • Das Amazon ECS-optimierte Bottlerocket AMI unterstützt keine FireLens.

Erforderliche IAM-Berechtigungen

Um diese Funktion verwenden zu können, müssen Sie eine IAM-Rolle für Ihre Aufgaben erstellen, die die erforderlichen Berechtigungen für die Verwendung von AWS-Services bereitstellt, die für die Aufgaben erforderlich sind. Wenn ein Container beispielsweise Protokolle an Kinesis Data Firehose weiterleitet, erfordert die Aufgabe die Berechtigung zum Aufrufen der firehose:PutRecordBatch-API. Informationen finden Sie im Abschnitt Hinzufügen und Entfernen von IAM-Identitätsberechtigungen im IAM-Benutzerhandbuch.

Die folgende IAM-Beispielrichtlinie fügt Kinesis Data Firehose die erforderlichen Berechtigungen für Routing-Protokolle hinzu.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecordBatch" ], "Resource": [ "*" ] } ] }

Für Ihre Aufgabe kann auch die Amazon ECS-Aufgabenausführungsrolle unter den folgenden Bedingungen erforderlich sein. Weitere Informationen finden Sie unter IAM-Rolle für die Amazon ECS-Aufgabenausführung.

  • Wenn Ihre Aufgabe den Fargate-Starttyp verwendet und Sie Container-Images aus Amazon ECR abrufen oder auf vertrauliche Daten aus AWS Secrets Manager in Ihrer Protokollkonfiguration verweisen, müssen Sie die IAM-Aufgabenausführungsrolle einschließen.

  • Wenn Sie eine benutzerdefinierte Konfigurationsdatei angeben, die in Amazon S3 gehostet wird, muss Ihre IAM-Aufgabenausführungsrolle die s3:GetObject-Berechtigung für die Konfigurationsdatei und die s3:GetBucketLocation-Berechtigung für den Amazon S3-Bucket enthalten, in dem sich die Datei befindet. Weitere Informationen finden Sie unter Festlegen von Berechtigungen in einer Richtlinie im Benutzerhandbuch zu Amazon Simple Storage Service.

    Die folgende IAM-Beispielrichtlinie fügt die erforderlichen Berechtigungen zum Abrufen einer Datei aus Amazon S3 hinzu. Geben Sie den Namen des Amazon S3-Buckets und den Namen der Konfigurationsdatei an.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::examplebucket/folder_name/config_file_name" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::examplebucket" ] } ] }

Fluentd-Pufferlimit

Wenn Sie eine Aufgabendefinition erstellen, können Sie die Anzahl der Ereignisse angeben, die im Speicher gepuffert werden, indem Sie den Wert (in Bytes) im log-driver-buffer-limit angeben. Weitere Informationen finden Sie unter Fluentd-Protokollierungstreiber in der Docker-Dokumentation.

Verwenden Sie diese Option bei hohem Durchsatz, da Docker möglicherweise der Pufferspeicher ausgeht und Puffermeldungen verworfen werden, damit neue Nachrichten hinzugefügt werden können. Die verlorenen Protokolle könnten die Fehlerbehebung erschweren. Das Festlegen des Pufferlimits kann dazu beitragen, dieses Problem zu vermeiden.

Das Folgende zeigt die Syntax zur Angabe des log-driver-buffer-limit:

{ "containerDefinitions": [ { "essential": true, "image": "906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:stable", "name": "log_router", "firelensConfiguration": { "type": "fluentbit" }, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "firelens-container", "awslogs-region": "us-west-2", "awslogs-create-group": "true", "awslogs-stream-prefix": "firelens" } }, "memoryReservation": 50 }, { "essential": true, "image": "httpd", "name": "app", "logConfiguration": { "logDriver": "awsfirelens", "options": { "Name": "firehose", "region": "us-west-2", "delivery_stream": "my-stream", "log-driver-buffer-limit": "2097152" } }, "dependsOn": [ { "containerName": "log_router", "condition": "START" } ], "memoryReservation": 100 } ] }

Berücksichtigen Sie Folgendes bei der Verwendung von FireLens für Amazon ECS mit der Pufferlimit-Option:

  • Diese Option wird vom Amazon-EC2-Launchtyp und vom Fargate-Launchtyp mit Plattformversion 1.4.0 oder höher unterstützt.

  • Die Option ist nur gültig, wenn logDriver auf awsfirelens gesetzt ist.

  • Das Standard-Pufferlimit ist 1 MiB.

  • Die gültigen Werte sind 0 und 536870912 (512 MiB).

  • Die Gesamtmenge des auf Aufgabenebene zugewiesenen Arbeitsspeichers muss zusätzlich zum Arbeitsspeicher-Pufferlimit größer sein als die für alle Container zugewiesene Menge an Arbeitsspeicher. Die Gesamtgröße des angegebenen Puffer-Arbeitsspeichers muss kleiner als 536870912 (512 MB) sein, wenn Sie die memory- und memoryReservertion-Werte des Containers nicht angeben. Genauer gesagt können Sie einen App-Container mit dem awsfirelens-Protokolltreiber und der Option log-driver-buffer-limit auf 300 MiB festlegen. Sie dürfen jedoch keine Aufgaben ausführen, wenn Sie mehr als zwei Container haben, bei denen log-driver-buffer-limit auf 300 MiB festgelegt ist (300 MiB * 2 > 512 MiB).

Verwenden von Fluent-Protokoll-Bibliotheken oder Log4j über TCP

Wenn der awsfirelens-Protokolltreiber in einer Aufgabendefinition angegeben wird, injiziert der Amazon ECS Container-Agent die folgenden Umgebungsvariablen in den Container:

FLUENT_HOST

Die IP-Adresse, die dem FireLens-Container zugewiesen ist.

FLUENT_PORT

Der Port, über den das Fluent Forward-Protokoll kommuniziert.

Sie können die Umgebungsvariablen FLUENT_HOST und FLUENT_PORT verwenden, um Protokolle direkt vom Code aus in den Protokoll-Router zu schreiben, anstatt durch stdout zu gehen. Weitere Informationen finden Sie unter fluent-logger-golang auf GitHub.

Themen