

# Logs de acesso do Amazon ECS Service Connect
<a name="service-connect-envoy-access-logs"></a>

O Amazon ECS Service Connect oferece suporte a logs de acesso para fornecer telemetria detalhada sobre solicitações individuais processadas pelo proxy do Service Connect. Os logs de acesso complementam os logs existentes da aplicação, capturando metadados de tráfego por solicitação, como métodos HTTP, caminhos, códigos de resposta, flags e informações de tempo. Isso permite a observabilidade mais profunda dos padrões de tráfego da solicitação e das interações de serviço para solução de problemas e monitoramento eficazes.

Para habilitar os logs de acesso, especifique os objetos `logConfiguration` e `accessLogConfiguration` no objeto `serviceConnectConfiguration`. Você pode configurar o formato dos logs e se eles devem incluir parâmetros de consulta no `accessLogConfiguration`. Os logs são entregues ao grupo de logs de destino pelo driver de log especificado no `logConfiguration`.

```
{
    "serviceConnectConfiguration": {
        "enabled": true,
        "namespace": "myapp.namespace",
        "services": [
            ...
        ],
        "logConfiguration": {
            "logDriver": "awslogs",
            "options": {
                "awslogs-group": "my-envoy-log-group",
                "awslogs-region": "us-west-2",
                "awslogs-stream-prefix": "myapp-envoy-logs"
            }
        },
         "accessLogConfiguration": {
            "format": "TEXT",
            "includeQueryParameters": "ENABLED" 
        }
    }
}
```

## Considerações
<a name="service-connect-envoy-access-logs-considerations"></a>

Considere o seguinte ao habilitar o acesso aos logs de acesso:
+ Os logs de acesso e da aplicação são gravados em `/dev/stdout`. Para separar os logs de acesso dos logs da aplicação, recomendamos usar o driver de log `awsfirelens` com uma configuração Fluent Bit ou Fluentd personalizada.
+  Recomendamos usar o driver de log `awslogs` para enviar logs da aplicação e de acesso para o mesmo destino do CloudWatch.
+ os logs de acesso são aceitos nos serviços do Fargate que usam a versão da plataforma `1.4.0` e superior.
+ Os parâmetros de consulta, como ids e tokens de solicitação, são excluídos dos logs de acesso por padrão. Para incluir parâmetros de consulta nos logs de acesso, defina `includeQueryParameters` como `"ENABLED"`.

## Formatos de log de acesso
<a name="service-connect-envoy-access-logs-formats"></a>

os logs de acesso podem ser formatados em dicionários no formato JSON ou em cadeias de caracteres no formato de texto, com diferenças nos operadores de comando compatíveis para diferentes tipos de logs de acesso.

### Logs de acesso HTTP
<a name="service-connect-envoy-access-logs-formats-http"></a>

Os seguintes operadores de comando são incluídos por padrão para logs HTTP:

------
#### [ Text ]

```
[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%"
%RESPONSE_CODE% %BYTES_RECEIVED% %BYTES_SENT% %DURATION%
%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-FORWARDED-FOR)%" "%REQ(USER-AGENT)%"
"%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%"\n
```

------
#### [ JSON ]

```
{
  "start_time": "%START_TIME%",
  "method": "%REQ(:METHOD)%",
  "path": "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%",
  "protocol": "%PROTOCOL%",
  "response_code": "%RESPONSE_CODE%",
  "bytes_received": "%BYTES_RECEIVED%",
  "bytes_sent": "%BYTES_SENT%",
  "duration_ms": "%DURATION%",
  "upstream_service_time": "%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%",
  "forwarded_for": "%REQ(X-FORWARDED-FOR)%",
  "user_agent": "%REQ(USER-AGENT)%",
  "request_id": "%REQ(X-REQUEST-ID)%",
  "authority": "%REQ(:AUTHORITY)%",
  "upstream_host": "%UPSTREAM_HOST%"
}
```

------

### Logs de acesso HTTP2
<a name="service-connect-envoy-access-logs-formats-http2"></a>

Além dos operadores de comando incluídos para logs HTTP, os logs HTTP2 incluem o operador `%STREAM_ID%` por padrão.

------
#### [ Text ]

```
[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%"
%RESPONSE_CODE% %BYTES_RECEIVED% %BYTES_SENT% %DURATION%
%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-FORWARDED-FOR)%" "%REQ(USER-AGENT)%"
"%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%" "%STREAM_ID%"\n
```

------
#### [ JSON ]

```
{
  "start_time": "%START_TIME%",
  "method": "%REQ(:METHOD)%",
  "path": "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%",
  "protocol": "%PROTOCOL%",
  "response_code": "%RESPONSE_CODE%",
  "bytes_received": "%BYTES_RECEIVED%",
  "bytes_sent": "%BYTES_SENT%",
  "duration": "%DURATION%",
  "upstream_service_time": "%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%",
  "forwarded_for": "%REQ(X-FORWARDED-FOR)%",
  "user_agent": "%REQ(USER-AGENT)%",
  "request_id": "%REQ(X-REQUEST-ID)%",
  "authority": "%REQ(:AUTHORITY)%",
  "upstream_host": "%UPSTREAM_HOST%",
  "stream_id": "%STREAM_ID%"
}
```

------

### Logs de acesso gRPC
<a name="service-connect-envoy-access-logs-formats-grpc"></a>

Além dos operadores de comando incluídos para logs HTTP, os logs de acesso gRPC incluem os operadores `%STREAM_ID%` e `%GRPC_STATUS()%` por padrão.

------
#### [ Text ]

```
[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%"
%RESPONSE_CODE% %GRPC_STATUS()% %BYTES_RECEIVED% %BYTES_SENT% %DURATION%
%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-FORWARDED-FOR)%" "%REQ(USER-AGENT)%"
"%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%" "%STREAM_ID%"\n
```

------
#### [ JSON ]

```
{
  "start_time": "%START_TIME%",
  "method": "%REQ(:METHOD)%",
  "path": "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%",
  "protocol": "%PROTOCOL%",
  "response_code": "%RESPONSE_CODE%",
  "grpc_status": "%GRPC_STATUS()%",
  "bytes_received": "%BYTES_RECEIVED%",
  "bytes_sent": "%BYTES_SENT%",
  "duration": "%DURATION%",
  "upstream_service_time": "%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%",
  "forwarded_for": "%REQ(X-FORWARDED-FOR)%",
  "user_agent": "%REQ(USER-AGENT)%",
  "request_id": "%REQ(X-REQUEST-ID)%",
  "authority": "%REQ(:AUTHORITY)%",
  "upstream_host": "%UPSTREAM_HOST%",
  "stream_id": "%STREAM_ID%"
}
```

------

### Logs de acesso TCP
<a name="service-connect-envoy-access-logs-formats-tcp"></a>

Os seguintes operadores de comando são incluídos por padrão nos logs de acesso TCP:

------
#### [ Text ]

```
[%START_TIME%] %DOWNSTREAM_REMOTE_ADDRESS% %DOWNSTREAM_REMOTE_PORT% 
%BYTES_RECEIVED% %BYTES_SENT% %DURATION%  
%CONNECTION_TERMINATION_DETAILS% %CONNECTION_ID%\n
```

------
#### [ JSON ]

```
{
  "start_time": "%START_TIME%",
  "downstream_remote_address": "%DOWNSTREAM_REMOTE_ADDRESS%",
  "downstream_remote_port": "%DOWNSTREAM_REMOTE_PORT%",s
  "bytes_received": "%BYTES_RECEIVED%",
  "bytes_sent": "%BYTES_SENT%",
  "duration": "%DURATION%",
  "connection_termination_details": "%CONNECTION_TERMINATION_DETAILS%",
  "connection_id": %CONNECTION_ID%
}
```

------

Para obter mais informações sobre esses operadores de comando, consulte [Operadores de comando](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators) na documentação do Envoy.

# Habilitar logs de acesso para o Amazon ECS Service Connect
<a name="service-connect-access-logs-configuration"></a>

Os logs de acesso não são habilitados por padrão para os serviços do Amazon ECS que usam o Service Connect. Você pode habilitar os logs de acesso das seguintes maneiras:

## Habilitar os logs de acesso usando a AWS CLI
<a name="service-connect-access-logs-configure-cli"></a>

O comando a seguir mostra como você pode habilitar os logs de acesso para um serviço do Amazon ECS usando a AWS CLI especificando um `accessLogConfiguration` ao criar o serviço:

```
aws ecs create-service \
    --cluster my-cluster \
    --service-name my-service \
    --task-definition my-task-def \
    --service-connect-configuration '{
        "enabled": true,
        "namespace": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-abcdef1234567890",
        "services": [{
            "portName": "web",
            "discoveryName": "my-service",
            "clientAliases": [{
                "port": 80,
                "dnsName": "my-service"
            }]
        }],
        "logConfiguration": {
            "logDriver": "awslogs",
            "options": {
                "awslogs-group": "my-envoy-log-group",
                "awslogs-region": "us-west-2",
                "awslogs-stream-prefix": "myapp-envoy-logs"
            }
        },
         "accessLogConfiguration": {
            "format": "TEXT",
            "includeQueryParameters": "ENABLED" 
        }
    }'
```

## Habilitar os logs de acesso usando o console
<a name="service-connect-access-logs-configure-console"></a>

Para obter um procedimento detalhado de criação de serviço, consulte [Criação de uma implantação de atualização contínua do Amazon ECS](create-service-console-v2.md).

**Para criar um serviço com um namespace compartilhado usando o Console de gerenciamento da AWS**

1. Abra o console em [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. Na página **Clusters**, selecione o cluster no qual deseja criar o serviço.

1. Em **Serviços**, escolha **Criar**.

1. Depois de preencher outros detalhes, dependendo da sua workload, na seção **Service Connect**, escolha **Usar Service Connect**.

1. Defina as configurações do Service Connect conforme necessário para seu tipo de serviço (cliente ou cliente/servidor).

1. Expanda **Configuração do log de acesso**. Em **Formato**, escolha **JSON** ou `TEXT`.

1. Para incluir parâmetros de consulta nos logs de acesso, selecione **Incluir parâmetros de consulta**.

1. Conclua o processo de criação de serviço.