Exemplo de definição de tarefa do Amazon ECS: rotear logs para o FireLens
Para usar o roteamento de log personalizado com o FireLens, é necessário especificar o seguinte em sua definição de tarefa:
-
Um contêiner de roteador de log com uma configuração do FireLens. Recomendamos que o contêiner seja marcado como
essential
. -
Um ou mais contêineres de aplicativo que contêm uma configuração de log especificando o driver de log
awsfirelens
. -
Um nome do recurso da Amazon (ARN) de perfil do IAM que contém as permissões necessárias para que a tarefa roteie os logs.
Ao criar uma nova definição de tarefa usando o AWS Management Console, há uma seção de integração do FireLens que facilita a adição de um contêiner de roteador de log. Para ter mais informações, consulte Criar uma definição de tarefa do Amazon ECS usando o console.
O Amazon ECS converte a configuração de log e gera a configuração de saída do Fluentd ou Fluent Bit. A configuração de saída é montada no contêiner de roteamento de log em /fluent-bit/etc/fluent-bit.conf
para o Fluent Bit e /fluentd/etc/fluent.conf
para o Fluentd.
Importante
O FireLens escuta na porta 24224
. Portanto, para garantir que o roteador de log do FireLens não seja acessível fora da tarefa, você não deve permitir tráfego de entrada na porta 24224
no grupo de segurança usado por essa tarefa. Para tarefas que usam o modo de rede awsvpc
, esse é o grupo de segurança associado à tarefa. Para as tarefas que usam o modo de rede host
esse é o grupo de segurança associado à instância do Amazon EC2 que hospeda a tarefa. Para as tarefas que usam o modo de rede bridge
, não crie qualquer mapeamento de porta que use porta 24224
.
Por padrão, o Amazon ECS adiciona campos às entradas de log que ajudam a identificar a fonte dos logs.
-
ecs_cluster
: o nome do cluster do qual a tarefa faz parte. -
ecs_task_arn
: o nome do recurso da Amazon (ARN) da tarefa da qual o contêiner faz parte. -
ecs_task_definition
: o nome da definição de tarefa e a revisão que a tarefa está usando. -
ec2_instance_id
: o ID da instância do Amazon EC2 na qual o contêiner está hospedado. Esse campo só é válido para tarefas que usam o tipo de inicialização do EC2.
Você pode definir os enable-ecs-log-metadata
como false
se não quiser os metadados.
O exemplo de definição de tarefa a seguir define um contêiner de roteador de log que usa o Fluent para encaminhar seus logs para o CloudWatch Logs. Ele também define um contêiner de aplicação que usa uma configuração de log para encaminhar logs ao Amazon Data Firehose e definir a memória usada para eventos de buffer como 2 MiB.
nota
Para obter exemplos de definições de tarefas, consulte Exemplos do FireLens do Amazon ECS
{ "family": "firelens-example-firehose", "taskRoleArn": "arn:aws:iam::123456789012:role/ecs_task_iam_role", "containerDefinitions": [ { "name": "log_router", "image": "public.ecr.aws/aws-observability/aws-for-fluent-bit:stable", "cpu": 0, "memoryReservation": 51, "portMappings": [], "essential": true, "environment": [], "mountPoints": [], "volumesFrom": [], "user": "0", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/ecs-aws-firelens-sidecar-container", "mode": "non-blocking", "awslogs-create-group": "true", "max-buffer-size": "25m", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "firelens" }, "secretOptions": [] }, "systemControls": [], "firelensConfiguration": { "type": "fluentbit" } }, { "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" } }, "memoryReservation": 100 } ] }
Os pares de chave/valor especificados como opções no objeto logConfiguration
são usados para gerar a configuração de saída do Fluentd ou do Fluent Bit. Veja a seguir um exemplo de código de uma definição de saída do Fluent Bit.
[OUTPUT] Name firehose Match app-firelens* region
us-west-2
delivery_streammy-stream
nota
O FireLens gerencia a configuração match
. Você não especifica a configuração match
na definição de tarefa.
Uso de um arquivo de configuração personalizado
É possível especificar um arquivo de configuração personalizado. O formato do arquivo de configuração é o formato nativo do roteador de log que você está usando. Para obter mais informações, consulte Sintaxe do arquivo de configuração do Fluentd
Em seu arquivo de configuração personalizado, para tarefas que usam o modo de rede bridge
ou awsvpc
, não defina uma entrada de encaminhamento do Fluentd ou Fluent Bit por TCP porque o FireLens a adiciona à configuração de entrada.
Sua configuração do FireLens deve conter as seguintes opções para especificar um arquivo de configuração personalizado:
config-file-type
-
O local de origem do arquivo de configuração personalizado. As opções disponíveis são
s3
oufile
.nota
Tarefas hospedadas no AWS Fargate só são compatíveis com o tipo de arquivo de configuração
file
. config-file-value
-
A origem do arquivo de configuração personalizado. Se for usado o tipo de arquivo de configuração
s3
, o valor do arquivo de configuração será o ARN completo do arquivo e do bucket do Amazon S3. Se o tipo de arquivo de configuraçãofile
for usado, o valor do arquivo de configuração será o caminho completo do arquivo de configuração que existe na imagem do contêiner ou em um volume montado no contêiner.Importante
Quando você usa um arquivo de configuração personalizado, precisa especificar um caminho diferente do que o FireLens usa. O Amazon ECS reserva o caminho de arquivo
/fluent-bit/etc/fluent-bit.conf
para o Fluent Bit e/fluentd/etc/fluent.conf
para o Fluentd.
O exemplo a seguir mostra a sintaxe necessária ao especificar uma configuração personalizada.
Importante
Para especificar um arquivo de configuração personalizado hospedado no Amazon S3, verifique se criou uma função do IAM de execução de tarefas com as permissões apropriadas.
Veja a seguir a sintaxe necessária ao especificar uma configuração personalizada.
{ "containerDefinitions": [ { "essential": true, "image": "906394416424.dkr.ecr.
us-west-2
.amazonaws.com/aws-for-fluent-bit:stable", "name": "log_router", "firelensConfiguration": { "type": "fluentbit", "options": { "config-file-type": "s3
|file
", "config-file-value": "arn:aws:s3:::
|amzn-s3-demo-bucket
/fluent.conffilepath
" } } } ] }
nota
Tarefas hospedadas no AWS Fargate só são compatíveis com o tipo de arquivo de configuração file
.