As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Tutorial: implantar o Fluent Bit no Amazon ECS para contêineres do Windows
O Fluent Bit é um processador e roteador de logs rápido e flexível compatível com vários sistemas operacionais. Ele pode ser usado para rotear registros para vários AWS destinos, como Amazon CloudWatch Logs, Kinesis Data Firehose, Amazon S3 e Amazon Service. OpenSearch O Fluent Bit é compatível com soluções comuns de parceiros, como Datadog
O AWS para Fluent Bit está disponível no Amazon ECR na Galeria Pública do Amazon ECR e em um repositório do Amazon ECR na maioria das regiões para alta disponibilidade. Para obter mais informações, consulte aws-for-fluent-bit
Este tutorial explica como implantar contêineres do Fluent Bit em suas instâncias do Windows executadas no Amazon ECS para transmitir os logs gerados pelas tarefas do Windows para a Amazon CloudWatch para fins de registro centralizado.
Este tutorial usa a seguinte abordagem:
-
O Fluent Bit é executado como um serviço com a estratégia de programação do Daemon. Essa estratégia garante que uma única instância do Fluent Bit sempre seja executada nas instâncias de contêiner no cluster.
-
Recebe na porta 24224 usando o plug-in de entrada de encaminhamento.
-
Exponha a porta 24224 ao host para que o tempo de execução do docker possa enviar logs para o Fluent Bit usando essa porta exposta.
-
Tem uma configuração que permite que o Fluent Bit envie os registros de logs para destinos especificados.
-
Inicie todos os outros contêineres de tarefas do Amazon ECS usando o driver de log fluentd. Para obter mais informações, consulte Fluentd logging driver
(Driver de log do Fluentd) no site de documentação do Docker. -
O Docker se conecta ao soquete TCP 24224 no localhost dentro do namespace do host.
-
O agente do Amazon ECS adiciona rótulos aos contêineres, incluindo o nome do cluster, o nome da família da definição de tarefa, o número da revisão da definição de tarefa, o ARN da tarefa e o nome do contêiner. As mesmas informações são adicionadas ao registro de logs usando a opção labels (rótulos) do driver de logs do docker fluentd. Para obter mais informações, consulte labels, labels-regex, env e env-regex
no site de documentação do Docker. -
Como a opção
async
do driver de logs fluentd está definida comotrue
, quando o contêiner do Fluent Bit é reiniciado, o docker armazena os logs em buffer até que o contêiner do Fluent Bit seja reiniciado. Você pode aumentar o limite do buffer definindo a fluentd-buffer-limit opção. Para obter mais informações, consulte o fluentd-buffer-limitsite de documentação do Docker.
-
O fluxo de trabalho é o seguinte:
-
O contêiner do Fluent Bit inicia e recebe na porta 24224, que está exposta ao host.
-
O Fluent Bit usa as credenciais do perfil do IAM da tarefa especificadas na definição da tarefa.
-
Outras tarefas iniciadas na mesma instância usam o driver de logs do docker do fluentd para se conectar ao contêiner do Fluent Bit na porta 24224.
-
Quando os contêineres da aplicação geram logs, o tempo de execução do docker marca esses registros, adiciona metadados especificados nos rótulos e os encaminha pela porta 24224 no namespace do host.
-
O Fluent Bit recebe o registro de log na porta 24224 porque ela está exposta ao namespace do host.
-
O Fluent Bit executa seu processamento interno e roteia os logs, conforme especificado.
Este tutorial usa a configuração padrão do CloudWatch Fluent Bit, que faz o seguinte:
-
Cria um novo grupo de logs para cada cluster e família de definição de tarefa.
-
Cria um novo fluxo de logs para cada contêiner de tarefas no grupo de logs gerado acima sempre que uma nova tarefa é iniciada. Cada fluxo será marcado com o ID da tarefa à qual o contêiner pertence.
-
Adiciona metadados, incluindo o nome do cluster, o ARN da tarefa, o nome do contêiner da tarefa, a família de definição de tarefa e o número da revisão da definição de tarefa em cada entrada de log.
Por exemplo, se você tiver
task_1
comcontainer_1
container_2
e task_2
comcontainer_3
, a seguir estão os fluxos de CloudWatch log:/aws/ecs/windows.ecs_task_1
task-out.
TASK_ID
.container_1task-out.
TASK_ID
.container_2/aws/ecs/windows.ecs_task_2
task-out.
TASK_ID
.container_3
Etapas
- Pré-requisitos
- Etapa 1: criar os perfis de acesso do IAM
- Etapa 2: criar uma instância de contêiner do Windows do Amazon ECS
- Etapa 3: configurar o Fluent Bit
- Etapa 4: Registrar uma definição de tarefa do Windows Fluent Bit que roteia os registros para CloudWatch
- Etapa 5: executar a definição de tarefa ecs-windows-fluent-bit como um serviço do Amazon ECS usando a estratégia de programação do daemon
- Etapa 6: registrar uma definição de tarefa do Windows que gere os logs
- Etapa 7: executar a definição de tarefa windows-app-task
- Etapa 8: Verificar os logons CloudWatch
- Etapa 9: Limpar
Pré-requisitos
Este tutorial pressupõe que os seguintes pré-requisitos foram concluídos:
-
A versão mais recente da AWS CLI está instalada e configurada. Para obter mais informações, consulte Instalar a AWS Command Line Interface.
-
A imagem do contêiner
aws-for-fluent-bit
está disponível para os seguintes sistemas operacionais Windows:-
Windows Server 2019 Core
-
Windows Server 2019 Full
-
Windows Server 2022 Core
-
Windows Server 2022 Full
-
-
As etapas em Configuração para usar o Amazon ECS foram concluídas.
-
Você tem um cluster. Neste tutorial, o nome do cluster é FluentBit-cluster.
-
Você tem uma VPC com uma sub-rede pública em que a instância do EC2 será iniciada. Você pode usar a VPC padrão. Você também pode usar uma sub-rede privada que permite que os CloudWatch endpoints da Amazon acessem a sub-rede. Para obter mais informações sobre CloudWatch endpoints da Amazon, consulte CloudWatch endpoints e cotas da Amazon no. Referência geral da AWS Para obter mais informações sobre como usar o assistente da Amazon VPC para criar uma VPC, consulte Criar uma nuvem privada virtual.
Etapa 1: criar os perfis de acesso do IAM
Crie os perfis do IAM do Amazon ECS.
-
Crie a função de instância de contêiner do Amazon ECS chamada "ecsInstanceRole”. Para obter mais informações, consulte Perfil do IAM de instância de contêiner do Amazon ECS.
-
Crie um perfil do IAM para a tarefa do Fluent Bit denominada
fluentTaskRole
. Para obter mais informações, consulte Função do IAM de tarefa.As permissões do IAM concedidas no perfil do IAM são assumidas pelos contêineres das tarefas. Para permitir que o Fluent Bit envie registros para CloudWatch, você precisa anexar as seguintes permissões à função do IAM da tarefa.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:DescribeLogStreams", "logs:PutLogEvents" ], "Resource": "*" } ] }
-
Anexe a política à função.
-
Salve o conteúdo acima em um arquivo denominado
fluent-bit-policy.json
. -
Execute o comando a seguir para anexar a política em linha ao perfil
fluentTaskRole
do IAM.aws iam put-role-policy --role-name fluentTaskRole --policy-name fluentTaskPolicy --policy-document file://fluent-bit-policy.json
-
Etapa 2: criar uma instância de contêiner do Windows do Amazon ECS
Crie uma instância de contêiner do Windows do Amazon ECS.
Para criar uma instância do Amazon ECS
-
Use o comando
aws ssm get-parameters
para recuperar o ID da AMI para a região que hospeda sua VPC. Para obter mais informações, consulte Recuperar os metadados da AMI otimizada para Amazon ECS. -
Use o console do Amazon EC2 para iniciar a instância.
Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/
. -
Na barra de navegação, selecione a região a ser usada.
-
No Painel do EC2, escolha Launch Instance (Iniciar instância).
-
Em Name (Nome), insira um nome exclusivo.
-
Em Application and OS Images (Amazon Machine Image) (Imagens de aplicações e SO [Amazon Machine Image]), escolha a AMI que você recuperou na primeira etapa.
-
Em Instance type (Tipo de instância), escolha
t3.xlarge
. -
Em Key pair (login) (Par de chaves [login]), escolha um par de chaves.
-
Em Network settings (Configurações de rede), em Security group (Grupo de segurança), selecione um grupo de segurança existente ou crie outro.
-
Em Network settings (Configurações de rede), em Auto-assign Public IPC (Atribuir IP público automaticamente), selecione Enable (Habilitar).
-
Em Detalhes avançados, para o perfil da instância do IAM, escolha ecsInstanceRole.
-
Configure a instância de contêiner do Amazon ECS com os dados de usuário a seguir. Em Advanced Details (Detalhes avançados), cole o seguinte script no campo User data (Dados do usuário), substituindo
cluster_name
pelo nome do cluster.<powershell> Import-Module ECSTools Initialize-ECSAgent -Cluster
cluster-name
-EnableTaskENI -EnableTaskIAMRole -LoggingDrivers '["awslogs","fluentd"]' </powershell> -
Quando estiver pronto, selecione o campo de confirmação e, então, escolha Launch Instances.
-
Uma página de confirmação informa que sua instância está sendo executada. Selecione Visualizar instâncias para fechar a página de confirmação e voltar ao console.
Etapa 3: configurar o Fluent Bit
Você pode usar a seguinte configuração padrão fornecida pela AWS para começar rapidamente:
-
Amazon CloudWatch
, que é baseado no plug-in Fluent Bit para Amazon CloudWatch no Manual Oficial do Fluent Bit.
Como alternativa, é possível usar outras configurações padrão fornecidas pela AWS. Para obter mais informações, consulte Overriding the entrypoint for the Windows imageaws-for-fluent-bit
do Github.
A configuração padrão do Amazon CloudWatch Fluent Bit é mostrada abaixo.
Substitua as seguintes variáveis:
-
região
com a região para a qual você deseja enviar os CloudWatch registros da 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
Cada log que entra no Fluent Bit tem uma tag que você especifica ou é gerada automaticamente quando você não fornece uma. As tags podem ser usadas para rotear diferentes logs para destinos diferentes. Para obter informações adicionais, consulte Tag
A configuração do Fluent Bit descrita acima tem as seguintes propriedades:
-
O plug-in de entrada de encaminhamento recebe o tráfego de entrada na porta TCP 24224.
-
Cada entrada de log recebida nessa porta tem uma tag que o plug-in de entrada de encaminhamento modifica para prefixar o registro com a string
ecs.
. -
O pipeline interno do Fluent Bit roteia a entrada de log para modificar o filtro usando o regex Match (Corresponder). Esse filtro substitui as chaves no registro de log JSON pelo formato que o Fluent Bit pode consumir.
-
A entrada de log modificada é consumida pelo filtro rewrite_tag. Esse filtro altera a tag do registro de log para o formato out.
TASK_ID
.CONTAINER_NAME
. -
A nova tag será roteada para o plug-in cloudwatch_logs de saída, que cria os grupos e fluxos de log conforme descrito anteriormente usando as opções e do
log_group_template
plug-in de saída.log_stream_prefix
CloudWatch Para obter informações adicionais, consulte Configuration parameters(Parâmetros de configuração) no Manual oficial do Fluent Bit.
Etapa 4: Registrar uma definição de tarefa do Windows Fluent Bit que roteia os registros para CloudWatch
Registre uma definição de tarefa do Windows Fluent Bit que roteia os registros para o. CloudWatch
nota
Essa definição de tarefa expõe a porta 24224 do contêiner do Fluent Bit para a porta 24224 do host. Verifique se essa porta não está aberta em seu grupo de segurança de instâncias do EC2 para impedir o acesso externo.
Para registrar uma definição de tarefa
-
Crie um arquivo denominado
fluent-bit.json
com o seguinte conteúdo:Substitua as seguintes variáveis:
-
task-iam-role
com o Amazon Resource Name (ARN) da função IAM da sua tarefa -
region
(região) pela região em que a tarefa é executada
{ "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" } -
-
Use o comando a seguir para registrar a definição de tarefa.
aws ecs register-task-definition --cli-input-json
file://fluent-bit.json
--regionregion
Você pode listar as definições de tarefa para a conta executando o comando
list-task-definitions
. A saída exibe os valores da família e da revisão que você pode usar comrun-task
oustart-task
.
Etapa 5: executar a definição de tarefa ecs-windows-fluent-bit
como um serviço do Amazon ECS usando a estratégia de programação do daemon
Depois de registrar uma definição de tarefa para sua conta, você poderá executar uma tarefa no cluster. Para este tutorial, você executa uma única instância da definição de tarefa ecs-windows-fluent-bit:1
no cluster FluentBit-cluster
. Execute a tarefa em um serviço que use a estratégia de programação do daemon, o que garante que uma única instância do Fluent Bit sempre seja executada em cada instância de contêiner.
Para executar uma tarefa
-
Execute o comando a seguir para iniciar a definição de tarefa
ecs-windows-fluent-bit:1
(registrada na etapa anterior) como um serviço.nota
Essa definição de tarefa usa o driver de log
awslogs
. Sua instância de contêiner precisa ter as permissões necessárias.Substitua as seguintes variáveis:
-
region
(região) pela região em que o serviço é executado
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
-
-
Execute o comando a seguir para listar as tarefas.
Substitua as seguintes variáveis:
-
region
(região) pela região em que as tarefas de serviço são executadas
aws ecs list-tasks --cluster
--regionFluentBit-cluster
region
-
Etapa 6: registrar uma definição de tarefa do Windows que gere os logs
Registre uma definição de tarefa do Windows que gere os logs. Essa definição de tarefa implanta uma imagem de contêiner do Windows que gravará um número incremental no stdout
a cada segundo.
A definição de tarefa usa o driver de log fluentd que se conecta à porta 24224 que o plug-in do Fluent Bit recebe. O agente do Amazon ECS rotula cada contêiner do Amazon ECS com tags, incluindo o nome do cluster, o ARN da tarefa, o nome da família da definição de tarefa, o número da revisão da definição de tarefa e o nome do contêiner da tarefa. Esses rótulos de valores-chave são passados para o Fluent Bit.
nota
Essa tarefa usa o modo de rede default
. Entretanto, também é possível usar o modo de rede awsvpc
com a tarefa.
Para registrar uma definição de tarefa
-
Crie um arquivo denominado
windows-app-task.json
com o seguinte conteúdo:{ "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" }
-
Use o comando a seguir para registrar a definição de tarefa.
Substitua as seguintes variáveis:
-
region
(região) pela região em que a tarefa é executada
aws ecs register-task-definition --cli-input-json
file://windows-app-task.json
--regionregion
Você pode listar as definições de tarefa para a conta executando o comando
list-task-definitions
. A saída exibe os valores da família e da revisão que você pode usar comrun-task
oustart-task
. -
Etapa 7: executar a definição de tarefa windows-app-task
Depois de registrar a definição de tarefa windows-app-task
, execute-a no cluster FluentBit-cluster
.
Para executar uma tarefa
-
Execute a definição de tarefa
windows-app-task:1
que você registrou na etapa anterior.Substitua as seguintes variáveis:
-
region
(região) pela região em que a tarefa é executada
aws ecs run-task --cluster FluentBit-cluster --task-definition windows-app-task:1 --count 2 --region
region
-
-
Execute o comando a seguir para listar as tarefas.
aws ecs list-tasks --cluster
FluentBit-cluster
Etapa 8: Verificar os logons CloudWatch
Para verificar sua configuração do Fluent Bit, verifique os seguintes grupos de registros no CloudWatch console:
-
/ecs/fluent-bit-logs
: este é o grupo de logs que corresponde ao contêiner do daemon do Fluent Bit que está sendo executado na instância de contêiner. -
/aws/ecs/FluentBit-cluster.windows-app-task
: este é o grupo de logs que corresponde a todas as tarefas iniciadas para a família de definição de tarefawindows-app-task
dentro do clusterFluentBit-cluster
.task-out.
: este fluxo de logs contém todos os logs gerados pela primeira instância da tarefa no contêiner de tarefas do contêiner de amostra.FIRST_TASK_ID
.sample-containertask-out.
: este fluxo de logs contém todos os logs gerados pela segunda instância da tarefa no contêiner de tarefas do contêiner de amostra.SECOND_TASK_ID
.sample-container
O fluxo de logs task-out.
tem campos semelhantes aos seguintes:TASK_ID
.sample-container
{
"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"
}
Para verificar a configuração do Fluent Bit
Abra o CloudWatch console em https://console.aws.amazon.com/cloudwatch/
. -
No painel de navegação, escolha Log groups(Grupos de logs). Certifique-se de que você esteja na região em que implantou o Fluent Bit para seus contêineres.
Na lista de grupos de log na Região da AWS, você deve ver o seguinte:
-
/ecs/fluent-bit-logs
-
/aws/ecs/FluentBit-cluster.windows-app-task
Caso você veja esses grupos de logs, a configuração do Fluent Bit estará verificada.
-
Etapa 9: Limpar
Ao concluir este tutorial, limpe os recursos associados a ele para evitar cobranças por recursos que você não está usando.
Para limpar os recursos do tutorial
-
Interrompa as tarefas
windows-simple-task
eecs-fluent-bit
. Para obter mais informações, consulte Interrompendo tarefas usando o console. -
Execute o comando a seguir para excluir o grupo de logs
/ecs/fluent-bit-logs
. Para obter mais informações, sobre a exclusão de grupos de registros, consulte delete-log-groupa AWS Command Line InterfaceReferência.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
-
Execute o comando a seguir para encerrar a instância.
aws ec2 terminate-instances --instance-ids
instance-id
-
Execute o comando a seguir para excluir os perfis do IAM.
aws iam delete-role --role-name ecsInstanceRole aws iam delete-role --role-name fluentTaskRole
-
Execute o comando a seguir para excluir o cluster do Amazon ECS.
aws ecs delete-cluster --cluster
FluentBit-cluster