Implementazione di Fluent Bit su container Amazon Windows ECS - Amazon Elastic Container Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Implementazione di Fluent Bit su container Amazon Windows ECS

Fluent Bit è un processore e router di log veloce e flessibile supportato da vari sistemi operativi. Può essere utilizzato per indirizzare i log verso varie AWS destinazioni come Amazon CloudWatch Logs, Firehose Amazon S3 e Amazon Service. OpenSearch Fluent Bit supporta soluzioni partner comuni come Datadog, Splunk e server personalizzati. HTTP Per ulteriori informazioni su Fluent Bit, consulta la Fluent Bit sito web.

L'immagine AWS for Fluent Bit è disponibile ECR su Amazon sia nella galleria ECR pubblica Amazon che in un ECR repository Amazon nella maggior parte delle regioni per la disponibilità elevata. Per ulteriori informazioni, consulta aws-for-fluent-bit sul sito Web. GitHub

Questo tutorial spiega come implementare i container Fluent Bit sulle relative istanze Windows in esecuzione su Amazon ECS per trasmettere i log generati dalle attività di Windows ad Amazon CloudWatch per la registrazione centralizzata.

Questo tutorial utilizza il seguente approccio:

  • Fluent Bit funziona come servizio con la strategia di pianificazione Daemon. Questa strategia garantisce che una singola istanza di Fluent Bit venga sempre eseguita sulle istanze di container del cluster.

    • Ascolta sulla porta 24224 utilizzando il plug-in di input di inoltro.

    • Aprire la porta 24224 all'host in modo che il runtime docker possa inviare i log a Fluent Bit utilizzando tale porta.

    • Ha una configurazione che consente a Fluent Bit di inviare i record dei log alle destinazioni specificate.

  • Avvia tutti gli altri container di ECS attività Amazon utilizzando il driver di registrazione fluentd. Per ulteriori informazioni, consulta Driver di registrazione Fluentd sul sito Web della documentazione Docker.

    • Docker si connette al TCP socket 24224 su localhost all'interno dello spazio dei nomi dell'host.

    • L'ECSagente Amazon aggiunge le etichette ai container che includono il nome del cluster, l'attività, il nome della famiglia della definizione di attività, il numero di revisione della definizione di attività, l'attività ARN e il nome del container della definizione di attività. Le stesse informazioni vengono aggiunte al record di log utilizzando l'opzione labels del driver di registrazione fluentd docker. Per ulteriori informazioni, consulta labels, labels-regex, env ed env-regex sul sito Web contenente la documentazione di Docker.

    • Poiché l'opzione async del driver di registrazione fluentd è impostata su true, quando il container Fluent Bit viene riavviato, docker memorizza i log nel buffer fino al riavvio del container Fluent Bit. Puoi aumentare il limite del buffer impostando l' fluentd-buffer-limitopzione. Per ulteriori informazioni, consulta la sezione fluentd-buffer-limitrelativa alla documentazione Docker.

Di seguito è riportato il flusso di lavoro:

  • Il container di Fluent Bit si avvia e ascolta sulla porta 24224 che è esposta all'host.

  • Fluent Bit utilizza le credenziali del IAM ruolo dell'attività specificate nella definizione di attività.

  • Altre attività avviate sulla stessa istanza utilizzano il driver di registrazione fluentd docker per connettersi al container di Fluent Bit sulla porta 24224.

  • Quando i container dell'applicazione generano log, il runtime docker aggiunge un tag a tali record, aggiunge altri metadati specificati nelle etichette e quindi li inoltra sulla porta 24224 dello spazio dei nomi dell'host.

  • Fluent Bit riceve il record di log sulla porta 24224 perché è esposto allo spazio dei nomi dell'host.

  • Fluent Bit esegue l'elaborazione interna e indirizza i log come specificato.

Questo tutorial utilizza la configurazione predefinita di CloudWatch Fluent Bit che esegue le seguenti operazioni:

  • Crea un nuovo gruppo di log per ogni cluster e famiglia di definizione di attività.

  • Crea un nuovo flusso di log per ogni container di attività nel gruppo di log sopra generato ogni volta che viene avviata una nuova attività. Ogni flusso verrà contrassegnato con l'ID dell'attività a cui appartiene il container.

  • Aggiunge altri metadati tra cui il nome del cluster, l'attivitàARN, il nome del container di attività, la famiglia di definizioni di attività e il numero di revisione della definizione di attività in ogni voce di log.

    Ad esempio, se hai task_1 with container_1 container_2 e t ask_2 withcontainer_3, i seguenti sono i flussi di CloudWatch log:

    • /aws/ecs/windows.ecs_task_1

      task-out.TASK_ID.container_1

      task-out.TASK_ID.container_2

    • /aws/ecs/windows.ecs_task_2

      task-out.TASK_ID.container_3

Prerequisiti

Questo tutorial presuppone che siano stati soddisfatti i prerequisiti seguenti:

  • La versione più recente di AWS CLI è installata e configurata. Per ulteriori informazioni, consulta Installazione o aggiornamento alla versione più recente della AWS CLI.

  • L'immagine del container aws-for-fluent-bit è disponibile per i seguenti sistemi operativi Windows:

    • Windows Server, versione 2019 (Core)

    • Windows Server, versione 2019 (Full)

    • Windows Server 2022 Core

    • Windows Server 2022 Full

  • Hai completato le fasi descritte in Configura per l'uso di Amazon ECS.

  • Hai un cluster. In questo tutorial, il nome del cluster è FluentBit-cluster.

  • Hai una VPC sottorete pubblica in cui verrà avviata l'EC2istanza. È possibile utilizzare l'impostazione predefinitaVPC. Puoi anche utilizzare una sottorete privata che consente agli CloudWatch endpoint Amazon di raggiungere la sottorete. Per ulteriori informazioni sugli CloudWatch endpoint Amazon, consulta la sezione CloudWatch Endpoints e quote Amazon nel. Riferimenti generali di AWS Per informazioni su come utilizzare la VPC procedura guidata di Amazon per creare un fileVPC, consultaCrea un cloud privato virtuale.

Fase 1: creazione dei ruoli di IAM accesso

Crea i ECS IAM ruoli Amazon.

  1. Crea il ruolo dell'istanza del ECS contenitore Amazon denominato "ecsInstanceRole». Per ulteriori informazioni, consulta il IAMruolo dell'istanza del ECS contenitore Amazon.

  2. Creazione di un IAM ruolo per l'attività Fluent Bit denominatafluentTaskRole. Per ulteriori informazioni, consulta IAMRuolo ECS dell'attività Amazon.

    Le IAM autorizzazioni concesse nel IAM ruolo sono assunte dai container delle attività. Per consentire a Fluent Bit di inviare i log a CloudWatch, è necessario collegare le seguenti autorizzazioni al ruolo dell'attività. IAM

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:DescribeLogStreams", "logs:PutLogEvents" ], "Resource": "*" } ] }
  3. Collegare la policy al ruolo.

    1. Salva il contenuto di cui sopra in un file denominato fluent-bit-policy.json.

    2. Per collegare la policy in linea al fluentTaskRole IAM ruolo, eseguire il comando seguente.

      aws iam put-role-policy --role-name fluentTaskRole --policy-name fluentTaskPolicy --policy-document file://fluent-bit-policy.json

Fase 2: Creazione di un'istanza ECS di container Amazon Windows

Creazione di un'istanza di container Amazon ECS Windows

Per creare un'ECSistanza Amazon
  1. Usa il aws ssm get-parameters comando per recuperare l'AMIID della regione che ospita il tuoVPC. Per ulteriori informazioni, consulta Recupero dei metadati ottimizzati per Amazon ECS. AMI

  2. Utilizza la EC2 console di Amazon per avviare l'istanza.

    1. Apri la EC2 console Amazon all'indirizzo https://console.aws.amazon.com/ec2/.

    2. Seleziona la Regione da utilizzare nella barra di navigazione.

    3. Dalla EC2dashboard, scegli Launch instance.

    4. Per Name (Nome), inserisci un nome univoco.

    5. Per Immagini di applicazioni e sistema operativo (Amazon Machine Image), scegliere AMI quella che è stata recuperata nel primo passaggio.

    6. In Instance type (Tipo di istanza) selezionare t3.xlarge.

    7. Per Key pair (login) (Coppia di chiavi [accesso]), scegli una coppia di chiavi.

    8. In Network settings (Impostazioni di rete), per Security group (Gruppo di sicurezza), scegli un gruppo di sicurezza esistente o creane uno nuovo.

    9. In Network settings (Impostazioni di rete), per Auto-assign Public IP (Assegna automaticamente un IP pubblico), seleziona Enable (Abilita).

    10. In Dettagli avanzati, IAMad esempio profilo, scegli ecsInstanceRole.

    11. Configura la tua istanza di ECS container Amazon con i seguenti dati utente. In Dettagli avanzati, incolla il seguente script nel campo Dati utente, sostituendo cluster_name con il nome del cluster.

      <powershell> Import-Module ECSTools Initialize-ECSAgent -Cluster cluster-name -EnableTaskENI -EnableTaskIAMRole -LoggingDrivers '["awslogs","fluentd"]' </powershell>
    12. Quando sei pronto, seleziona il campo di conferma e scegli Launch Instances (Avvia istanze).

    13. Una pagina di conferma indicherà che l'istanza si sta avviando. Scegliere View Instances (Visualizza istanze) per chiudere la pagina di conferma e tornare alla console.

Fase 3: Configurazione di Fluent Bit

Per iniziare rapidamente è possibile utilizzare la seguente configurazione predefinita fornita da AWS :

In alternativa, è possibile utilizzare altre configurazioni predefinite fornite da AWS. Per ulteriori informazioni, consulta Sostituzione del punto di ingresso per l'immagine Windows su aws-for-fluent-bit sul sito Web di Github.

La configurazione predefinita di Amazon CloudWatch Fluent Bit è mostrata di seguito.

Sostituisci le seguenti variabili:

  • region con la regione in cui desideri inviare i file di CloudWatch log Amazon.

[SERVICE] Flush 5 Log_Level info Daemon off [INPUT] Name forward Listen 0.0.0.0 Port 24224 Buffer_Chunk_Size 1M Buffer_Max_Size 6M Tag_Prefix ecs. # Amazon ECS agent adds the following log keys as labels to the docker container. # We would use fluentd logging driver to add these to log record while sending it to Fluent Bit. [FILTER] Name modify Match ecs.* Rename com.amazonaws.ecs.cluster ecs_cluster Rename com.amazonaws.ecs.container-name ecs_container_name Rename com.amazonaws.ecs.task-arn ecs_task_arn Rename com.amazonaws.ecs.task-definition-family ecs_task_definition_family Rename com.amazonaws.ecs.task-definition-version ecs_task_definition_version [FILTER] Name rewrite_tag Match ecs.* Rule $ecs_task_arn ^([a-z-:0-9]+)/([a-zA-Z0-9-_]+)/([a-z0-9]+)$ out.$3.$ecs_container_name false Emitter_Name re_emitted [OUTPUT] Name cloudwatch_logs Match out.* region region log_group_name fallback-group log_group_template /aws/ecs/$ecs_cluster.$ecs_task_definition_family log_stream_prefix task- auto_create_group On

Ogni log che entra in Fluent Bit ha un tag specificato dall'utente o viene generato automaticamente quando non ne viene fornito uno. I tag possono essere utilizzati per indirizzare log diversi verso destinazioni diverse. Per ulteriori informazioni, consulta Tag nel manuale ufficiale di Fluent Bit.

La configurazione di Fluent Bit sopra descritta ha le seguenti proprietà:

  • Il plug-in di input di inoltro ascolta il traffico in entrata sulla TCP porta 24224.

  • Ogni voce di log ricevuta su quella porta ha un tag che il plug-in di input di inoltro modifica per aggiungere una stringa ecs. al record come prefisso.

  • La pipeline interna di Fluent Bit indirizza la voce del log per modificare il filtro utilizzando l'espressione regolare Match. Questo filtro sostituisce le chiavi del record JSON di log nel formato che Fluent Bit può utilizzare.

  • La voce di log modificata viene quindi utilizzata dal filtro rewrite_tag. Questo filtro modifica il tag del record di log nel formato out.TASK_ID.CONTAINER_NAME.

  • Il nuovo tag verrà indirizzato al plug-in di output cloudwatch_logs che crea i gruppi di log e i flussi come descritto in precedenza utilizzando le opzioni e del log_group_template plug-in di output. log_stream_prefix CloudWatch Per ulteriori informazioni, consulta Configuration parameters (Parametri di configurazione) nel manuale ufficiale di Fluent Bit.

Fase 4: Registrazione di una definizione di attività di Windows Fluent Bit che indirizza i log a CloudWatch

Registrazione di una definizione di attività di Windows Fluent Bit a cui indirizza i log. CloudWatch

Nota

Questa definizione di attività espone la porta del container 24224 di Fluent Bit alla porta host 24224. Verifica che questa porta non sia aperta nel gruppo di sicurezza dell'EC2istanza per impedire l'accesso dall'esterno.

Come registrare una definizione di attività
  1. Crea un file denominato fluent-bit.json con i seguenti contenuti.

    Sostituisci le seguenti variabili:

    • task-iam-role con l'Amazon Resource Name (ARN) del tuo IAM ruolo di attività

    • region con la regione in cui viene eseguita l'attività

    { "family": "ecs-windows-fluent-bit", "taskRoleArn": "task-iam-role", "containerDefinitions": [ { "name": "fluent-bit", "image": "public.ecr.aws/aws-observability/aws-for-fluent-bit:windowsservercore-latest", "cpu": 512, "portMappings": [ { "hostPort": 24224, "containerPort": 24224, "protocol": "tcp" } ], "entryPoint": [ "Powershell", "-Command" ], "command": [ "C:\\entrypoint.ps1 -ConfigFile C:\\ecs_windows_forward_daemon\\cloudwatch.conf" ], "environment": [ { "name": "AWS_REGION", "value": "region" } ], "memory": 512, "essential": true, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/fluent-bit-logs", "awslogs-region": "region", "awslogs-stream-prefix": "flb", "awslogs-create-group": "true" } } } ], "memory": "512", "cpu": "512" }
  2. Utilizza il comando seguente per registrare la definizione dell'attività.

    aws ecs register-task-definition --cli-input-json file://fluent-bit.json --region region

    Puoi sempre ottenere un elenco delle definizioni di attività per l'account tramite il comando list-task-definitions. L'output che mostra i valori della famiglia e delle revisioni che è possibile utilizzare insieme a run-task o start-task.

Fase 5: Esecuzione della definizione di ecs-windows-fluent-bit attività come ECS servizio Amazon utilizzando la strategia di pianificazione del daemon

Dopo aver registrato una definizione di attività per l'account, puoi eseguire un'attività nel cluster. Per questo tutorial, esegui una istanza della definizione di attività ecs-windows-fluent-bit:1 nel cluster FluentBit-cluster. Esegui l'attività in un servizio che utilizza la strategia di pianificazione dei daemon, che garantisce che una singola istanza di Fluent Bit venga sempre eseguita su ciascuna delle istanze di container.

Per eseguire un'attività
  1. Esegui il comando seguente per avviare la definizione di attività ecs-windows-fluent-bit:1 (registrata nel passaggio precedente) come servizio.

    Nota

    Questa definizione di attività utilizza il driver di registrazione awslogs; l'istanza di container deve disporre delle autorizzazioni necessarie.

    Sostituisci le seguenti variabili:

    • region con la regione in cui viene eseguito il servizio

    aws ecs create-service \ --cluster FluentBit-cluster \ --service-name FluentBitForwardDaemonService \ --task-definition ecs-windows-fluent-bit:1 \ --launch-type EC2 \ --scheduling-strategy DAEMON \ --region region
  2. Per elencare le attività, esegui il comando riportato.

    Sostituisci le seguenti variabili:

    • region con la regione in cui vengono eseguite le attività di servizio

    aws ecs list-tasks --cluster FluentBit-cluster --region region

Fase 6: Registrazione di una definizione di attività di Windows che genera i log

Registrazione di una definizione di attività di Windows che genera i log Questa definizione di attività implementa l'immagine del container di Windows che scriverà un numero incrementale su stdout ogni secondo.

La definizione di attività utilizza il driver di registrazione fluentd che si collega alla porta 24224 su cui ascolta il plug-in Fluent Bit. L'ECSagente Amazon etichetta ogni ECS container Amazon con tag che includono il nome del cluster, l'attivitàARN, il nome della famiglia della definizione di attività, il numero di revisione della definizione di attività e il nome del container delle attività. Queste etichette chiave-valore vengono passate a Fluent Bit.

Nota

Questa attività utilizza la modalità di rete default. Tuttavia, è anche possibile utilizzare la modalità di rete awsvpc con l'attività.

Come registrare una definizione di attività
  1. Crea un file denominato windows-app-task.json con i seguenti contenuti.

    { "family": "windows-app-task", "containerDefinitions": [ { "name": "sample-container", "image": "mcr.microsoft.com/windows/servercore:ltsc2019", "cpu": 512, "memory": 512, "essential": true, "entryPoint": [ "Powershell", "-Command" ], "command": [ "$count=1;while(1) { Write-Host $count; sleep 1; $count=$count+1;}" ], "logConfiguration": { "logDriver": "fluentd", "options": { "fluentd-address": "localhost:24224", "tag": "{{ index .ContainerLabels \"com.amazonaws.ecs.task-definition-family\" }}", "fluentd-async": "true", "labels": "com.amazonaws.ecs.cluster,com.amazonaws.ecs.container-name,com.amazonaws.ecs.task-arn,com.amazonaws.ecs.task-definition-family,com.amazonaws.ecs.task-definition-version" } } } ], "memory": "512", "cpu": "512" }
  2. Utilizza il comando seguente per registrare la definizione dell'attività.

    Sostituisci le seguenti variabili:

    • region con la regione in cui viene eseguita l'attività

    aws ecs register-task-definition --cli-input-json file://windows-app-task.json --region region

    Puoi sempre ottenere un elenco delle definizioni di attività per l'account tramite il comando list-task-definitions. L'output che mostra i valori della famiglia e delle revisioni che è possibile utilizzare insieme a run-task o start-task.

Fase 7: Esecuzione della definizione di attività windows-app-task

Dopo aver registrato la definizione di attività windows-app-task, eseguila nel cluster FluentBit-cluster.

Per eseguire un'attività
  1. Esegui la definizione di attività windows-app-task:1 registrata nella fase precedente.

    Sostituisci le seguenti variabili:

    • region con la regione in cui viene eseguita l'attività

    aws ecs run-task --cluster FluentBit-cluster --task-definition windows-app-task:1 --count 2 --region region
  2. Per elencare le attività, esegui il comando riportato.

    aws ecs list-tasks --cluster FluentBit-cluster

Fase 8: Verifica dei log CloudWatch

Per verificare la configurazione di Fluent Bit, controlla i seguenti gruppi di log nella CloudWatch console:

  • /ecs/fluent-bit-logs: questo è il gruppo di log che corrisponde al container del daemon Fluent Bit in esecuzione sull'istanza di container.

  • /aws/ecs/FluentBit-cluster.windows-app-task: questo è il gruppo di log che corrisponde a tutte le attività avviate per la famiglia di definizione di attività windows-app-task all'interno del cluster FluentBit-cluster.

    task-out.FIRST_TASK_ID.sample-container: questo flusso di log contiene tutti i log generati dalla prima istanza dell'attività nel container delle attività sample-container.

    task-out.SECOND_TASK_ID.sample-container: questo flusso di log contiene tutti i log generati dalla seconda istanza dell'attività nel container delle attività sample-container.

Il flusso di log task-out.TASK_ID.sample-container ha campi simili ai seguenti:

{ "source": "stdout", "ecs_task_arn": "arn:aws:ecs:region:0123456789012:task/FluentBit-cluster/13EXAMPLE", "container_name": "/ecs-windows-app-task-1-sample-container-cEXAMPLE", "ecs_cluster": "FluentBit-cluster", "ecs_container_name": "sample-container", "ecs_task_definition_version": "1", "container_id": "61f5e6EXAMPLE", "log": "10", "ecs_task_definition_family": "windows-app-task" }
Verifica della configurazione di Fluent Bit
  1. Apri la CloudWatch console all'indirizzo https://console.aws.amazon.com/cloudwatch/.

  2. Nel pannello di navigazione, selezionare Log groups (Gruppi di log). Assicurati di trovarti nella regione in cui è stato implementato Fluent Bit sui container.

    Nell'elenco dei gruppi di log nella Regione AWS, dovrebbe essere visualizzato quanto segue:

    • /ecs/fluent-bit-logs

    • /aws/ecs/FluentBit-cluster.windows-app-task

    Se questi gruppi di log sono visualizzati, la configurazione Fluent Bit è verificata.

Fase 9: Pulizia

Una volta terminato questo tutorial, rimuovi le risorse associate per evitare costi aggiuntivi per risorse che non utilizzi.

Per eliminare le risorse del tutorial
  1. Interrompi l'attività windows-simple-task e l'attività ecs-fluent-bit. Per ulteriori informazioni, consulta Interruzione di un'attività Amazon ECS.

  2. Esegui il comando riportato per eliminare il gruppo di log /ecs/fluent-bit-logs. Per ulteriori informazioni, sull'eliminazione dei gruppi di log, consulta delete-log-groupla sezione AWS Command Line Interface Reference.

    aws logs delete-log-group --log-group-name /ecs/fluent-bit-logs aws logs delete-log-group --log-group-name /aws/ecs/FluentBit-cluster.windows-app-task
  3. Esegui il comando riportato per terminare l'istanza.

    aws ec2 terminate-instances --instance-ids instance-id
  4. Per eliminare i IAM ruoli, eseguire i comandi seguenti.

    aws iam delete-role --role-name ecsInstanceRole aws iam delete-role --role-name fluentTaskRole
  5. Esegui il seguente comando per eliminare il ECS cluster Amazon.

    aws ecs delete-cluster --cluster FluentBit-cluster