

# Exemplo de definição de tarefa do Amazon ECS: rotear logs para o FireLens
<a name="firelens-taskdef"></a>

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 Console de gerenciamento da AWS, há uma seção de integração do FireLens que facilita a adição de um contêiner de roteador de log. Para obter mais informações, consulte [Criar uma definição de tarefa do Amazon ECS usando o console](create-task-definition.md).

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](https://github.com/aws-samples/amazon-ecs-firelens-examples) no GitHub.

```
{
  "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:3",
            "cpu": 0,
            "memoryReservation": 51,
            "portMappings": [],
            "essential": true,
            "environment": [],
            "mountPoints": [],
            "volumesFrom": [],
            "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": "public.ecr.aws/docker/library/httpd:latest",
      "name": "app",
      "logConfiguration": {
        "logDriver": "awsfirelens",
        "options": {
          "Name": "firehose",
          "region": "us-west-2",
          "delivery_stream": "my-stream",
          "log-driver-buffer-limit": "1048576"
        }
      },
      "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_stream my-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
<a name="firelens-taskdef-customconfig"></a>

É 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](https://docs.fluentd.org/configuration/config-file) e [Configuração YAML](https://docs.fluentbit.io/manual/administration/configuring-fluent-bit/yaml).

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` ou `file`.  
Tarefas hospedadas no AWS Fargate só são compatíveis com o tipo de arquivo de configuração `file`. No entanto, você pode usar arquivos de configuração hospedados no Amazon S3 no AWS Fargate usando o contêiner init do AWS para Fluent Bit. Para obter mais informações, consulte [Processo Init para o Fluent Bit no ECS, suporte para várias configurações](https://github.com/aws/aws-for-fluent-bit/blob/mainline/use_cases/init-process-for-fluent-bit/README.md), no GitHub.

`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ção `file` 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.  
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:3",
      "name": "log_router",
      "firelensConfiguration": {
        "type": "fluentbit",
        "options": {
          "config-file-type": "s3 | file",
          "config-file-value": "arn:aws:s3:::amzn-s3-demo-bucket/fluent.conf | filepath"
        }
      }
    }
  ]
}
```

**nota**  
Tarefas hospedadas no AWS Fargate só são compatíveis com o tipo de arquivo de configuração `file`. No entanto, você pode usar arquivos de configuração hospedados no Amazon S3 no AWS Fargate usando o contêiner init do AWS para Fluent Bit. Para obter mais informações, consulte [Processo Init para o Fluent Bit no ECS, suporte para várias configurações](https://github.com/aws/aws-for-fluent-bit/blob/mainline/use_cases/init-process-for-fluent-bit/README.md), no GitHub.