

# Registros de acceso de Amazon ECS Service Connect
<a name="service-connect-envoy-access-logs"></a>

Amazon ECS Service Connect es compatible con los registros de acceso para proporcionar telemetría detallada sobre las solicitudes individuales procesadas por el proxy de Service Connect. Los registros de acceso complementan los registros de aplicaciones existentes al capturar metadatos de tráfico por solicitud, como los métodos HTTP, las rutas, los códigos de respuesta, los indicadores y la información de temporización. Esto brinda una observabilidad más detallada de los patrones de tráfico a nivel de las solicitudes y las interacciones de los servicios para una resolución de problemas y una supervisión eficaces.

Para habilitar los registros de acceso, especifique los objetos `logConfiguration` y `accessLogConfiguration` del objeto `serviceConnectConfiguration`. Puede configurar el formato de los registros y si los registros deben incluir parámetros de consulta en `accessLogConfiguration`. El controlador de registro especificado en `logConfiguration` entrega los registros al grupo de registro de destino.

```
{
    "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" 
        }
    }
}
```

## Consideraciones
<a name="service-connect-envoy-access-logs-considerations"></a>

Tenga en cuenta lo siguiente cuando habilite el acceso a los registros de acceso:
+ Tanto los registros de acceso como los registros de aplicación se escriben en `/dev/stdout`. Para separar los registros de acceso de los registros de aplicación, se recomienda utilizar el controlador de registro `awsfirelens` con una configuración Fluent Bit o Fluentd personalizada.
+  Se recomienda utilizar el controlador de registro `awslogs` para enviar los registros de aplicación y de acceso al mismo destino de CloudWatch.
+ Los registros de acceso son compatibles con los servicios de Fargate que utilizan la versión `1.4.0` y posteriores de la plataforma.
+ De forma predeterminada, los parámetros de consulta, como los ID de solicitud y los tokens, no se incluyen en los registros de acceso. Para incluir los parámetros de consulta en los registros de acceso, establezca `includeQueryParameters` en `"ENABLED"`.

## Formatos de los registro de acceso
<a name="service-connect-envoy-access-logs-formats"></a>

Los registros de acceso se pueden formatear en diccionarios en formato JSON o en cadenas de formato de texto, con diferencias en los operadores de comandos compatibles para los distintos tipos de registros de acceso.

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

Los siguientes operadores de comandos se incluyen de forma predeterminada en los registros 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%"
}
```

------

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

Además de los operadores de comandos incluidos en los registros HTTP, los registros HTTP2 incluyen el operador `%STREAM_ID%` de forma predeterminada.

------
#### [ 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%"
}
```

------

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

Además de los operadores de comandos incluidos en los registros HTTP, los registros de acceso gRPC incluyen los operadores `%STREAM_ID%` y `%GRPC_STATUS()%` de forma predeterminada.

------
#### [ 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%"
}
```

------

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

Los siguientes operadores de comandos se incluyen de forma predeterminada en los registros de acceso 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 obtener más información acerca de estos operadores de comandos, consulte [Command Operators](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators) en la documentación de Envoy.

# Habilitación de registros de acceso para Amazon ECS Service Connect
<a name="service-connect-access-logs-configuration"></a>

Los registros de acceso no están habilitados de forma predeterminada para los servicios de Amazon ECS que utilizan Service Connect. Puede habilitar los registros de acceso de las siguientes formas.

## Habilitación de registros de acceso mediante la AWS CLI
<a name="service-connect-access-logs-configure-cli"></a>

El siguiente comando muestra cómo puede habilitar los registros de acceso para un servicio de Amazon ECS mediante la AWS CLI especificando `accessLogConfiguration` al crear el servicio:

```
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" 
        }
    }'
```

## Habilitación de registro de acceso desde la consola
<a name="service-connect-access-logs-configure-console"></a>

Para ver un procedimiento detallado de creación de servicios, consulte [Creación de una implementación de actualización continua de Amazon ECS](create-service-console-v2.md).

**Creación de un servicio con un espacio de nombres compartido mediante la Consola de administración de AWS**

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. En la página **Clústeres**, seleccione el clúster en el que desea crear el servicio.

1. En **Servicios**, seleccione **Crear**.

1. Tras rellenar otros detalles en función de la carga de trabajo, en la sección **Service Connect**, seleccione **Usar Service Connect**.

1. Configure los ajustes de Service Connect según sea necesario para su tipo de servicio (cliente o cliente-servidor).

1. Amplíe **Configuración del registro de acceso**. En **Formato**, elija **JSON** o `TEXT`.

1. Para incluir los parámetros de consulta en los registros de acceso, seleccione **Incluir parámetros de consulta**.

1. Complete el proceso de creación del servicio.