Supervisión de flujos
importante
Esta característica se ofrece como versión preliminar de AWS y está sujeta a cambios. Para obtener más información, consulte la sección 2, Betas y versiones preliminares, del documento Términos de servicio de AWS
Antes de la disponibilidad general, añadiremos nuevos tipos de operaciones ("op": "u" para actualizaciones) a la carga útil de su flujo. Para garantizar que su aplicación gestione estos cambios sin necesidad de modificaciones, trate cualquier valor op no reconocido como una operación upsert aplicando la carga útil after. Para obtener más información, consulte Descripción de los registros de CDC.
Cuando Aurora DSQL detecta un error al entregar un registro de CDC, el flujo pasa al estado IMPAIRED. Un flujo dañado continúa procesando y entregando otros registros; Aurora DSQL reintenta solo el registro que ha fallado. Aurora DSQL mide el retardo de replicación a partir del registro más antiguo sin entregar, y dicho retardo aumenta hasta que se resuelva el problema. Aurora DSQL conserva internamente los cambios sin entregar durante una semana.
Si resuelve el problema subyacente en este plazo, el siguiente intento se realizará correctamente, el estado de error se borrará y el flujo volverá a ser ACTIVE. Solucione el problema externo (política de IAM, clave de AWS KMS, capacidad de Amazon Kinesis, etc.) y Aurora DSQL lo volverá a intentar automáticamente.
Si el retardo de replicación supera el umbral de error, el flujo pasa a FAILED.
importante
Un flujo con error no se puede recuperar. Debe eliminar el flujo con error y crear uno nuevo.
Ciclo de vida del flujo
Un flujo pasa por los siguientes estados durante su ciclo de vida:
-
CREATING: Aurora DSQL está configurando el flujo. Aurora DSQL aún no entrega los registros de CDC. -
ACTIVE: el flujo está operativo y envía los registros de CDC al destino. -
IMPAIRED: el flujo ha detectado un problema que requiere que tome medidas. Aurora DSQL vuelve a intentar el registro con error con un retroceso exponencial, aunque otros registros pueden seguir entregándose. Aurora DSQL mide el retardo de replicación a partir del registro más antiguo sin entregar, y dicho retardo aumenta hasta que se resuelva el problema. Aurora DSQL almacena en búfer los cambios sin entregar durante una semana. Consulte Referencia de códigos de error. -
FAILED: el flujo ha detectado un error persistente y ya no entrega los registros de CDC. Un flujo con error no se puede recuperar y debe eliminarlo. Consulte Referencia de códigos de error para ver las condiciones que hacen que un flujo entre en este estado. -
DELETING: Aurora DSQL está eliminando los recursos del flujo. -
DELETED: Aurora DSQL ha eliminado el flujo. Una vez completada la eliminación,GetStreamdevuelve unaResourceNotFoundException.
Llame a GetStream para ver el estado del flujo en cualquier momento. Cuando el flujo es IMPAIRED o FAILED, la respuesta incluye un objeto statusReason con el código de error y la marca de tiempo. Para obtener más información sobre los campos de respuesta GetStream, consulte GetStream en la Referencia de la API de Amazon Aurora DSQL.
Solución de problemas de un flujo dañado o con error
Siga estos pasos cuando un flujo de CDC se dañe o produzca un error. Si el flujo tiene el estado FAILED, no podrá recuperarlo. Elimine el flujo, resuelva el problema subyacente y cree uno nuevo.
-
Obtenga el estado del flujo. Llame a
GetStreamy verifique el campostatus. Si el estado esACTIVE, el flujo está en buen estado.aws dsql get-stream \ --cluster-identifiercluster-id\ --stream-identifierstream-id\ --regionregion -
Lea el código de error. Si el estado es
IMPAIREDoFAILED, la respuesta incluye un objetostatusReason. El campoerrorcontiene el código de error.{ "status": "IMPAIRED", "statusReason": { "error": "KINESIS_THROUGHPUT_EXCEEDED", "updatedAt": "2025-01-15T14:30:00Z" } } -
Siga el proceso de corrección. Si el flujo es
IMPAIRED, busque el código de error en la siguiente tabla y aplique la solución recomendada. Aurora DSQL vuelve a intentarlo automáticamente después de resolver el problema subyacente. Si el flujo esFAILED, elimínelo, resuelva el problema y cree un nuevo flujo.
Referencia de códigos de error
En la siguiente tabla se explica cada código de error, su causa, si el flujo se puede recuperar y los pasos para resolverlo.
| Código de error | Causa | ¿Es recuperable? | Cómo resolverlo |
|---|---|---|---|
KINESIS_THROUGHPUT_EXCEEDED |
Your Kinesis data stream exceeded its throughput limit, or AWS KMS throttled encryption operations on the Kinesis data stream, and the replication lag has grown. | Yes | Increase the number of shards on your Kinesis data stream, or switch to on-demand capacity mode. If the Kinesis data stream uses an AWS KMS customer managed key, verify that the key's request quota is large enough. After you increase capacity, Aurora DSQL retries automatically. |
KINESIS_STREAM_NOT_FOUND |
The target Kinesis data stream no longer exists. | No | The stream transitions directly to ERROR. Delete the CDC stream
and create a new one pointing to a valid Kinesis data stream. |
ROLE_ACCESS_DENIED |
Aurora DSQL can't assume the IAM role specified in the target definition. The
AWS STS AssumeRole call returned AccessDenied. |
Yes | Verify the role's trust policy allows the Aurora DSQL service principal
(dsql.amazonaws.com) to assume it. Verify the
aws:SourceAccount and aws:SourceArn conditions match your
cluster. For details, see
Política de confianza del rol de servicio. After you
fix the trust policy, Aurora DSQL retries automatically. |
KINESIS_ACCESS_DENIED |
The assumed role doesn't have permission to write to the Kinesis data stream.
Kinesis returned AccessDeniedException. |
Yes | Add kinesis:PutRecord and kinesis:PutRecords permissions
to the role's policy for the target Kinesis data stream Amazon Resource Name (ARN).
After you fix the policy, Aurora DSQL retries automatically. |
KINESIS_KMS_ACCESS_DENIED |
The assumed role doesn't have permission to use the AWS KMS key that encrypts the Kinesis data stream. This error covers AWS KMS access denial and invalid key states. | Yes | Verify the role has kms:GenerateDataKey permission on the AWS KMS
key that the Kinesis data stream uses. Also verify that the AWS KMS key is in an enabled
and valid state. This key is the encryption key on the Kinesis data stream, not the
cluster's AWS KMS key. For details, see
Política de permisos de roles de servicio. After you fix the permissions or key
state, Aurora DSQL retries automatically. |
KINESIS_OVERSIZE_RECORD |
A CDC record exceeded the maximum record size configured on the Kinesis data stream. | Yes | Increase MaxRecordSizeInKiB on the Kinesis data stream to
10240 (10 MiB). You can update this setting on an existing Kinesis data
stream without deleting it. After you increase the limit, Aurora DSQL retries the oversized
record automatically and the stream transitions back to
ACTIVE. |
CLUSTER_CMK_INACCESSIBLE |
The AWS KMS customer managed key that encrypts the Aurora DSQL cluster is inaccessible. | Yes | Verify the AWS KMS key policy and key state. Re-enable or restore access to the
key. After the key becomes accessible again, the stream transitions back to
ACTIVE. |
La tabla anterior muestra todos los valores de StreamFailureErrorCode. Para obtener más información sobre el campo de respuesta statusReason, consulte GetStream en la Referencia de la API de Amazon Aurora DSQL.
Recuperación de un flujo dañado
La mayoría de los errores primero pasan el flujo al estado IMPAIRED. Un flujo dañado continúa procesando otros registros y reintenta automáticamente el registro que ha fallado. Un flujo FAILED no se puede recuperar; debe eliminarlo y crear uno nuevo.
-
En el caso de errores recuperables: corrija el problema externo (política de IAM, clave de AWS KMS, capacidad de Kinesis o límite de tamaño de registro de Kinesis). El siguiente intento que tenga éxito borra el estado de error y devuelve el flujo al estado
ACTIVE. -
En el caso de
KINESIS_STREAM_NOT_FOUND: el flujo pasa directamente aFAILED. Elimine el flujo con error y cree uno nuevo que apunte a una flujo de datos de Kinesis válido.
En el caso de los demás códigos de error, si el retardo en la replicación supera el umbral de error antes de resolver el problema, el flujo pasa de IMPAIRED a FAILED. Un flujo con error no puede volver al estado ACTIVE. En este caso, debe eliminar el flujo con error, resolver el problema subyacente y crear uno nuevo.
Supervisión del estado el flujo
Utilice las métricas de CloudWatch y la API GetStream para supervisar el estado de los flujos. Las métricas de CloudWatch proporcionan una visibilidad continua del rendimiento de las canalizaciones de los CDC y GetStream proporciona el código de error específico cuando un flujo se interrumpe o produce un error.
Para ver la lista completa de las métricas de CDC, como IsImpaired, BehindSourceLag, PublishedBytes y PublishedRecords, consulte Métricas de CloudWatch para los flujos de CDC. Para obtener más información sobre los campos de respuesta GetStream, consulte GetStream en la Referencia de la API de Amazon Aurora DSQL.
Métricas de CloudWatch para los flujos de CDC
Utilice las métricas de CloudWatch siguientes para supervisar el estado y el rendimiento de cada flujo de CDC. Aurora DSQL publica estas métricas en el espacio de nombres AWS/AuroraDSQL con las dimensiones ClusterId y StreamId. La última métrica es una métrica estándar de Amazon Kinesis en el espacio de nombres AWS/Kinesis que mide el retardo de lectura descendente.
nota
Aurora DSQL también publica las métricas BytesStreamed y StreamDPU en el espacio de nombres AWS/AuroraDSQL para el seguimiento del uso y la facturación. Para ver las descripciones, consulte Métricas de flujos de CDC.
| Nombre de métrica | Estadísticas útiles | Descripción |
|---|---|---|
IsImpaired |
Maximum | Indicates whether the stream is impaired. The value is 1 when the
stream is in the IMPAIRED state, and 0 when the stream is
healthy. Aurora DSQL emits this metric continuously for each active or impaired stream.
Use this metric to create a CloudWatch alarm that notifies you when a stream becomes
impaired. |
BehindSourceLag |
Average | The delay, in milliseconds, between when a transaction commits in Aurora DSQL and when the CDC system processes the resulting record. A rising value indicates that the CDC pipeline is falling behind the write workload. |
PublishedBytes |
Sum | The total bytes of CDC records that Aurora DSQL wrote to the target during the period. Use this metric together with your Kinesis shard count to determine whether you've provisioned enough write capacity. |
PublishedRecords |
Sum | The total number of CDC records that Aurora DSQL wrote to the target during the period. Each committed row change produces one record. |
GetRecords.IteratorAgeMilliseconds
(AWS/Kinesis) |
Average | A standard Kinesis metric that reports the age of the last record read from the
Kinesis data stream by your downstream app, in milliseconds. Use the
StreamName dimension. A rising value indicates that your downstream app
can't keep up with the rate at which Aurora DSQL writes CDC records to
Kinesis. |
La pestaña Supervisión de la consola de Aurora DSQL muestra un valor de Latencia promedio integral que combina BehindSourceLag (latencia de origen de CDC) y GetRecords.IteratorAgeMilliseconds (retardo del lector de Kinesis). Este valor combinado representa el retardo total desde la confirmación de la base de datos hasta la lectura descendente.
Prácticas recomendadas de supervisión
Siga estas prácticas para detectar y resolver los problemas de canalización de CDC antes de que afecten a sus sistemas descendentes.
Establecimiento de alarmas en BehindSourceLag
Cree una alarma de CloudWatch que se active cuando BehindSourceLag supere un umbral importante para su carga de trabajo. Por ejemplo, establezca 60 segundos para un objetivo de latencia de un minuto. Un aumento constante de esta métrica significa que la canalización CDC se está retrasando. Si el retardo alcanza el umbral de error, el flujo pasa al estado FAILED. Si se anticipa a esta tendencia, dispondrá de tiempo para aumentar la capacidad de Kinesis o investigar los cuellos de botella en el rendimiento antes de que se produzca una degradación del flujo.
Supervisión de GetRecords.IteratorAgeMilliseconds en Kinesis
Incluso cuando Aurora DSQL entrega los registros a tiempo, su aplicación descendente podría retrasarse. Cree una alarma de CloudWatch en GetRecords.IteratorAgeMilliseconds (en el espacio de nombres AWS/Kinesis, dimensión StreamName) para detectar el retardo descendente de forma independiente. Si esta métrica aumenta y BehindSourceLag se mantiene estable, el cuello de botella se encuentra en la aplicación descendente, no en Aurora DSQL.
Seguimiento de PublishedBytes con respecto a la capacidad de particiones de Kinesis
Cada partición de Kinesis admite hasta 1 MiB por segundo para escrituras. Compare la suma de PublishedBytes por minuto con la capacidad total de escritura de la partición (número de partición × 60 MiB por minuto). Si el uso se acerca al 80 %, añada particiones o cambie al modo de capacidad bajo demanda antes de que la limitación active KINESIS_THROUGHPUT_EXCEEDED.
La alarma en IsImpaired para detectar el deterioro al instante
Cree una alarma de CloudWatch que se active cuando el valor máximo de IsImpaired sea superior o igual a 1 para un solo periodo de evaluación. Esto le permite recibir una señal directa cuando un flujo entra en el estado IMPAIRED, sin necesidad de sondear la API. Cuando se active la alarma, llame a GetStream para leer el campo statusReason.error y siga los pasos de corrección que se indican en Solución de problemas de un flujo dañado o con error.
Sondeo de GetStream para obtener información detallada sobre el estado
La métrica IsImpaired indica que un flujo está dañado, pero la API GetStream proporciona el código de error y la marca de tiempo específicos. Sondee GetStream de forma programada (por ejemplo, cada cinco minutos) o en respuesta a una alarma IsImpaired. El campo statusReason.error te indica qué es lo que ha ocurrido. Combínelo con los pasos de solución de problemas que se indican en Solución de problemas de un flujo dañado o con error para conseguir una resolución rápida.
Utilice los paneles para correlacionar las métricas
Cree un panel de CloudWatch que muestre IsImpaired, BehindSourceLag, PublishedRecords, PublishedBytes y GetRecords.IteratorAgeMilliseconds en paralelo. La correlación de estas métricas le ayuda a distinguir entre un problema en la canalización de CDC (aumento de BehindSourceLag) y un problema de lectura descendente (aumento de IteratorAge con BehindSourceLag estable).