

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# JSON 格式的 CloudWatch 指標串流輸出
<a name="CloudWatch-metric-streams-formats-json"></a>

在使用 JSON 格式的 CloudWatch 指標串流中，每個 Firehose 記錄都包含多個 JSON 物件，並以行符號字元 (\\n) 分隔。每個物件都包含單一指標的單一資料點。

使用的 JSON 格式與 AWS Glue 和 Amazon Athena 完全相容。如果您有 Firehose 交付串流且 AWS Glue 資料表格式正確，則格式可以自動轉換為 Parquet 格式或最佳化資料列單欄式 (ORC) 格式，然後再存放在 S3 中。如需轉換格式的詳細資訊，請參閱[在 Firehose 中轉換輸入記錄格式](https://docs.aws.amazon.com/firehose/latest/dev/record-format-conversion.html)。如需 正確格式的詳細資訊 AWS Glue，請參閱 [我應該將哪個結構描述用於 JSON AWS Glue 輸出格式？](#CloudWatch-metric-streams-format-glue)。

在 JSON 格式中，`unit` 的有效值與 `MetricDatum` API 結構中的 `unit` 的值相同。如需詳細資訊，請參閱[ MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html)。`timestamp` 欄位的值以 epoch 毫秒為單位，例如 `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 輸出格式？
<a name="CloudWatch-metric-streams-format-glue"></a>

以下是 AWS Glue 資料表的 JSON `StorageDescriptor` 表示法範例，然後 Firehose 會使用。如需有關 `StorageDescriptor` 的詳細資訊，請參閱 [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"
  }
}
```

上述範例適用於以 JSON 格式撰寫在 Simple Storage Service (Amazon S3) 上的資料。將下列欄位中的值取代為指出的值，以 Parquet 格式或最佳化列單欄式 (ORC) 格式存放資料。
+ **Parquet：**
  + inputFormat: org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat
  + outputFormat: org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat
  + 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.org.apache.hadoop.hive.ql.io.orcserde
  + parameters.classification: orc