

# Uso de flujos métricos
<a name="CloudWatch-Metric-Streams"></a>

Puede utilizar *flujos métricos* para transmitir continuamente las métricas de CloudWatch a un destino de su elección, con entrega casi en tiempo real y latencia baja. Los destinos admitidos incluyen destinos de AWS como Amazon Simple Storage Service y varios destinos de proveedores de servicios de terceros.

Existen tres situaciones de uso principales para los flujos métricos de CloudWatch:
+ **Configuración personalizada con Firehose:** cree un flujo métrico y diríjalo a un flujo de entrega de Amazon Data Firehose que entregue sus métricas de CloudWatch a donde usted quiera que vayan. Puede transmitirlas a un lago de datos, como Amazon S3, o a cualquier destino o punto de conexión compatible con Firehose, incluidos los proveedores de terceros. Los formatos JSON, OpenTelemetry 1.0.0 y OpenTelemetry 0.7.0 son compatibles de forma nativa, o puede configurar transformaciones en el flujo de entrega de Firehose para convertir los datos a un formato diferente, como Parquet. Esto permite actualizar continuamente los datos de supervisión o combinar estos datos de métrica de CloudWatch con datos de facturación y rendimiento para crear conjuntos de datos abundantes. A continuación, puede utilizar herramientas como Amazon Athena para obtener información acerca de la optimización de costos, el rendimiento de los recursos y la utilización de los recursos.
+ **Configuración rápida de S3**: transmisión a Amazon Simple Storage Service mediante un proceso de configuración rápido. De forma predeterminada, CloudWatch crea los recursos necesarios para la transmisión. Los formatos admitidos son JSON, OpenTelemetry 1.0.0 y OpenTelemetry 0.7.0.
+ **Configuración rápida de socios de AWS**: CloudWatch ofrece una experiencia de configuración rápida para algunos socios externos. Puede utilizar proveedores de servicios de terceros para supervisar, solucionar problemas y analizar las aplicaciones mediante los datos transmitidos de CloudWatch. Cuando utiliza el flujo de trabajo de configuración rápida para socios, solo tiene que proporcionar una URL de destino y una clave de API para su destino, y CloudWatch se encarga del resto de la configuración. La configuración rápida de socios está disponible para los siguientes proveedores externos: 

  
  + Datadog
  + Dynatrace
  + Elastic
  + New Relic
  + Splunk Observability Cloud
  + SumoLogic

Puede transmitir todas sus métricas de CloudWatch o usar filtros para transmitir solo las métricas especificadas. Cada flujo métrico puede incluir hasta 1000 filtros que incluyen o excluyen espacios de nombres de métricas o métricas específicas. Un único flujo métrico puede solo incluir o excluir filtros, pero no ambas opciones.

Después de crear un flujo métrico, si se crean nuevas métricas que coinciden con los filtros existentes, las nuevas métricas se incluyen automáticamente en el flujo.

No hay límite en el número de flujos métricos por cuenta o por Región, ni límite en el número de actualizaciones de métricas que se estén transmitiendo.

Cada flujo puede usar el formato JSON, OpenTelemetry 1.0.0 u OpenTelemetry 0.7.0. Puede editar el formato de salida de un flujo métrico en cualquier momento, por ejemplo, para actualizar de OpenTelemetry 0.7.0 a OpenTelemetry 1.0.0. Para obtener más información acerca de los formatos de salida, consulte [Salida de flujos de métricas de CloudWatch en formato JSON](CloudWatch-metric-streams-formats-json.md), [Salida de flujos de métricas de CloudWatch en formato OpenTelemetry 1.0.0](CloudWatch-metric-streams-formats-opentelemetry-100.md) y [Salida de flujos de métricas de CloudWatch en formato OpenTelemetry 0.7.0](CloudWatch-metric-streams-formats-opentelemetry.md).

Para los flujos de métricas en las cuentas de monitoreo, puede elegir si desea incluir métricas de las cuentas de origen vinculadas a esa cuenta de monitoreo. Para obtener más información, consulte [Observabilidad entre cuentas de CloudWatch](CloudWatch-Unified-Cross-Account.md).

Las secuencias métricas siempre incluyen las estadísticas `Minimum`, `Maximum`, `SampleCount` y `Sum`. También puede elegir incluir estadísticas adicionales por un cargo adicional. Para obtener más información, consulte [Estadísticas que se pueden transmitir en streaming](CloudWatch-metric-streams-statistics.md). 

El precio de los flujos métricos se basa en el número de actualizaciones de métrica. También incurre en cargos de Firehose por el flujo de entrega que se utilice para el flujo métrico. Para obtener más información, consulte [Precios de Amazon CloudWatch](https://aws.amazon.com/cloudwatch/pricing/).

**Topics**
+ [Configuración de un flujo métrico](CloudWatch-metric-streams-setup.md)
+ [Estadísticas que se pueden transmitir en streaming](CloudWatch-metric-streams-statistics.md)
+ [Operación y mantenimiento del flujo métrico](CloudWatch-metric-streams-operation.md)
+ [Monitoreo del flujo métrico con las métricas de CloudWatch](CloudWatch-metric-streams-monitoring.md)
+ [Confianza entre CloudWatch y Firehose](CloudWatch-metric-streams-trustpolicy.md)
+ [Salida de flujos de métricas de CloudWatch en formato JSON](CloudWatch-metric-streams-formats-json.md)
+ [Salida de flujos de métricas de CloudWatch en formato OpenTelemetry 1.0.0](CloudWatch-metric-streams-formats-opentelemetry-100.md)
+ [Salida de flujos de métricas de CloudWatch en formato OpenTelemetry 0.7.0](CloudWatch-metric-streams-formats-opentelemetry.md)
+ [Solución de problemas de flujos de métricas en CloudWatch](CloudWatch-metric-streams-troubleshoot.md)

# Configuración de un flujo métrico
<a name="CloudWatch-metric-streams-setup"></a>

Siga los pasos descritos en las siguientes secciones para configurar flujos métricos de CloudWatch.

Después de crear un flujo métrico, el tiempo que tarden en aparecer los datos de métrica en el destino depende de la configuración de almacenamiento en búfer en el flujo de entrega de Firehose. El almacenamiento en búfer se expresa en tamaño máximo de carga o en el tiempo de espera máximo, lo que se alcance primero. Si se establecen en los valores mínimos (60 segundos, 1 MB), la latencia esperada es en 3 minutos si los espacios de nombres de CloudWatch seleccionados tienen activadas las actualizaciones de métrica.

En un flujo métrico de CloudWatch, los datos se envían cada un minuto. Los datos pueden llegar al destino final fuera de servicio. Todas las métricas en los espacios de nombres especificados se envían en el flujo métrico, excepto las métricas con una marca de tiempo de más de dos días de antigüedad. 

Para cada combinación de nombre de métrica y espacio de nombres que transmite, se distribuyen en streaming todas las combinaciones de dimensiones de ese nombre de métrica y espacio de nombres.

Para los flujos de métricas en las cuentas de monitoreo, puede elegir si desea incluir métricas de las cuentas de origen vinculadas a esa cuenta de monitoreo. Para obtener más información, consulte [Observabilidad entre cuentas de CloudWatch](CloudWatch-Unified-Cross-Account.md).

Para crear y administrar un flujo métrico, debe haber iniciado sesión en una cuenta que tenga la política **CloudWatchFullAccess** y el permiso `iam:PassRole`, o en una cuenta que tenga la siguiente lista de permisos:
+ `iam:PassRole`
+ `cloudwatch:PutMetricStream`
+ `cloudwatch:DeleteMetricStream`
+ `cloudwatch:GetMetricStream`
+ `cloudwatch:ListMetricStreams`
+ `cloudwatch:StartMetricStreams`
+ `cloudwatch:StopMetricStreams`

Si va a hacer que CloudWatch configure el rol de IAM necesario para los flujos métricos, también debe tener los permisos `iam:CreateRole` y `iam:PutRolePolicy`.

**importante**  
Los usuarios con `cloudwatch:PutMetricStream` tienen acceso a los datos de métrica de CloudWatch que se están transmitiendo, incluso si no tienen el permiso `cloudwatch:GetMetricData`.

**Topics**
+ [Configuración personalizada con Firehose](CloudWatch-metric-streams-setup-datalake.md)
+ [Utilice la configuración rápida de Amazon S3](CloudWatch-metric-streams-setup-Quick-S3.md)
+ [Configuración rápida de socios](CloudWatch-metric-streams-QuickPartner.md)

# Configuración personalizada con Firehose
<a name="CloudWatch-metric-streams-setup-datalake"></a>

Utilice este método para crear un flujo métrico y diríjalo a un flujo de entrega de Amazon Data Firehose que entregue sus métricas de CloudWatch a donde usted quiera que vayan. Puede transmitirlas a un lago de datos, como Amazon S3, o a cualquier destino o punto de conexión compatible con Firehose, incluidos los proveedores de terceros.

Los formatos JSON, OpenTelemetry 1.0.0 y OpenTelemetry 0.7.0 son compatibles de forma nativa, o puede configurar transformaciones en el flujo de entrega de Firehose para convertir los datos a un formato diferente, como Parquet. Esto permite actualizar continuamente los datos de supervisión o combinar estos datos de métrica de CloudWatch con datos de facturación y rendimiento para crear conjuntos de datos abundantes. A continuación, puede utilizar herramientas como Amazon Athena para obtener información acerca de la optimización de costos, el rendimiento de los recursos y la utilización de los recursos.

Puede usar la consola de CloudWatch, la AWS CLI, el AWS CloudFormation, o el AWS Cloud Development Kit (AWS CDK) para configurar un flujo métrico.

El flujo de entrega de Firehose que utilice para el flujo métrico debe estar en la misma cuenta y región en la que configuró el flujo métrico. Para lograr la funcionalidad entre regiones, puede configurar el flujo de entrega de Firehose para que transmita a un destino final que se encuentre en una cuenta diferente o región diferente.

## Consola de CloudWatch
<a name="CloudWatch-metric-streams-setup-datalake-console"></a>

En esta sección, se describe cómo utilizar la consola de CloudWatch para configurar un flujo métrico mediante Firehose.

**Para configurar un flujo métrico personalizado mediante Firehose**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Elija **Metrics** (Métricas), **Streams** (Flujos) en el panel de navegación. Luego, elija **Create metric stream** (Crear flujo métrico).

1. (Opcional) Si inicia sesión en una cuenta configurada como cuenta de monitoreo para la observabilidad entre cuentas de CloudWatch, puede optar por incluir las métricas desde una cuenta de origen vinculada en este flujo de métricas. Para incluir las métricas de las cuentas de origen, seleccione **Incluir métricas de las cuentas de origen**.

1. Elija **Configuración personalizada con Firehose**.

1. En **Seleccionar el flujo de entrega de Kinesis Data Firehose**, seleccione el flujo de entrega de Firehose que desea utilizar. Debe estar en la misma cuenta. El formato predeterminado de esta opción es OpenTelemetry 0.7.0, pero puede cambiar el formato más adelante en este procedimiento.

   A continuación, seleccione el flujo de entrega de Firehose que desee utilizar en **Seleccionar el flujo de entrega de Firehose**.

1. (Opcional) Puede elegir **Seleccionar un rol de servicio existente** para utilizar un rol de IAM existente en lugar de hacer que CloudWatch cree uno nuevo.

1. (Opcional) Para cambiar el formato de salida predeterminado para su situación, elija **Change output format** (Cambiar formato de salida). Los formatos admitidos son JSON, OpenTelemetry 1.0.0 y OpenTelemetry 0.7.0.

1. En **Métricas para el flujo**, seleccione **Todas las métricas** o **Seleccionar métricas**.

   Si elige **Todas las métricas**, todas las métricas de esta cuenta se incluirán en el flujo.

   Considere con cuidado si desea transmitir todas las métricas, ya que cuantas más métricas transmita, mayores serán los cargos por transmisión de métricas.

   Si elige **Seleccionar métrica**, realice una de las operaciones siguientes:
   + Para transmitir la mayoría de los espacios de nombres de métricas, elija **Excluir** y seleccione los espacios de nombres o las métricas que desea excluir. Al especificar un espacio de nombres en **Excluir**, de forma opcional, puede seleccionar algunas métricas específicas de ese espacio de nombres para excluirlas. Si elige excluir un espacio de nombres, pero no selecciona las métricas de ese espacio de nombres, se excluyen todas las métricas de ese espacio de nombres.
   + Para incluir solo algunos espacios de nombres de métricas o métricas en el flujo de métricas, elija **Incluir** y, a continuación, seleccione los espacios de nombres que desea incluir. Si elige incluir un espacio de nombres, pero no selecciona las métricas de ese espacio de nombres, se incluyen todas las métricas de ese espacio de nombres.

1. (Opcional) Para transmitir estadísticas adicionales para algunas de estas métricas más allá de mínimo, máximo, recuento de muestras y suma, elija **Agregar estadísticas adicionales**. Elija **Add recommended metrics** (Agregar métricas recomendadas) para agregar algunas estadísticas de uso común o seleccionar manualmente el espacio de nombres y el nombre de métrica para transmitir estadísticas adicionales. A continuación, seleccione las estadísticas adicionales que desea transmitir.

   Para elegir otro grupo de métricas para transmitir un conjunto diferente de estadísticas adicionales, elija **Add additional statistics** (Agregar una estadística adicional). Cada métrica puede incluir hasta 20 estadísticas adicionales y hasta 100 métricas dentro de un flujo de métricas pueden incluir estadísticas adicionales.

   El streaming de estadísticas adicionales conlleva más cargos. Para obtener más información, consulte [Estadísticas que se pueden transmitir en streaming](CloudWatch-metric-streams-statistics.md).

   Para obtener definiciones de las estadísticas adicionales, consulte [Definiciones de estadísticas de CloudWatch](Statistics-definitions.md).

1. (Opcional) Personalice el nombre del nuevo flujo métrico en **Metric stream name** (Nombre de flujo métrico).

1. Elija **Create metric stream** (Crear flujo métrico).

## La AWS CLI o la API de AWS
<a name="CloudWatch-metric-streams-setup-datalake-CLI"></a>

Siga los pasos a continuación, para crear un flujo métrico de CloudWatch.

**Para utilizar la AWS CLI o la API de AWS para crear un flujo métrico**

1. Si está transmitiendo a Amazon S3, primero cree el bucket. Para obtener más información, consulte [Creating a bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) (Creación de un bucket).

1. Cree un flujo de entrega de Firehose. Para obtener más información, consulte [Creación de un flujo de Firehose](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html).

1. Cree un rol de IAM que permita a CloudWatch escribir en el flujo de entrega de Firehose. Para obtener más información acerca del contenido de este rol, consulte [Confianza entre CloudWatch y Firehose](CloudWatch-metric-streams-trustpolicy.md).

1. Use el comando CLI `aws cloudwatch put-metric-stream` o el la API `PutMetricStream` para crear el flujo métrico de CloudWatch.

## AWS CloudFormation
<a name="CloudWatch-metric-streams-setup-datalake-CFN"></a>

Puede usar el CloudFormation para configurar un flujo métrico. Para obtener más información, consulte [AWS::CloudWatch::MetricStream](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudwatch-metricstream.html)

**Para utilizar el CloudFormation para crear un flujo métrico**

1. Si está transmitiendo a Amazon S3, primero cree el bucket. Para obtener más información, consulte [Creating a bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) (Creación de un bucket).

1. Cree un flujo de entrega de Firehose. Para obtener más información, consulte [Creación de un flujo de Firehose](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html).

1. Cree un rol de IAM que permita a CloudWatch escribir en el flujo de entrega de Firehose. Para obtener más información acerca del contenido de este rol, consulte [Confianza entre CloudWatch y Firehose](CloudWatch-metric-streams-trustpolicy.md).

1. Cree la secuencia en CloudFormation. Para obtener más información, consulte [AWS::CloudWatch::MetricStream](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudwatch-metricstream.html).

## AWS Cloud Development Kit (AWS CDK)
<a name="CloudWatch-metric-streams-setup-datalake-CDK"></a>

Puede usar el AWS Cloud Development Kit (AWS CDK) para configurar un flujo métrico. 

**Para utilizar el AWS CDK para crear un flujo métrico**

1. Si está transmitiendo a Amazon S3, primero cree el bucket. Para obtener más información, consulte [Creating a bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) (Creación de un bucket).

1. Cree un flujo de entrega de Firehose. Para obtener más información, consulte [Creación de un flujo de entrega de Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html).

1. Cree un rol de IAM que permita a CloudWatch escribir en el flujo de entrega de Firehose. Para obtener más información acerca del contenido de este rol, consulte [Confianza entre CloudWatch y Firehose](CloudWatch-metric-streams-trustpolicy.md).

1. Cree el flujo métrico. El recurso del flujo métrico está disponible en AWS CDK como un modelo nivel 1 (L1) llamado `CfnMetricStream`. Para obtener más información, consulte [Using L1 constructs](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_l1_using.html) (Uso de modelos L1).

# Utilice la configuración rápida de Amazon S3
<a name="CloudWatch-metric-streams-setup-Quick-S3"></a>

El método **Configuración rápida de S3** funciona bien si desea configurar rápidamente un flujo en Amazon S3 y no necesita ninguna transformación de formato más allá de los formatos JSON, OpenTelemetry 1.0.0 y OpenTelemetry 0.7.0 admitidos. CloudWatch creará todos los recursos necesarios, incluidos el flujo de entrega de Firehose y los roles de IAM. El formato predeterminado de esta opción es JSON, pero puede cambiar el formato mientras configura la transmisión.

Como opción, si desea que el formato final sea formato Parquet o el formato Optimized Row Columnar (ORC), debe seguir los pasos descritos en [Configuración personalizada con Firehose](CloudWatch-metric-streams-setup-datalake.md).

## Consola de CloudWatch
<a name="CloudWatch-metric-streams-setup-quick-S3-console"></a>

En esta sección se describe cómo utilizar la consola de CloudWatch para configurar un flujo métrico de Amazon S3 mediante la configuración rápida de S3.

**Para configurar un flujo métrico mediante la configuración rápida de S3**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Elija **Metrics** (Métricas), **Streams** (Flujos) en el panel de navegación. Luego, elija **Create metric stream** (Crear flujo métrico).

1. (Opcional) Si inicia sesión en una cuenta configurada como cuenta de monitoreo para la observabilidad entre cuentas de CloudWatch, puede optar por incluir las métricas desde una cuenta de origen vinculada en este flujo de métricas. Para incluir las métricas de las cuentas de origen, seleccione **Incluir métricas de las cuentas de origen**.

1. Elija la **Configuración rápida de S3**. CloudWatch creará todos los recursos necesarios, incluidos el flujo de entrega de Firehose y los roles de IAM. El formato predeterminado de esta opción es JSON, pero puede cambiar el formato más adelante en este procedimiento.

1. (Opcional) Elija **Seleccionar recursos existentes** para usar un bucket de S3 existente o los roles de IAM existentes en lugar de hacer que CloudWatch cree otros nuevos para usted.

1. (Opcional) Para cambiar el formato de salida predeterminado para su situación, elija **Change output format** (Cambiar formato de salida). Los formatos admitidos son JSON, OpenTelemetry 1.0.0 y OpenTelemetry 0.7.0.

1. En **Métricas para el flujo**, seleccione **Todas las métricas** o **Seleccionar métricas**.

   Si elige **Todas las métricas**, todas las métricas de esta cuenta se incluirán en el flujo.

   Considere con cuidado si desea transmitir todas las métricas, ya que cuantas más métricas transmita, mayores serán los cargos por transmisión de métricas.

   Si elige **Seleccionar métrica**, realice una de las operaciones siguientes:
   + Para transmitir la mayoría de los espacios de nombres de métricas, elija **Excluir** y seleccione los espacios de nombres o las métricas que desea excluir. Al especificar un espacio de nombres en **Excluir**, de forma opcional, puede seleccionar algunas métricas específicas de ese espacio de nombres para excluirlas. Si elige excluir un espacio de nombres, pero no selecciona las métricas de ese espacio de nombres, se excluyen todas las métricas de ese espacio de nombres.
   + Para incluir solo algunos espacios de nombres de métricas o métricas en el flujo de métricas, elija **Incluir** y, a continuación, seleccione los espacios de nombres que desea incluir. Si elige incluir un espacio de nombres, pero no selecciona las métricas de ese espacio de nombres, se incluyen todas las métricas de ese espacio de nombres.

1. (Opcional) Para transmitir estadísticas adicionales para algunas de estas métricas más allá de mínimo, máximo, recuento de muestras y suma, elija **Agregar estadísticas adicionales**. Elija **Add recommended metrics** (Agregar métricas recomendadas) para agregar algunas estadísticas de uso común o seleccionar manualmente el espacio de nombres y el nombre de métrica para transmitir estadísticas adicionales. A continuación, seleccione las estadísticas adicionales que desea transmitir.

   Para elegir otro grupo de métricas para transmitir un conjunto diferente de estadísticas adicionales, elija **Add additional statistics** (Agregar una estadística adicional). Cada métrica puede incluir hasta 20 estadísticas adicionales y hasta 100 métricas dentro de un flujo de métricas pueden incluir estadísticas adicionales.

   El streaming de estadísticas adicionales conlleva más cargos. Para obtener más información, consulte [Estadísticas que se pueden transmitir en streaming](CloudWatch-metric-streams-statistics.md).

   Para obtener definiciones de las estadísticas adicionales, consulte [Definiciones de estadísticas de CloudWatch](Statistics-definitions.md).

1. (Opcional) Personalice el nombre del nuevo flujo métrico en **Metric stream name** (Nombre de flujo métrico).

1. Elija **Create metric stream** (Crear flujo métrico).

# Configuración rápida de socios
<a name="CloudWatch-metric-streams-QuickPartner"></a>

CloudWatch proporciona una experiencia de configuración rápida para los siguientes socios externos. Para usar este flujo de trabajo, solo debe proporcionar una URL de destino y una clave de API para su destino. CloudWatch se encarga del resto de la configuración, incluida la creación del flujo de entrega de Firehose y los roles de IAM necesarios.

**importante**  
Antes de utilizar la configuración rápida de socios para crear un flujo métrico, recomendamos encarecidamente leer la documentación de ese socio, cuyo enlace se incluye en la siguiente lista.
+ [Datadog](https://docs.datadoghq.com/integrations/guide/aws-cloudwatch-metric-streams-with-kinesis-data-firehose/)
+ [Dynatrace](https://www.dynatrace.com/support/help/dynatrace-api/basics/dynatrace-api-authentication)
+ [Elastic](https://www.elastic.co/docs/current/integrations/awsfirehose)
+ [New Relic](https://docs.newrelic.com/install/aws-cloudwatch/)
+ [Splunk Observability Cloud](https://docs.splunk.com/observability/en/gdi/get-data-in/connect/aws/aws-console-ms.html)
+ [SumoLogic](https://www.sumologic.com)

Cuando configura un flujo métrico para uno de estos socios, este se crea con algunos ajustes predeterminados, como se indica en las siguientes secciones.

**Topics**
+ [Configurar un flujo métrico mediante la configuración rápida de socios](#CloudWatch-metric-streams-QuickPartner-setup)
+ [Valores de flujo predeterminados de Datadog](#CloudWatch-metric-streams-QuickPartner-Datadog)
+ [Valores de flujo predeterminados de Dynatrace](#CloudWatch-metric-streams-QuickPartner-Dynatrace)
+ [Valores predeterminados de flujo de Elastic](#CloudWatch-metric-streams-QuickPartner-Elastic)
+ [Valores predeterminados de flujo de New Relic](#CloudWatch-metric-streams-QuickPartner-NewRelic)
+ [Valores predeterminados del flujo de Splunk Observability Cloud](#CloudWatch-metric-streams-QuickPartner-Splunk)
+ [Valores predeterminados de flujo de Sumo Logic](#CloudWatch-metric-streams-QuickPartner-Sumologic)

## Configurar un flujo métrico mediante la configuración rápida de socios
<a name="CloudWatch-metric-streams-QuickPartner-setup"></a>

CloudWatch ofrece una opción de configuración rápida para algunos socios externos. Antes de comenzar con los pasos en esta sección, debe disponer de cierta información para el socio. Esta información puede incluir una URL de destino o una clave de API para el destino de su socio. También debe leer la documentación en el sitio web del socio vinculado en la sección anterior y los valores predeterminados para ese socio que aparecen en las siguientes secciones.

Para transmitir a un destino de terceros que no sea compatible con la configuración rápida, puede seguir las instrucciones en Siga las instrucciones en [Configuración personalizada con Firehose](CloudWatch-metric-streams-setup-datalake.md) para configurar un flujo con Firehose y, a continuación, enviar esas métricas desde Firehose su destino final.

**Para utilizar la configuración rápida de socios para crear un flujo métrico para un proveedor externo**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Elija **Metrics** (Métricas), **Streams** (Flujos) en el panel de navegación. Luego, elija **Create metric stream** (Crear flujo métrico).

1. (Opcional) Si inicia sesión en una cuenta configurada como cuenta de monitoreo para la observabilidad entre cuentas de CloudWatch, puede optar por incluir las métricas desde una cuenta de origen vinculada en este flujo de métricas. Para incluir las métricas de las cuentas de origen, seleccione **Incluir métricas de las cuentas de origen**.

1. Elija **Configuración rápida para socios de Amazon Web Services**

1. Seleccione el nombre del socio al que desea transmitir las métricas.

1. En la **URL del punto de conexión**, introduzca la URL de destino.

1. Para la **clave de acceso** o la **clave de API**, introduzca la clave de acceso del socio. No todos los socios requieren una clave de acceso.

1. En **Métricas para el flujo**, seleccione **Todas las métricas** o **Seleccionar métricas**.

   Si elige **Todas las métricas**, todas las métricas de esta cuenta se incluirán en el flujo.

   Considere con cuidado si desea transmitir todas las métricas, ya que cuantas más métricas transmita, mayores serán los cargos por transmisión de métricas.

   Si elige **Seleccionar métrica**, realice una de las operaciones siguientes:
   + Para transmitir la mayoría de los espacios de nombres de métricas, elija **Excluir** y seleccione los espacios de nombres o las métricas que desea excluir. Al especificar un espacio de nombres en **Excluir**, de forma opcional, puede seleccionar algunas métricas específicas de ese espacio de nombres para excluirlas. Si elige excluir un espacio de nombres, pero no selecciona las métricas de ese espacio de nombres, se excluyen todas las métricas de ese espacio de nombres.
   + Para incluir solo algunos espacios de nombres de métricas o métricas en el flujo de métricas, elija **Incluir** y, a continuación, seleccione los espacios de nombres que desea incluir. Si elige incluir un espacio de nombres, pero no selecciona las métricas de ese espacio de nombres, se incluyen todas las métricas de ese espacio de nombres.

1. (Opcional) Para transmitir estadísticas adicionales para algunas de estas métricas más allá de mínimo, máximo, recuento de muestras y suma, elija **Agregar estadísticas adicionales**. Elija **Add recommended metrics** (Agregar métricas recomendadas) para agregar algunas estadísticas de uso común o seleccionar manualmente el espacio de nombres y el nombre de métrica para transmitir estadísticas adicionales. A continuación, seleccione las estadísticas adicionales que desea transmitir.

   Para elegir otro grupo de métricas para transmitir un conjunto diferente de estadísticas adicionales, elija **Add additional statistics** (Agregar una estadística adicional). Cada métrica puede incluir hasta 20 estadísticas adicionales y hasta 100 métricas dentro de un flujo de métricas pueden incluir estadísticas adicionales.

   El streaming de estadísticas adicionales conlleva más cargos. Para obtener más información, consulte [Estadísticas que se pueden transmitir en streaming](CloudWatch-metric-streams-statistics.md).

   Para obtener definiciones de las estadísticas adicionales, consulte [Definiciones de estadísticas de CloudWatch](Statistics-definitions.md).

1. (Opcional) Personalice el nombre del nuevo flujo métrico en **Metric stream name** (Nombre de flujo métrico).

1. Elija **Create metric stream** (Crear flujo métrico).

## Valores de flujo predeterminados de Datadog
<a name="CloudWatch-metric-streams-QuickPartner-Datadog"></a>

Los flujos de configuración rápida de socios para Datadog utilizan los siguientes valores predeterminados:
+ **Formato de salida:** OpenTelemetry 0.7.0
+ **Codificación de contenido del flujo de Firehose** GZIP
+ **Opciones de almacenamiento en búfer del flujo de Firehose** Intervalo de 60 segundos, tamaño de 4 MB
+ **Opción de reintento del flujo de Firehose** Duración de 60 segundos

Cuando utiliza la configuración rápida de socios para crear un flujo métrico a Datadog y transmite determinadas métricas, esas métricas incluyen algunas estadísticas adicionales de forma predeterminada. La transmisión de estadísticas adicionales puede conllevar cargos adicionales. Para obtener más información acerca de las estadísticas y sus costos, consulte [Estadísticas que se pueden transmitir en streaming](CloudWatch-metric-streams-statistics.md).

La siguiente lista muestra las métricas con estadísticas adicionales transmitidas de forma predeterminada, si decide transmitir esas métricas. Puede anular la selección de estas estadísticas adicionales antes de iniciar la transmisión.
+ **`Duration` en `AWS/Lambda`:** p50, p80, p95, p99, p99.9
+ **`PostRuntimeExtensionDuration` en `AWS/Lambda`:** p50, p99
+ **`FirstByteLatency` y `TotalRequestLatency` en `AWS/S3`:** p50, p90, p95, p99, p99.9
+ **`ResponseLatency` en `AWS/Polly` y `TargetResponseTime` en AWS/ApplicationELB:** p50, p90, p95, p99
+ **`Latency` y `IntegrationLatency` en `AWS/ApiGateway`:** p90, p95, p99
+ **`Latency` y `TargetResponseTime` en `AWS/ELB`:** p95, p99
+ **`RequestLatency` en `AWS/AppRunner`:** p50, p95, p99
+ **`ActivityTime`, `ExecutionTime`, `LambdaFunctionRunTime`, `LambdaFunctionScheduleTime`, `LambdaFunctionTime`, `ActivityRunTime` y `ActivityScheduleTime` en `AWS/States`:** p95, p99
+ **`EncoderBitRate`, `ConfiguredBitRate` y `ConfiguredBitRateAvailable` en `AWS/MediaLive`**: p90
+ **`Latency` en `AWS/AppSync`:** p90

## Valores de flujo predeterminados de Dynatrace
<a name="CloudWatch-metric-streams-QuickPartner-Dynatrace"></a>

Los flujos de configuración rápida de socios para Dynatrace utilizan los siguientes valores predeterminados:
+ **Formato de salida:** OpenTelemetry 0.7.0
+ **Codificación de contenido del flujo de Firehose** GZIP
+ **Opciones de almacenamiento en búfer del flujo de Firehose** Intervalo de 60 segundos, tamaño de 5 MB
+ **Opción de reintento del flujo de Firehose** Duración de 600 segundos

## Valores predeterminados de flujo de Elastic
<a name="CloudWatch-metric-streams-QuickPartner-Elastic"></a>

Los flujos de configuración rápida de socios para Elastic usan los siguientes valores predeterminados:
+ **Formato de salida:** OpenTelemetry 1.0.0
+ **Codificación de contenido del flujo de Firehose** GZIP
+ **Opciones de almacenamiento en búfer del flujo de Firehose** Intervalo de 60 segundos, tamaño de 1 MB
+ **Opción de reintento del flujo de Firehose** Duración de 60 segundos

## Valores predeterminados de flujo de New Relic
<a name="CloudWatch-metric-streams-QuickPartner-NewRelic"></a>

Los flujos de configuración rápida de socios para New Relic utilizan los siguientes valores predeterminados:
+ **Formato de salida:** OpenTelemetry 0.7.0
+ **Codificación de contenido del flujo de Firehose** GZIP
+ **Opciones de almacenamiento en búfer del flujo de Firehose** Intervalo de 60 segundos, tamaño de 1 MB
+ **Opción de reintento del flujo de Firehose** Duración de 60 segundos

## Valores predeterminados del flujo de Splunk Observability Cloud
<a name="CloudWatch-metric-streams-QuickPartner-Splunk"></a>

Los flujos de configuración rápida de socios para Splunk Observability Cloud utilizan los siguientes valores predeterminados:
+ **Formato de salida:** OpenTelemetry 1.0.0
+ **Codificación de contenido del flujo de Firehose** GZIP
+ **Opciones de almacenamiento en búfer del flujo de Firehose** Intervalo de 60 segundos, tamaño de 1 MB
+ **Opción de reintento del flujo de Firehose** Duración de 300 segundos

## Valores predeterminados de flujo de Sumo Logic
<a name="CloudWatch-metric-streams-QuickPartner-Sumologic"></a>

Los flujos de configuración rápida de socios para Sumo Logic utilizan los siguientes valores predeterminados:
+ **Formato de salida:** OpenTelemetry 0.7.0
+ **Codificación de contenido del flujo de Firehose** GZIP
+ **Opciones de almacenamiento en búfer del flujo de Firehose** Intervalo de 60 segundos, tamaño de 1 MB
+ **Opción de reintento del flujo de Firehose** Duración de 60 segundos

# Estadísticas que se pueden transmitir en streaming
<a name="CloudWatch-metric-streams-statistics"></a>

Los flujos métricos siempre incluyen las siguientes estadísticas: `Minimum`, `Maximum`, `SampleCount` y `Sum`. También puede elegir incluir las siguientes estadísticas adicionales en un flujo de métricas. Esta elección se realiza por métricas. Para obtener más información acerca de estas estadísticas, consulte [Definiciones de estadísticas de CloudWatch](Statistics-definitions.md).
+ Valores de percentil como p95 o p99 (para flujos con formato JSON o OpenTelemetry) 
+ Media recortada (solo para flujos con formato JSON)
+ Media Winsorized (solo para flujos con formato JSON)
+ Recuento recortado (solo para flujos con formato JSON)
+ Suma recortada (solo para flujos con formato JSON)
+ Clasificación de percentiles (solo para flujos con formato JSON)
+ Media intercuartil (solo para flujos con formato JSON)

El streaming de estadísticas adicionales conlleva cargos adicionales. El streaming entre una y cinco de estas estadísticas adicionales para una métrica concreta se factura como actualización de métrica adicional. A partir de entonces, cada conjunto adicional de hasta cinco de estas estadísticas se facturará como otra actualización de métrica. 

 Por ejemplo, supongamos que para una métrica está transmitiendo las seis estadísticas adicionales siguientes: p95, p99, p99.9, Media recortada, Media Winsorizada y Suma recortada. Cada actualización de esta métrica se factura como tres actualizaciones de métricas: una para la actualización de métricas que incluye las estadísticas predeterminadas, una para las cinco primeras estadísticas adicionales y otra para la sexta estadística adicional. Sumar hasta cuatro estadísticas adicionales para un total de diez no aumentaría la facturación, pero lo haría una undécima estadística adicional.

Cuando especifica un nombre de métrica y una combinación de espacio de nombres para transmitir estadísticas adicionales, todas las combinaciones de dimensiones del nombre de métrica y el espacio de nombres se distribuyen en streaming con las estadísticas adicionales. 

Las secuencias métricas de CloudWatch publican una nueva métrica, `TotalMetricUpdate`, que refleja el número base de actualizaciones de métricas más actualizaciones de métricas adicionales en las que se produce el streaming de estadísticas adicionales. Para obtener más información, consulte [Monitoreo del flujo métrico con las métricas de CloudWatch](CloudWatch-metric-streams-monitoring.md).

Para obtener más información, consulte [Precios de Amazon CloudWatch](https://aws.amazon.com/cloudwatch/pricing/).

**nota**  
Algunas métricas no admiten percentiles. Las estadísticas de percentiles de estas métricas se excluyen del flujo y no incurren en cargos de flujo métrico. Un ejemplo de estas estadísticas que no admiten percentiles son algunas métricas del espacio de nombres `AWS/ECS`.

Las estadísticas adicionales que configura se transmiten en streaming solo si coinciden con los filtros de la transmisión. Por ejemplo, si crea un flujo que solo tiene `EC2` y `RDS` en los filtros de inclusión y, a continuación, las listas de configuración de estadísticas `EC2` y `Lambda`, a continuación, el flujo incluye `EC2` métricas con estadísticas adicionales, métricas `RDS` con solo las estadísticas predeterminadas y no incluye estadísticas `Lambda` en absoluto.

# Operación y mantenimiento del flujo métrico
<a name="CloudWatch-metric-streams-operation"></a>

Los flujos métricos siempre están en uno de los dos estados, **Running** (En ejecución) o **Stopped** (Detenido).
+ **En ejecución**: El flujo métrico se está ejecutando correctamente. Es posible que no haya datos de métrica transmitidos al destino debido a los filtros del flujo.
+ **Detenido**: El flujo métrico ha sido detenido explícitamente, y no por un error. Puede ser útil detener la transmisión para pausar temporalmente el streaming de datos sin eliminar el flujo.

Si detiene y reinicia un flujo métrico, los datos de la métrica que se publicaron en CloudWatch mientras se detuvo el flujo métrico no se rellenan en el flujo métrico.

Si cambia el formato de salida de un flujo métrico, en algunos casos podrá ver una pequeña cantidad de datos de la métrica escritos en el destino tanto en el formato antiguo como en el nuevo. Para evitar esta situación, puede crear un nuevo flujo de entrega de Firehose con la misma configuración que la actual y, a continuación, cambiar al nuevo flujo de entrega de Firehose y cambiar el formato de salida al mismo tiempo. De esta forma, los registros Kinesis con diferentes formatos de salida se almacenan en Amazon S3 en objetos separados. Más tarde, puede dirigir el tráfico de vuelta al flujo de entrega original de Firehose y eliminar el segundo flujo de entrega. 

**Para ver, editar, detener e iniciar los flujos métricos**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Elija **Metrics** (Métricas), **Streams** (Flujos) en el panel de navegación.

   Aparecerá la lista de flujos, y la columna **Status** (Estado) muestra si cada flujo está en ejecución o detenido.

1. Para detener o iniciar un flujo métrico, seleccione el flujo y elija **Stop** (Detener) o **Start** (Comenzar).

1. Para ver los detalles sobre un flujo métrico, seleccione el flujo y elija **View details** (Ver detalles).

1. Para cambiar el formato de salida, los filtros, la secuencia de Firehose de destino o los roles del flujo, elija **Editar** y realice los cambios que desee.

   Si cambia los filtros, es posible que haya algunos espacios vacíos en los datos de la métrica durante la transición.

# Monitoreo del flujo métrico con las métricas de CloudWatch
<a name="CloudWatch-metric-streams-monitoring"></a>

Los flujos métricos emiten métricas de CloudWatch sobre el estado y el funcionamiento en el espacio de nombres `AWS/CloudWatch/MetricStreams`. Se emiten las siguientes métricas. Estas métricas se emiten con una dimensión `MetricStreamName` y sin dimensión. Puede utilizar las métricas sin dimensiones para ver métricas agregadas para todas los flujos métricos. Puede utilizar las métricas con la dimensión `MetricStreamName` para ver las métricas sólo sobre ese flujo métrico.

Para todas estas métricas, los valores se emiten solo para los flujos métricos que se encuentran en el estado **Running** (En ejecución).


| Métrica | Descripción | 
| --- | --- | 
|  `MetricUpdate`  |  Las actualizaciones de métricas numéricas enviadas al flujo métrico. Si no se transmite ninguna actualización de métrica durante un período de tiempo, esta métrica no se emite durante ese período de tiempo. Si detiene el flujo métrico, esta métrica deja de emitirse hasta que se inicie de nuevo el flujo métrico. Estadística válida: `Sum` Unidades: ninguna | 
|  `TotalMetricUpdate`  |  Esto se calcula como **MetricUpdate \$1 un número basado en estadísticas adicionales que se están transmitiendo**. Para cada combinación única de nombres de espacio de nombres y métricas, el streaming de 1 a 5 estadísticas adicionales agrega 1 a la `TotalMetricUpdate`, estadísticas adicionales streaming 6-10 agrega 2 a `TotalMetricUpdate`, y así sucesivamente.  Estadística válida: `Sum` Unidades: ninguna | 
|  `PublishErrorRate`  |  El número de errores irrecuperables que se producen al introducir datos en el flujo de entrega de Firehose. Si no se producen errores durante un periodo de tiempo, esta métrica no se emite durante ese periodo de tiempo. Si detiene el flujo métrico, esta métrica deja de emitirse hasta que se inicie de nuevo el flujo métrico. Estadísticas válidas: `Average` para ver la tasa de actualizaciones de métricas que no se pueden registrar. Este valor debe estar entre 0,0 and 1,0 Unidades: ninguna  | 

# Confianza entre CloudWatch y Firehose
<a name="CloudWatch-metric-streams-trustpolicy"></a>

El flujo de entrega de Firehose debe confiar en CloudWatch a través de un rol de IAM que tenga permisos de escritura para Firehose. Estos permisos se pueden limitar al único flujo de entrega de Firehose que utiliza el flujo métrico de CloudWatch. El Rol de IAM debe confiar en el servicio principal `streams.metrics.cloudwatch.amazonaws.com`.

Si utiliza la consola de CloudWatch para crear un flujo métrico, puede hacer que CloudWatch cree el rol con los permisos que corresponden. Si utiliza otro método para crear un flujo métrico o desea crear el Rol de IAM en sí, debe contener la siguiente política de permisos y la política de confianza.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:firehose:us-east-1:123456789012:deliverystream/*"
        }
    ]
}
```

------

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "streams.metrics.cloudwatch.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

CloudWatch transmite datos de métrica al flujo de entrega de Firehose de destino en nombre de la fuente que posee el recurso del flujo métrico. 

# Salida de flujos de métricas de CloudWatch en formato JSON
<a name="CloudWatch-metric-streams-formats-json"></a>

En un flujo métrico de CloudWatch que utiliza el formato JSON, cada registro de Firehose contiene varios objetos JSON separados por un carácter de línea nueva (\$1n). Cada objeto incluye un único punto de datos de una sola métrica.

El formato JSON que se utiliza es totalmente compatible con AWS Glue y con Amazon Athena. Si tiene un flujo de entrega de Firehose y una tabla de AWS Glue formateada correctamente, el formato se puede transformar de manera automática en formato Parquet u Optimized Row Columnar (ORC) antes de almacenarse en S3. Para obtener más información acerca de cómo transformar el formato, consulte [Cómo convertir el formato de registro de entrada en Firehose](https://docs.aws.amazon.com/firehose/latest/dev/record-format-conversion.html). Para obtener más información acerca del formato correcto para AWS Glue, consulte [¿Qué esquema de AWS Glue debería usar para obtener el formato de salida JSON?](#CloudWatch-metric-streams-format-glue).

En el formato JSON, los valores válidos para `unit` son iguales que para el valor de `unit` en la estructura de la API `MetricDatum`. Para obtener más información, consulte [MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html). El valor para el campo `timestamp` está en milisegundos de la fecha de inicio, como `1616004674229`.

A continuación, se muestra un ejemplo del formato. En este ejemplo, se formatea JSON para facilitar la lectura, pero en la práctica todo el formato está en una única línea.

```
{
    "metric_stream_name": "MyMetricStream",
    "account_id": "1234567890",
    "region": "us-east-1",
    "namespace": "AWS/EC2",
    "metric_name": "DiskWriteOps",
    "dimensions": {
        "InstanceId": "i-123456789012"
    },
    "timestamp": 1611929698000,
    "value": {
        "count": 3.0,
        "sum": 20.0,
        "max": 18.0,
        "min": 0.0,
        "p99": 17.56,
        "p99.9": 17.8764,
        "TM(25%:75%)": 16.43
    },
    "unit": "Seconds"
}
```

## ¿Qué esquema de AWS Glue debería usar para obtener el formato de salida JSON?
<a name="CloudWatch-metric-streams-format-glue"></a>

A continuación, se muestra un ejemplo de una representación JSON del `StorageDescriptor` para una tabla de AWS Glue, que luego sería utilizado por Firehose. Para obtener más información acerca de `StorageDescriptor`, consulte [StorageDescriptor](https://docs.aws.amazon.com/glue/latest/webapi/API_StorageDescriptor.html).

```
{
  "Columns": [
    {
      "Name": "metric_stream_name",
      "Type": "string"
    },
    {
      "Name": "account_id",
      "Type": "string"
    },
    {
      "Name": "region",
      "Type": "string"
    },
    {
      "Name": "namespace",
      "Type": "string"
    },
    {
      "Name": "metric_name",
      "Type": "string"
    },
    {
      "Name": "timestamp",
      "Type": "timestamp"
    },
    {
      "Name": "dimensions",
      "Type": "map<string,string>"
    },
    {
      "Name": "value",
      "Type": "struct<min:double,max:double,count:double,sum:double,p99:double,p99.9:double>"
    },
    {
      "Name": "unit",
      "Type": "string"
    }
  ],
  "Location": "s3://amzn-s3-demo-bucket/",
  "InputFormat": "org.apache.hadoop.mapred.TextInputFormat",
  "OutputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
  "SerdeInfo": {
    "SerializationLibrary": "org.apache.hive.hcatalog.data.JsonSerDe"
  },
  "Parameters": {
    "classification": "json"
  }
}
```

El ejemplo anterior es para los datos registrados en Amazon S3 en formato JSON. Reemplace los valores de los siguientes campos con los valores indicados para almacenar los datos en formato Parquet o en formato Optimized Row Columnar (ORC).
+ **Parquet:**
  + inputFormat: org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat
  + outputFormat: org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat
  + SerDeInfo.serializationLib: org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe
  + parameters.classification: parquet
+ **ORC:**
  + inputFormat: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
  + outputFormat: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
  + SerDeInfo.serializationLib: org.apache.hadoop.hive.ql.io.orc.OrcSerde
  + parameters.classification: orc

# Salida de flujos de métricas de CloudWatch en formato OpenTelemetry 1.0.0
<a name="CloudWatch-metric-streams-formats-opentelemetry-100"></a>

**nota**  
Con el formato OpenTelemetry 1.0.0, los atributos de las métricas se codifican como una lista de objetos `KeyValue` en lugar del tipo `StringKeyValue` utilizado en el formato 0.7.0. Como consumidor, este es el único cambio importante entre los formatos 0.7.0 y 1.0.0. Un analizador generado a partir de los archivos proto de la versión 0.7.0 no analizará los atributos de las métricas codificados en el formato 1.0.0. Lo mismo ocurre a la inversa: un analizador generado a partir de los archivos proto de la versión 1.0.0 no analizará los atributos de las métricas codificados en el formato 0.7.0.

OpenTelemetry es una colección de herramientas, API y SDK. Puede utilizarlo para instrumentar, generar, recopilar y exportar datos telemétricos (métricas, registros y seguimientos) para analizarlos. OpenTelemetry es parte de Cloud Native Computing Foundation. Para obtener más información, consulte [OpenElemetry](https://opentelemetry.io/).

Para obtener información acerca de la especificación completa de OpenTelemetry 1.0.0, consulte [Versión de lanzamiento 1.0.0](https://github.com/open-telemetry/opentelemetry-proto/releases/tag/v1.0.0).

Un registro de Kinesis puede contener una o más estructuras de datos OpenTelemetry `ExportMetricsServiceRequest`. Cada estructura de datos comienza con una cabecera con un `UnsignedVarInt32` que indica la longitud de registro en bytes. Cada `ExportMetricsServiceRequest` puede contener datos de varias métricas a la vez.

A continuación, se muestra una cadena de representación del mensaje de la estructura de datos OpenTelemetry `ExportMetricsServiceRequest`. OpenTelemetry serializa el protocolo binario Google Protocol Buffers y este no es legible para el ser humano.

```
resource_metrics {
  resource {
    attributes {
      key: "cloud.provider"
      value {
        string_value: "aws"
      }
    }
    attributes {
      key: "cloud.account.id"
      value {
        string_value: "123456789012"
      }
    }
    attributes {
      key: "cloud.region"
      value {
        string_value: "us-east-1"
      }
    }
    attributes {
      key: "aws.exporter.arn"
      value {
        string_value: "arn:aws:cloudwatch:us-east-1:123456789012:metric-stream/MyMetricStream"
      }
    }
  }
  scope_metrics {
    metrics {
      name: "amazonaws.com/AWS/DynamoDB/ConsumedReadCapacityUnits"
      unit: "NoneTranslated"
      summary {
        data_points {
          start_time_unix_nano: 60000000000
          time_unix_nano: 120000000000
          count: 1
          sum: 1.0
          quantile_values {
            value: 1.0
          }
          quantile_values {
            quantile: 0.95
            value: 1.0
          }
          quantile_values {
            quantile: 0.99
            value: 1.0
          }
          quantile_values {
            quantile: 1.0
            value: 1.0
          }
          attributes {
            key: "Namespace"
            value {
              string_value: "AWS/DynamoDB"
            }
          }
          attributes {
            key: "MetricName"
            value {
              string_value: "ConsumedReadCapacityUnits"
            }
          }
          attributes {
            key: "Dimensions"
            value {
              kvlist_value {
                values {
                  key: "TableName"
                  value {
                    string_value: "MyTable"
                  }
                }
              }
            }
          }
        }
        data_points {
          start_time_unix_nano: 70000000000
          time_unix_nano: 130000000000
          count: 2
          sum: 5.0
          quantile_values {
            value: 2.0
          }
          quantile_values {
            quantile: 1.0
            value: 3.0
          }
          attributes {
            key: "Namespace"
            value {
              string_value: "AWS/DynamoDB"
            }
          }
          attributes {
            key: "MetricName"
            value {
              string_value: "ConsumedReadCapacityUnits"
            }
          }
          attributes {
            key: "Dimensions"
            value {
              kvlist_value {
                values {
                  key: "TableName"
                  value {
                    string_value: "MyTable"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
```

**Objeto de nivel superior para serializar datos de métrica de OpenTelemetry**

`ExportMetricsServiceRequest` es el envoltorio de nivel superior para serializar una carga del exportador de OpenTelemetry. Contiene uno o más `ResourceMetrics`.

```
message ExportMetricsServiceRequest {
  // An array of ResourceMetrics.
  // For data coming from a single resource this array will typically contain one
  // element. Intermediary nodes (such as OpenTelemetry Collector) that receive
  // data from multiple origins typically batch the data before forwarding further and
  // in that case this array will contain multiple elements.
  repeated opentelemetry.proto.metrics.v1.ResourceMetrics resource_metrics = 1;
}
```

`ResourceMetrics` es el objeto de nivel superior para representar objetos MetricData. 

```
// A collection of ScopeMetrics from a Resource.
message ResourceMetrics {
  reserved 1000;

  // The resource for the metrics in this message.
  // If this field is not set then no resource info is known.
  opentelemetry.proto.resource.v1.Resource resource = 1;

  // A list of metrics that originate from a resource.
  repeated ScopeMetrics scope_metrics = 2;

  // This schema_url applies to the data in the "resource" field. It does not apply
  // to the data in the "scope_metrics" field which have their own schema_url field.
  string schema_url = 3;
}
```

**El objeto recurso**

Un objeto `Resource` es un objeto de par de valores que contiene información sobre el recurso que generó las métricas. Para las métricas que AWS crea, la estructura de datos contiene el Nombre de recurso de Amazon (ARN) del recurso relacionado con la métrica, como una instancia EC2 o un bucket de S3.

El objeto `Resource` contiene un atributo llamado `attributes`, que almacena una lista de pares clave-valor.
+ `cloud.account.id` contiene el ID de la cuenta
+ `cloud.region` contiene la Región
+ `aws.exporter.arn` contiene el ARN del flujo métrico
+ `cloud.provider` es siempre `aws`.

```
// Resource information.
message Resource {
  // Set of attributes that describe the resource.
  // Attribute keys MUST be unique (it is not allowed to have more than one
  // attribute with the same key).
  repeated opentelemetry.proto.common.v1.KeyValue attributes = 1;

  // dropped_attributes_count is the number of dropped attributes. If the value is 0, then
  // no attributes were dropped.
  uint32 dropped_attributes_count = 2;
}
```

**El objeto ScopeMetrics**

El campo `scope` no se rellenará. Se rellena solo el campo de métricas que se está exportando.

```
// A collection of Metrics produced by an Scope.
message ScopeMetrics {
  // The instrumentation scope information for the metrics in this message.
  // Semantically when InstrumentationScope isn't set, it is equivalent with
  // an empty instrumentation scope name (unknown).
  opentelemetry.proto.common.v1.InstrumentationScope scope = 1;

  // A list of metrics that originate from an instrumentation library.
  repeated Metric metrics = 2;

  // This schema_url applies to all metrics in the "metrics" field.
  string schema_url = 3;
}
```

**El objeto métrica**

El objeto métrica contiene algunos metadatos y un campo de datos `Summary` que contiene una lista de `SummaryDataPoint`.

En el caso de los flujos métricos, los metadatos son los siguientes:
+ `name` será `amazonaws.com/metric_namespace/metric_name`
+ `description` estará en blanco
+ `unit` se rellenará al mapear la unidad del dato métrico a la variante de reconocimiento de mayúsculas y minúsculas del código unificado para unidades de medida. Para obtener más información, consulte [Conversiones con formato OpenTelemetry 1.0.0 en CloudWatch](CloudWatch-metric-streams-formats-opentelemetry-translation-100.md) y [The Unified Code For Units of Measure](https://ucum.org/ucum.html) (Código unificado para las unidades de medida).
+ `type` será `SUMMARY`

```
message Metric {
  reserved 4, 6, 8;

  // name of the metric, including its DNS name prefix. It must be unique.
  string name = 1;

  // description of the metric, which can be used in documentation.
  string description = 2;

  // unit in which the metric value is reported. Follows the format
  // described by http://unitsofmeasure.org/ucum.html.
  string unit = 3;

  // Data determines the aggregation type (if any) of the metric, what is the
  // reported value type for the data points, as well as the relatationship to
  // the time interval over which they are reported.
  oneof data {
    Gauge gauge = 5;
    Sum sum = 7;
    Histogram histogram = 9;
    ExponentialHistogram exponential_histogram = 10;
    Summary summary = 11;
  }
}

message Summary {
  repeated SummaryDataPoint data_points = 1;
}
```

**El objeto SummaryDataPoint**

El objeto SummaryDataPoint contiene el valor de un único punto de datos de una serie temporal en una métrica DoubleSummary.

```
// SummaryDataPoint is a single data point in a timeseries that describes the
// time-varying values of a Summary metric.
message SummaryDataPoint {
  reserved 1;

  // The set of key/value pairs that uniquely identify the timeseries from
  // where this point belongs. The list may be empty (may contain 0 elements).
  // Attribute keys MUST be unique (it is not allowed to have more than one
  // attribute with the same key).
  repeated opentelemetry.proto.common.v1.KeyValue attributes = 7;

  // StartTimeUnixNano is optional but strongly encouraged, see the
  // the detailed comments above Metric.
  //
  // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January
  // 1970.
  fixed64 start_time_unix_nano = 2;

  // TimeUnixNano is required, see the detailed comments above Metric.
  //
  // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January
  // 1970.
  fixed64 time_unix_nano = 3;

  // count is the number of values in the population. Must be non-negative.
  fixed64 count = 4;

  // sum of the values in the population. If count is zero then this field
  // must be zero.
  //
  // Note: Sum should only be filled out when measuring non-negative discrete
  // events, and is assumed to be monotonic over the values of these events.
  // Negative events *can* be recorded, but sum should not be filled out when
  // doing so.  This is specifically to enforce compatibility w/ OpenMetrics,
  // see: https://github.com/OpenObservability/OpenMetrics/blob/main/specification/OpenMetrics.md#summary
  double sum = 5;

  // Represents the value at a given quantile of a distribution.
  //
  // To record Min and Max values following conventions are used:
  // - The 1.0 quantile is equivalent to the maximum value observed.
  // - The 0.0 quantile is equivalent to the minimum value observed.
  //
  // See the following issue for more context:
  // https://github.com/open-telemetry/opentelemetry-proto/issues/125
  message ValueAtQuantile {
    // The quantile of a distribution. Must be in the interval
    // [0.0, 1.0].
    double quantile = 1;

    // The value at the given quantile of a distribution.
    //
    // Quantile values must NOT be negative.
    double value = 2;
  }

  // (Optional) list of values at different quantiles of the distribution calculated
  // from the current snapshot. The quantiles must be strictly increasing.
  repeated ValueAtQuantile quantile_values = 6;

  // Flags that apply to this specific data point.  See DataPointFlags
  // for the available flags and their meaning.
  uint32 flags = 8;
}
```

Para obtener más información, consulte [Conversiones con formato OpenTelemetry 1.0.0 en CloudWatch](CloudWatch-metric-streams-formats-opentelemetry-translation-100.md).

# Conversiones con formato OpenTelemetry 1.0.0 en CloudWatch
<a name="CloudWatch-metric-streams-formats-opentelemetry-translation-100"></a>

CloudWatch realiza algunas transformaciones para poner los datos de CloudWatch en formato OpenTelemetry.

**Conversión de espacio de nombres, nombre de métrica y dimensiones**

Estos atributos son pares clave-valor codificados en el mapeo.
+ Un atributo tiene la clave `Namespace` y su valor es el espacio de nombres de la métrica
+ Un atributo tiene la clave `MetricName` y su valor es el nombre de la métrica
+ Un par cuenta con la clave `Dimensions` y su valor es una lista anidada de pares clave-valor. Cada par de esta lista se asigna a una dimensión métrica de CloudWatch, donde la clave del par es el nombre de la dimensión y su valor es el valor de la dimensión.

**Conversión de promedio, suma, recuento de muestra, mínima y máxima**

El punto de datos de resumen permite que CloudWatch exporte todas estas estadísticas mediante un punto de datos.
+ `startTimeUnixNano` contiene el de CloudWatch `startTime`
+ `timeUnixNano` contiene el de CloudWatch `endTime`
+ `sum` contiene la estadística de la suma.
+ `count` contiene la estadística del recuento de muestra.
+ `quantile_values` contiene dos objetos `valueAtQuantile.value`:
  + `valueAtQuantile.quantile = 0.0` con `valueAtQuantile.value = Min value`
  + `valueAtQuantile.quantile = 0.99` con `valueAtQuantile.value = p99 value`
  + `valueAtQuantile.quantile = 0.999` con `valueAtQuantile.value = p99.9 value`
  + `valueAtQuantile.quantile = 1.0` con `valueAtQuantile.value = Max value`

Los recursos que consumen el flujo métrico pueden calcular la estadística promedio como **Sum/SampleCount** (Suma/recuento de muestra).

**Conversión de unidades**

Las unidades de CloudWatch se mapean a la variante de reconocimiento de mayúsculas y minúsculas del código unificado para unidades de medida, como se muestra en la siguiente tabla. Para obtener más información, consulte [The Unified Code For Units of Measure](https://ucum.org/ucum.html) (Código unificado para las unidades de medida).


| CloudWatch | OpenTelemetry | 
| --- | --- | 
|  Segundo |  s | 
|  Segundo o segundos |  s | 
|  Microsegundos |  EE. UU. | 
|  Milisegundos |  ms | 
|  Bytes |  B | 
|  Kilobytes |  KB | 
|  Megabytes |  MB | 
|  Gigabytes |  GB | 
|  Terabytes |  TB | 
|  Bits |  bit | 
|  Kilobits |  Kbit | 
|  Megabits |  Mbit | 
|  Gigabits |  Gbit | 
|  Terabits |  Tbit | 
|  Porcentaje |  % | 
|  Recuento |  \$1Count\$1 | 
|  Ninguno |  1 | 

Las unidades que se combinan con una barra diagonal se asignan mediante la conversión OpenTelemetry de ambas unidades. Por ejemplo, Bytes/segundo se asigna a B/s.

# Descubra cómo se analizan los mensajes de OpenTelemetry 1.0.0
<a name="CloudWatch-metric-streams-formats-opentelemetry-parse-100"></a>

En esta sección se proporciona información que lo ayudará a comenzar a analizar OpenTelemetry 1.0.0.

En primer lugar, debe obtener enlaces específicos de idioma, que le permiten analizar mensajes de OpenTelemetry 1.0.0 en el idioma de su preferencia.

**Para obtener enlaces específicos de idioma**
+ Los pasos dependen del idioma que prefiera.
  + Para utilizar Java, agregue la siguiente dependencia de Maven a su proyecto de Java: [OpenTelemetry Java >> 0.14.1](https://mvnrepository.com/artifact/io.opentelemetry/opentelemetry-proto/0.14.1).
  + Para utilizar cualquier otro idioma, siga estos pasos:

    1. Asegúrese de que su idioma es compatible; puede verificarlo en la lista en [Generating Your Classes](https://developers.google.com/protocol-buffers/docs/proto3#generating) (Generación de clases).

    1. Instale el compilador Protobuf con los pasos que se indican en [Download Protocol Buffers](https://developers.google.com/protocol-buffers/docs/downloads) (Descargar búferes de protocolo).

    1. Descargue las definiciones de OpenTelemetry 1.0.0 ProtoBuf en la [versión de lanzamiento 1.0.0](https://github.com/open-telemetry/opentelemetry-proto/releases/tag/v1.0.0). 

    1. Confirme que se encuentra en la carpeta raíz de las definiciones de OpenTelemetry 1.0.0 ProtoBuf descargadas. Después, cree una carpeta de `src` y, a continuación, ejecute el comando para generar enlaces específicos de idioma. Para obtener más información, consulte [Generating Your Classes](https://developers.google.com/protocol-buffers/docs/proto3#generating) (Generación de clases). 

       A continuación se muestra un ejemplo de cómo se generan los enlaces de Javascript.

       ```
       protoc --proto_path=./ --js_out=import_style=commonjs,binary:src \
       opentelemetry/proto/common/v1/common.proto \
       opentelemetry/proto/resource/v1/resource.proto \
       opentelemetry/proto/metrics/v1/metrics.proto \
       opentelemetry/proto/collector/metrics/v1/metrics_service.proto
       ```

En la siguiente sección se incluyen ejemplos de uso de enlaces específicos de idioma que se pueden crear mediante las instrucciones anteriores.

**Java**

```
package com.example;

import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class MyOpenTelemetryParser {

    public List<ExportMetricsServiceRequest> parse(InputStream inputStream) throws IOException {
        List<ExportMetricsServiceRequest> result = new ArrayList<>();

        ExportMetricsServiceRequest request;
        /* A Kinesis record can contain multiple `ExportMetricsServiceRequest`
           records, each of them starting with a header with an
           UnsignedVarInt32 indicating the record length in bytes:
            ------ --------------------------- ------ -----------------------
           |UINT32|ExportMetricsServiceRequest|UINT32|ExportMetricsService...
            ------ --------------------------- ------ -----------------------
         */
        while ((request = ExportMetricsServiceRequest.parseDelimitedFrom(inputStream)) != null) {
            // Do whatever we want with the parsed message
            result.add(request);
        }

        return result;
    }
}
```

**Javascript**

En este ejemplo se asume que la carpeta raíz con los enlaces generados es `./`

El argumento de datos de la función `parseRecord` puede tratarse de uno de los siguientes tipos:
+ `Uint8Array` es opcional.
+ `Buffer` óptimo debajo del nodo
+ `Array.number` enteros de 8 bits

```
const pb = require('google-protobuf')
const pbMetrics =
    require('./opentelemetry/proto/collector/metrics/v1/metrics_service_pb')

function parseRecord(data) {
    const result = []

    // Loop until we've read all the data from the buffer
    while (data.length) {
        /* A Kinesis record can contain multiple `ExportMetricsServiceRequest`
           records, each of them starting with a header with an
           UnsignedVarInt32 indicating the record length in bytes:
            ------ --------------------------- ------ -----------------------
           |UINT32|ExportMetricsServiceRequest|UINT32|ExportMetricsService...
            ------ --------------------------- ------ -----------------------
         */
        const reader = new pb.BinaryReader(data)
        const messageLength = reader.decoder_.readUnsignedVarint32()
        const messageFrom = reader.decoder_.cursor_
        const messageTo = messageFrom + messageLength

        // Extract the current `ExportMetricsServiceRequest` message to parse
        const message = data.subarray(messageFrom, messageTo)

        // Parse the current message using the ProtoBuf library
        const parsed =
            pbMetrics.ExportMetricsServiceRequest.deserializeBinary(message)

        // Do whatever we want with the parsed message
        result.push(parsed.toObject())

        // Shrink the remaining buffer, removing the already parsed data
        data = data.subarray(messageTo)
    }

    return result
}
```

**Python**

Debe leer los delimitadores `var-int` usted mismo o utilizar los métodos internos `_VarintBytes(size)` y `_DecodeVarint32(buffer, position)`. Estos devuelven la posición en el búfer justo después de los bytes. El lado de lectura construye un nuevo búfer que se limita a leer sólo los bytes del mensaje. 

```
size = my_metric.ByteSize()
f.write(_VarintBytes(size))
f.write(my_metric.SerializeToString())
msg_len, new_pos = _DecodeVarint32(buf, 0)
msg_buf = buf[new_pos:new_pos+msg_len]
request = metrics_service_pb.ExportMetricsServiceRequest()
request.ParseFromString(msg_buf)
```

**Go**

Utilice `Buffer.DecodeMessage()`.

**C\$1**

Utilice `CodedInputStream`. Esta clase puede leer mensajes delimitados por tamaño.

**C\$1\$1**

Las funciones descritas en `google/protobuf/util/delimited_message_util.h` pueden leer mensajes delimitados por tamaño.

**Otros idiomas**

Para ver otros idiomas, consulte [Download Protocol Buffers](https://developers.google.com/protocol-buffers/docs/downloads) (Descargar búferes de protocolo).

Al implementar el analizador, tenga en cuenta que un registro Kinesis puede contener varios mensajes de búferes de protocolo `ExportMetricsServiceRequest`, cada uno de ellos con un encabezado con un `UnsignedVarInt32` que indica la longitud de registro en bytes.

# Salida de flujos de métricas de CloudWatch en formato OpenTelemetry 0.7.0
<a name="CloudWatch-metric-streams-formats-opentelemetry"></a>

OpenTelemetry es una colección de herramientas, API y SDK. Puede utilizarlo para instrumentar, generar, recopilar y exportar datos telemétricos (métricas, registros y seguimientos) para analizarlos. OpenTelemetry es parte de Cloud Native Computing Foundation. Para obtener más información, consulte [OpenElemetry](https://opentelemetry.io/).

Para obtener información acerca de la especificación completa de OpenTelemetry 0.7.0, consulte [v0.7.0 release](https://github.com/open-telemetry/opentelemetry-proto/releases/tag/v0.7.0) (Versión v0.7.0).

Un registro de Kinesis puede contener una o más estructuras de datos OpenTelemetry `ExportMetricsServiceRequest`. Cada estructura de datos comienza con una cabecera con un `UnsignedVarInt32` que indica la longitud de registro en bytes. Cada `ExportMetricsServiceRequest` puede contener datos de varias métricas a la vez.

A continuación, se muestra una cadena de representación del mensaje de la estructura de datos OpenTelemetry `ExportMetricsServiceRequest`. OpenTelemetry serializa el protocolo binario Google Protocol Buffers y este no es legible para el ser humano.

```
resource_metrics {
  resource {
    attributes {
      key: "cloud.provider"
      value {
        string_value: "aws"
      }
    }
    attributes {
      key: "cloud.account.id"
      value {
        string_value: "2345678901"
      }
    }
    attributes {
      key: "cloud.region"
      value {
        string_value: "us-east-1"
      }
    }
    attributes {
      key: "aws.exporter.arn"
      value {
        string_value: "arn:aws:cloudwatch:us-east-1:123456789012:metric-stream/MyMetricStream"
      }
    }
  }
  instrumentation_library_metrics {
    metrics {
      name: "amazonaws.com/AWS/DynamoDB/ConsumedReadCapacityUnits"
      unit: "1"
      double_summary {
        data_points {
          labels {
            key: "Namespace"
            value: "AWS/DynamoDB"
          }
          labels {
            key: "MetricName"
            value: "ConsumedReadCapacityUnits"
          }
          labels {
            key: "TableName"
            value: "MyTable"
          }
          start_time_unix_nano: 1604948400000000000
          time_unix_nano: 1604948460000000000
          count: 1
          sum: 1.0
          quantile_values {
            quantile: 0.0
            value: 1.0
          }
          quantile_values {
            quantile: 0.95
            value: 1.0
          }          
          quantile_values {
            quantile: 0.99
            value: 1.0
          }
          quantile_values {
            quantile: 1.0
            value: 1.0
          }
        }
        data_points {
          labels {
            key: "Namespace"
            value: "AWS/DynamoDB"
          }
          labels {
            key: "MetricName"
            value: "ConsumedReadCapacityUnits"
          }
          labels {
            key: "TableName"
            value: "MyTable"
          }
          start_time_unix_nano: 1604948460000000000
          time_unix_nano: 1604948520000000000
          count: 2
          sum: 5.0
          quantile_values {
            quantile: 0.0
            value: 2.0
          }
          quantile_values {
            quantile: 1.0
            value: 3.0
          }
        }
      }
    }
  }
}
```

**Objeto de nivel superior para serializar datos de métrica de OpenTelemetry**

`ExportMetricsServiceRequest` es el envoltorio de nivel superior para serializar una carga del exportador de OpenTelemetry. Contiene uno o más `ResourceMetrics`.

```
message ExportMetricsServiceRequest {
  // An array of ResourceMetrics.
  // For data coming from a single resource this array will typically contain one
  // element. Intermediary nodes (such as OpenTelemetry Collector) that receive
  // data from multiple origins typically batch the data before forwarding further and
  // in that case this array will contain multiple elements.
  repeated opentelemetry.proto.metrics.v1.ResourceMetrics resource_metrics = 1;
}
```

`ResourceMetrics` es el objeto de nivel superior para representar objetos MetricData. 

```
// A collection of InstrumentationLibraryMetrics from a Resource.
message ResourceMetrics {
  // The resource for the metrics in this message.
  // If this field is not set then no resource info is known.
  opentelemetry.proto.resource.v1.Resource resource = 1;
  
  // A list of metrics that originate from a resource.
  repeated InstrumentationLibraryMetrics instrumentation_library_metrics = 2;
}
```

**El objeto recurso**

Un objeto `Resource` es un objeto de par de valores que contiene información sobre el recurso que generó las métricas. Para las métricas que AWS crea, la estructura de datos contiene el Nombre de recurso de Amazon (ARN) del recurso relacionado con la métrica, como una instancia EC2 o un bucket de S3.

El objeto `Resource` contiene un atributo llamado `attributes`, que almacena una lista de pares clave-valor.
+ `cloud.account.id` contiene el ID de la cuenta
+ `cloud.region` contiene la Región
+ `aws.exporter.arn` contiene el ARN del flujo métrico
+ `cloud.provider` es siempre `aws`.

```
// Resource information.
message Resource {
  // Set of labels that describe the resource.
  repeated opentelemetry.proto.common.v1.KeyValue attributes = 1;
  
  // dropped_attributes_count is the number of dropped attributes. If the value is 0,
  // no attributes were dropped.
  uint32 dropped_attributes_count = 2;
}
```

**El objeto InstrumentationLibraryMetrics**

El campo instrumentation\$1library no se rellenará. Se rellenará sólo el campo de métricas que se está exportando.

```
// A collection of Metrics produced by an InstrumentationLibrary.
message InstrumentationLibraryMetrics {
  // The instrumentation library information for the metrics in this message.
  // If this field is not set then no library info is known.
  opentelemetry.proto.common.v1.InstrumentationLibrary instrumentation_library = 1;
  // A list of metrics that originate from an instrumentation library.
  repeated Metric metrics = 2;
}
```

**El objeto métrica**

El objeto métrica contiene un campo de datos `DoubleSummary` que contiene una lista de `DoubleSummaryDataPoint`.

```
message Metric {
  // name of the metric, including its DNS name prefix. It must be unique.
  string name = 1;

  // description of the metric, which can be used in documentation.
  string description = 2;

  // unit in which the metric value is reported. Follows the format
  // described by http://unitsofmeasure.org/ucum.html.
  string unit = 3;

  oneof data {
    IntGauge int_gauge = 4;
    DoubleGauge double_gauge = 5;
    IntSum int_sum = 6;
    DoubleSum double_sum = 7;
    IntHistogram int_histogram = 8;
    DoubleHistogram double_histogram = 9;
    DoubleSummary double_summary = 11;
  }
}

message DoubleSummary {
  repeated DoubleSummaryDataPoint data_points = 1;
}
```

**El objeto MetricDescriptor**

El objeto MetricDescriptor contiene metadatos. Para obtener más información, consulte [metrics.proto](https://github.com/open-telemetry/opentelemetry-proto/blob/main/opentelemetry/proto/metrics/v1/metrics.proto#L110) en GitHub.

Para flujos métricos, MetricDescriptor cuenta con el siguiente contenido:
+ `name` será `amazonaws.com/metric_namespace/metric_name`
+ `description` estará en blanco.
+ `unit` se rellenará al mapear la unidad del dato métrico a la variante de reconocimiento de mayúsculas y minúsculas del código unificado para unidades de medida. Para obtener más información, consulte [Conversiones con formato OpenTelemetry 0.7.0 en CloudWatch](CloudWatch-metric-streams-formats-opentelemetry-translation.md) y [The Unified Code For Units of Measure](https://ucum.org/ucum.html) (Código unificado para las unidades de medida).
+ `type` será `SUMMARY`.

**El objeto DoubleSummaryDataPoint**

El objeto DoubleSummaryDataPoint contiene el valor de un único punto de datos de una serie temporal en una métrica DoubleSummary.

```
// DoubleSummaryDataPoint is a single data point in a timeseries that describes the
// time-varying values of a Summary metric.
message DoubleSummaryDataPoint {
  // The set of labels that uniquely identify this timeseries.
  repeated opentelemetry.proto.common.v1.StringKeyValue labels = 1;

  // start_time_unix_nano is the last time when the aggregation value was reset
  // to "zero". For some metric types this is ignored, see data types for more
  // details.
  //
  // The aggregation value is over the time interval (start_time_unix_nano,
  // time_unix_nano].
  //
  // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January
  // 1970.
  //
  // Value of 0 indicates that the timestamp is unspecified. In that case the
  // timestamp may be decided by the backend.
  fixed64 start_time_unix_nano = 2;

  // time_unix_nano is the moment when this aggregation value was reported.
  //
  // Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January
  // 1970.
  fixed64 time_unix_nano = 3;

  // count is the number of values in the population. Must be non-negative.
  fixed64 count = 4;

  // sum of the values in the population. If count is zero then this field
  // must be zero.
  double sum = 5;

  // Represents the value at a given quantile of a distribution.
  //
  // To record Min and Max values following conventions are used:
  // - The 1.0 quantile is equivalent to the maximum value observed.
  // - The 0.0 quantile is equivalent to the minimum value observed.
  message ValueAtQuantile {
    // The quantile of a distribution. Must be in the interval
    // [0.0, 1.0].
    double quantile = 1;

    // The value at the given quantile of a distribution.
    double value = 2;
  }

  // (Optional) list of values at different quantiles of the distribution calculated
  // from the current snapshot. The quantiles must be strictly increasing.
  repeated ValueAtQuantile quantile_values = 6;
}
```

Para obtener más información, consulte [Conversiones con formato OpenTelemetry 0.7.0 en CloudWatch](CloudWatch-metric-streams-formats-opentelemetry-translation.md).

# Conversiones con formato OpenTelemetry 0.7.0 en CloudWatch
<a name="CloudWatch-metric-streams-formats-opentelemetry-translation"></a>

CloudWatch realiza algunas transformaciones para poner los datos de CloudWatch en formato OpenTelemetry.

**Conversión de espacio de nombres, nombre de métrica y dimensiones**

Estos atributos son pares clave-valor codificados en el mapeo.
+ Un par contiene el espacio de nombres de la métrica
+ Un par contiene el nombre de la métrica
+ Para cada dimensión, CloudWatch almacena el siguiente par: `metricDatum.Dimensions[i].Name, metricDatum.Dimensions[i].Value`

**Conversión de promedio, suma, recuento de muestra, mínima y máxima**

El punto de datos de resumen permite que CloudWatch exporte todas estas estadísticas mediante un punto de datos.
+ `startTimeUnixNano` contiene el de CloudWatch `startTime`
+ `timeUnixNano` contiene el de CloudWatch `endTime`
+ `sum` contiene la estadística de la suma.
+ `count` contiene la estadística del recuento de muestra.
+ `quantile_values` contiene dos objetos `valueAtQuantile.value`:
  + `valueAtQuantile.quantile = 0.0` con `valueAtQuantile.value = Min value`
  + `valueAtQuantile.quantile = 0.99` con `valueAtQuantile.value = p99 value`
  + `valueAtQuantile.quantile = 0.999` con `valueAtQuantile.value = p99.9 value`
  + `valueAtQuantile.quantile = 1.0` con `valueAtQuantile.value = Max value`

Los recursos que consumen el flujo métrico pueden calcular la estadística promedio como **Sum/SampleCount** (Suma/recuento de muestra).

**Conversión de unidades**

Las unidades de CloudWatch se mapean a la variante de reconocimiento de mayúsculas y minúsculas del código unificado para unidades de medida, como se muestra en la siguiente tabla. Para obtener más información, consulte [The Unified Code For Units of Measure](https://ucum.org/ucum.html) (Código unificado para las unidades de medida).


| CloudWatch | OpenTelemetry | 
| --- | --- | 
|  Segundo |  s | 
|  Segundo o segundos |  s | 
|  Microsegundo |  EE. UU. | 
|  Milisegundos |  ms | 
|  Bytes |  B | 
|  Kilobytes |  KB | 
|  Megabytes |  MB | 
|  Gigabytes |  GB | 
|  Terabytes |  TB | 
|  Bits |  bit | 
|  Kilobits |  Kbit | 
|  Megabits |  Mbit | 
|  Gigabits |  Gbit | 
|  Terabits |  Tbit | 
|  Porcentaje |  % | 
|  Recuento |  \$1Count\$1 | 
|  Ninguno |  1 | 

Las unidades que se combinan con una barra diagonal se asignan mediante la conversión OpenTelemetry de ambas unidades. Por ejemplo, Bytes/segundo se asigna a B/s.

# Descubra cómo se analizan los mensajes de OpenTelemetry 0.7.0
<a name="CloudWatch-metric-streams-formats-opentelemetry-parse"></a>

En esta sección se proporciona información que le ayudará a comenzar a analizar OpenTelemetry 0.7.0.

En primer lugar, debe obtener enlaces específicos de idioma, que le permiten analizar mensajes OpenTelemetry 0.7.0 en el idioma de su preferencia.

**Para obtener enlaces específicos de idioma**
+ Los pasos dependen del idioma que prefiera.
  + Para utilizar Java, agregue la siguiente dependencia de Maven a su proyecto de Java: [OpenTelemetry Java >> 0.14.1](https://mvnrepository.com/artifact/io.opentelemetry/opentelemetry-proto/0.14.1).
  + Para utilizar cualquier otro idioma, siga estos pasos:

    1. Asegúrese de que su idioma es compatible; puede verificarlo en la lista en [Generating Your Classes](https://developers.google.com/protocol-buffers/docs/proto3#generating) (Generación de clases).

    1. Instale el compilador Protobuf con los pasos que se indican en [Download Protocol Buffers](https://developers.google.com/protocol-buffers/docs/downloads) (Descargar búferes de protocolo).

    1. Descargue las definiciones de OpenTelemetry 0.7.0 ProtoBuf en [v0.7.0 release](https://github.com/open-telemetry/opentelemetry-proto/releases/tag/v0.7.0) (Versión v0.7.0). 

    1. Confirme que se encuentra en la carpeta raíz de las definiciones OpenTelemetry 0.7.0 ProtoBuf descargadas. Después, cree una carpeta de `src` y, a continuación, ejecute el comando para generar enlaces específicos de idioma. Para obtener más información, consulte [Generating Your Classes](https://developers.google.com/protocol-buffers/docs/proto3#generating) (Generación de clases). 

       A continuación se muestra un ejemplo de cómo se generan los enlaces de Javascript.

       ```
       protoc --proto_path=./ --js_out=import_style=commonjs,binary:src \
       opentelemetry/proto/common/v1/common.proto \
       opentelemetry/proto/resource/v1/resource.proto \
       opentelemetry/proto/metrics/v1/metrics.proto \
       opentelemetry/proto/collector/metrics/v1/metrics_service.proto
       ```

En la siguiente sección se incluyen ejemplos de uso de enlaces específicos de idioma que se pueden crear mediante las instrucciones anteriores.

**Java**

```
package com.example;

import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class MyOpenTelemetryParser {

    public List<ExportMetricsServiceRequest> parse(InputStream inputStream) throws IOException {
        List<ExportMetricsServiceRequest> result = new ArrayList<>();

        ExportMetricsServiceRequest request;
        /* A Kinesis record can contain multiple `ExportMetricsServiceRequest`
           records, each of them starting with a header with an
           UnsignedVarInt32 indicating the record length in bytes:
            ------ --------------------------- ------ -----------------------
           |UINT32|ExportMetricsServiceRequest|UINT32|pExportMetricsService...
            ------ --------------------------- ------ -----------------------
         */
        while ((request = ExportMetricsServiceRequest.parseDelimitedFrom(inputStream)) != null) {
            // Do whatever we want with the parsed message
            result.add(request);
        }

        return result;
    }
}
```

**Javascript**

En este ejemplo se asume que la carpeta raíz con los enlaces generados es `./`

El argumento de datos de la función `parseRecord` puede tratarse de uno de los siguientes tipos:
+ `Uint8Array` es opcional.
+ `Buffer` óptimo debajo del nodo
+ `Array.number` enteros de 8 bits

```
const pb = require('google-protobuf')
const pbMetrics =
    require('./opentelemetry/proto/collector/metrics/v1/metrics_service_pb')

function parseRecord(data) {
    const result = []

    // Loop until we've read all the data from the buffer
    while (data.length) {
        /* A Kinesis record can contain multiple `ExportMetricsServiceRequest`
           records, each of them starting with a header with an
           UnsignedVarInt32 indicating the record length in bytes:
            ------ --------------------------- ------ -----------------------
           |UINT32|ExportMetricsServiceRequest|UINT32|ExportMetricsService...
            ------ --------------------------- ------ -----------------------
         */
        const reader = new pb.BinaryReader(data)
        const messageLength = reader.decoder_.readUnsignedVarint32()
        const messageFrom = reader.decoder_.cursor_
        const messageTo = messageFrom + messageLength

        // Extract the current `ExportMetricsServiceRequest` message to parse
        const message = data.subarray(messageFrom, messageTo)

        // Parse the current message using the ProtoBuf library
        const parsed =
            pbMetrics.ExportMetricsServiceRequest.deserializeBinary(message)

        // Do whatever we want with the parsed message
        result.push(parsed.toObject())

        // Shrink the remaining buffer, removing the already parsed data
        data = data.subarray(messageTo)
    }

    return result
}
```

**Python**

Debe leer los delimitadores `var-int` usted mismo o utilizar los métodos internos `_VarintBytes(size)` y `_DecodeVarint32(buffer, position)`. Estos devuelven la posición en el búfer justo después de los bytes. El lado de lectura construye un nuevo búfer que se limita a leer sólo los bytes del mensaje. 

```
size = my_metric.ByteSize()
f.write(_VarintBytes(size))
f.write(my_metric.SerializeToString())
msg_len, new_pos = _DecodeVarint32(buf, 0)
msg_buf = buf[new_pos:new_pos+msg_len]
request = metrics_service_pb.ExportMetricsServiceRequest()
request.ParseFromString(msg_buf)
```

**Go**

Utilice `Buffer.DecodeMessage()`.

**C\$1**

Utilice `CodedInputStream`. Esta clase puede leer mensajes delimitados por tamaño.

**C\$1\$1**

Las funciones descritas en `google/protobuf/util/delimited_message_util.h` pueden leer mensajes delimitados por tamaño.

**Otros idiomas**

Para ver otros idiomas, consulte [Download Protocol Buffers](https://developers.google.com/protocol-buffers/docs/downloads) (Descargar búferes de protocolo).

Al implementar el analizador, tenga en cuenta que un registro Kinesis puede contener varios mensajes de búferes de protocolo `ExportMetricsServiceRequest`, cada uno de ellos con un encabezado con un `UnsignedVarInt32` que indica la longitud de registro en bytes.

# Solución de problemas de flujos de métricas en CloudWatch
<a name="CloudWatch-metric-streams-troubleshoot"></a>

Si no ve datos de métricas en el destino final, verifique lo siguiente:
+ Verifique que la secuencia métrica esté en el estado de ejecución. Para obtener pasos acerca de cómo utilizar la consola de CloudWatch para hacerlo, consulte [Operación y mantenimiento del flujo métrico](CloudWatch-metric-streams-operation.md).
+ Las métricas publicadas hace más de dos días no se transmiten. Para determinar si se transmitirá una métrica concreta, grafique la métrica en la consola de CloudWatch y compruebe qué antigüedad tiene el último punto de datos visible. Si han pasado más de dos días, los flujos métricos no lo recogerán.
+ Verifique las métricas que el flujo métrico emite. En la consola de CloudWatch, en **Métricas**, busque en el espacio de nombres **AWS/CloudWatch/MetricStreams** las métricas **MetricUpdate**, **TotalMetricUpdate** y **PublishErrorRate**.
+ Si la métrica **PublishErrorRate** es alta, confirme que existe el destino que utiliza el flujo de entrega de Firehose y que el rol de IAM especificado en la configuración del flujo métrico otorga los permisos principales del servicio `CloudWatch` para escribir en él. Para obtener más información, consulte [Confianza entre CloudWatch y Firehose](CloudWatch-metric-streams-trustpolicy.md).
+ Verifique que el flujo de entrega de Firehose tenga permiso para escribir en el destino final.
+ En la consola de Firehose, vea el flujo de entrega de Firehose que se utiliza para el flujo métrico y verifique la pestaña **Monitoreo** para ver si el flujo de entrega de Firehose está recibiendo datos.
+ Confirme que ha configurado el flujo de entrega de Firehose con los detalles correctos.
+ Verifique los registros o métricas disponibles para el destino final en el que el flujo de entrega de Firehose escribe.
+ Para obtener información más detallada, habilite el registro de errores de Registros de CloudWatch en el flujo de entrega de Firehose. Para obtener más información, consulte [Supervisión de Amazon Data Firehose mediante Registros de CloudWatch](https://docs.aws.amazon.com/firehose/latest/dev/monitoring-with-cloudwatch-logs.html).

**nota**  
Después de enviar un punto de datos para una métrica y marca de tiempo específicas, no se volverá a enviar aunque el valor del punto de datos cambie posteriormente.