Come posso inviare i log del mio container a più destinazioni in Amazon ECS su AWS Fargate?
Desidero che il mio container dell'applicazione eseguito su AWS Fargate inoltri i log a più destinazioni, come Amazon CloudWatch, Amazon Data Firehose o Splunk.
Breve descrizione
Una definizione dell'attività in Amazon Elastic Container Service (Amazon ECS) ti consente di specificare un solo oggetto configurazione di log per un determinato container. Questo limite significa che puoi inoltrare i log a una sola destinazione. Per inoltrare i log a più destinazioni in Amazon ECS su Fargate, puoi utilizzare FireLens.
Nota: FireLens funziona con i server di inoltro di log Fluent Bit e Fluentd. La risoluzione utilizza Fluent Bit perché è più efficiente in termini di risorse rispetto a Fluentd.
Risoluzione
Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Prima di iniziare, assicurati di aver compreso quanto segue:
- Per generare la definizione dell'output di Fluent Bit, FireLens utilizza le coppie chiave-valore specificate come opzioni nell'oggetto LogConfiguration dalla definizione dell'attività. La destinazione a cui Firelens indirizza i log è specificata nella sezione di definizione [OUTPUT] di un file di configurazione di Fluent Bit. Per ulteriori informazioni, consulta Output sul sito web Fluent Bit. Se non specifichi alcuna opzione, non viene generato alcun output.
- FireLens crea un file di configurazione per tuo conto, ma puoi anche specificare un file di configurazione personalizzato. Puoi ospitare questo file di configurazione in Amazon Simple Storage Service (Amazon S3). Oppure crea un'immagine Docker di Fluent Bit personalizzata con il file di configurazione dell'output personalizzato aggiunto all'immagine.
- Puoi utilizzare Amazon ECS e Fargate per estrarre un file di configurazione personalizzato da Amazon S3, a meno che tu non abbia bisogno di plug-in personalizzati per Fluent Bit.
Crea un file di configurazione di output personalizzato per Fluent Bit e caricalo su Amazon S3
Crea un file di configurazione personalizzato per Fluent Bit denominato logDestinations.conf con le definizioni \OUTPUT] che preferisci. Ad esempio, il seguente file di configurazione include le configurazioni definite per CloudWatch, Amazon Data Firehose e Splunk. La direttiva Match indirizza i dati. Quando Amazon ECS compila la configurazione di Fluent Bit, etichetta i flussi di input con un nome generato automaticamente preceduto dal nome del container. Nell'esempio è utilizzato il prefisso service:
[OUTPUT] Name firehose Match service* region us-west-2 delivery_stream nginx-stream [OUTPUT] Name cloudwatch Match service* region us-east-1 log_group_name firelens-nginx-container log_stream_prefix from-fluent-bit auto_create_group true [OUTPUT] Name splunk Match service* Host 127.0.0.1 Splunk_Token xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx Splunk_Send_Raw On
Nota: destinazioni diverse richiedono la specificazione di campi diversi nella definizione**[OUTPUT]**. Per esempi, consulta amazon-ecs-firelens-examples sul sito web GitHub.
Per caricare questo file in un bucket Amazon S3 di cui hai il controllo, esegui il comando AWS CLI cp:
aws s3 cp logDestinations.conf s3://example-bucket/logDestinations.conf
Crea autorizzazioni IAM
Crea autorizzazioni AWS Identity and Access Management (AWS IAM) per consentire al ruolo dell'attività di acquisire il file di configurazione S3. Consenti al ruolo dell'attività di indirizzare i log a destinazioni diverse. Ad esempio, se la destinazione è Amazon Data Firehose, devi autorizzare l'attività a chiamare l'API firehose:PutRecordBatch.
Nota: Fluent Bit supporta i plugin come destinazioni di log. Destinazioni come CloudWatch e Kinesis richiedono autorizzazioni come logs:CreateLogGroup, logs:CreateLogStream, logs:DescribeLogStreams, logs:PutLogEvents e kinesis:PutRecords. Per ulteriori informazioni, consulta le autorizzazioni per CloudWatch e Kinesis sul sito web GitHub.
Nell'esempio di policy IAM, il ruolo dell'attività fornisce a s3:GetObject l'accesso al file di configurazione. È consigliabile concedere all'attività le autorizzazioni necessarie per registrare l'output dell'attività in un altro gruppo di log di CloudWatch.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ConfigurationFileAccess", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::example-bucket/logDestinations.conf" }, { "Sid": "CloudWatchLogGroupPermissions", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream" ], "Effect": "Allow", "Resource": "arn:aws:logs:us-east-1:555555555555:log-group:firelens-log-router" }, { "Sid": "CloudWatchLogStreamPermissions", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Effect": "Allow", "Resource": "arn:aws:logs:us-east-1:555555555555:log-group:firelens-log-router:log-stream:*" } ] }
Nota: per ulteriori informazioni sulla creazione di un ruolo IAM per un'attività e sulle autorizzazioni richieste, consulta Ruolo IAM di esecuzione di attività Amazon ECS.
L'esempio di ruolo IAM dell'attività concede le autorizzazioni richieste per i driver CloudWatch e Amazon Data Firehose utilizzati nell'esempio di destinazione:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DataFirehosePermissions", "Action": [ "firehose:PutRecordBatch" ], "Effect": "Allow", "Resource": "arn:aws:firehose:us-west-2:555555555555:deliverystream/nginx-stream" }, { "Sid": "CloudWatchLogGroupPermissions", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream" ], "Effect": "Allow", "Resource": "arn:aws:logs:us-east-1:555555555555:log-group:firelens-nginx-container" }, { "Sid": "CloudWatchLogStreamPermissions", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Effect": "Allow", "Resource": "arn:aws:logs:us-east-1:555555555555:log-group:firelens-nginx-container:log-stream:*" } ] }
Crea la definizione dell'attività
Nella definizione dell'attività, includi un container essenziale aggiuntivo utilizzando AWS per immagini Fluent Bit. L'esempio esegue il container nginx ufficiale. Utilizza AWS CLI o la console Amazon ECS per creare una definizione dell'attività completa:
{ "family": "firelens-example-task", "taskRoleArn": "arn:aws:iam::012345678901:role/exampleTaskRole", "taskExecutionRoleArn": "arn:aws:iam::444455556666:role/exampleTaskExecutionRole", "networkMode": "awsvpc", "requiresCompatibilities": ["FARGATE"], "cpu": "256", "memory": "512", "containerDefinitions": [ { "essential": true, "image": "public.ecr.aws/docker/library/nginx:latest", "name": "service_web_app", "logConfiguration": { "logDriver": "awsfirelens" } }, { "essential": true, "image": "public.ecr.aws/aws-observability/aws-for-fluent-bit:stable", "name": "log_router", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "firelens-log-router", "awslogs-region": "us-east-1", "awslogs-create-group": "true", "awslogs-stream-prefix": "firelens-router-logs" } }, "firelensConfiguration": { "type": "fluentbit", "options": { "config-file-type": "s3", "config-file-value": "arn:aws:s3:::example-bucket/logDestinations.conf" } } } ] }
Nota: per risolvere i problemi, l'esempio di configurazione indirizza l'output del container Fluent Bit a un altro gruppo di log di CloudWatch con un prefisso diverso.
- Argomenti
- Containers
- Lingua
- Italiano
