Formato JSON - Amazon CloudWatch

Formato JSON

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 (\n). 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. 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?.

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. 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 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.

{ "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://my-s3-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