Saída do fluxo de métricas do CloudWatch no formato JSON - Amazon CloudWatch

Saída do fluxo de métricas do CloudWatch no formato JSON

Em um fluxo de métricas do CloudWatch que usa o formato JSON, cada registro do Firehose contém vários objetos JSON separados por um caractere de nova linha (\n). Cada objeto contém um único ponto de dados de uma única métrica.

O formato JSON usado é totalmente compatível com o AWS Glue e com o Amazon Athena. Se você tiver um fluxo de entrega do Firehose e uma tabela do AWS Glue formatada corretamente, o formato poderá ser automaticamente transformado em Parquet ou em colunar de linha otimizado (ORC) antes de ser armazenado no S3. Para obter mais informações sobre como transformar o formato, consulte Converting Your Input Record Format in Firehose. Para obter mais informações sobre o formatos correto para AWS Glue, consulte Que esquema do AWS Glue devo usar para o formato de saída JSON?.

No formato JSON, os valores válidos para unit são os mesmos que para o valor de unit na estrutura da API MetricDatum. Para obter mais informações, consulte MetricDatum. O valor do campo timestamp está em milissegundos epoch, como 1616004674229.

O exemplo a seguir é do formato. Neste exemplo, o JSON está formatado para facilitar a leitura, mas, na prática, todo o formato está em uma única linha.

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

Que esquema do AWS Glue devo usar para o formato de saída JSON?

Veja a seguir um exemplo de uma representação JSON do StorageDescriptor para uma tabela do AWS Glue, que seria usada pelo Firehose. Para obter mais informações sobre 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://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" } }

O exemplo anterior serve para dados gravados no Amazon S3 no formato JSON. Substitua os valores nos campos a seguir pelos valores indicados para armazenar os dados no formato Parquet ou no formato colunar de linha otimizado (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