在使用 JSON 格式的 CloudWatch 指标流中,每条 Firehose 记录都包含多个由换行符(\n)分隔的 JSON 对象。每个对象包含单个指标的单一数据点。
所使用的 JSON 格式与 AWS Glue 和 Amazon Athena 完全兼容。如果您的 Firehose 传输流和 AWS Glue 表格的格式均正确,则格式可以自动转换为 Parquet 格式或优化的行列式(ORC)格式,然后再存储在 S3 中。有关转换格式的更多信息,请参阅在 Firehose 中转换输入记录格式。有关 AWS Glue 的正确格式的更多信息,请参阅 我应该对 JSON 输出格式使用哪个 AWS Glue 架构?。
在 JSON 格式中,unit
的有效值与 MetricDatum
API 结构中 unit
的值相同。有关更多信息,请参阅 MetricDatum。timestamp
字段的值以纪元毫秒为单位,例如 1616004674229
。
以下为格式示例。在本示例中,JSON 所用格式的目的是便于查看,但实际上,整个格式应位于一行上。
{
"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"
}
我应该对 JSON 输出格式使用哪个 AWS Glue 架构?
以下是 AWS Glue 表的 StorageDescriptor
的 JSON 表示(之后由 Firehose 使用)示例。有关 StorageDescriptor
的更多信息,请参阅 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"
}
}
上面的示例适用于以 JSON 格式在 Amazon S3 上写入的数据。将以下字段中的值替换为指定的值,以便以 Parquet 格式或 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