

亚马逊 Monitron 不再向新客户开放。现有客户可以继续正常使用该服务。如需了解与 Amazon Monitron 类似的功能，请参阅我们的[博客文章](https://aws.amazon.com/blogs/machine-learning/maintain-access-and-consider-alternatives-for-amazon-monitron)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon Monitron Kinesis 数据导出 v1
<a name="monitron-kinesis-export"></a>

**注意**  
Amazon Monitron Kinesis 数据导出架构 v1 已被弃用。请详细了解 [v2 数据导出架构](monitron-kinesis-export-v2.md)。

您可以从 Amazon Monitron 导出传入的测量数据和相应的推理结果，然后进行实时分析。数据导出会将实时数据流式传输到 Kinesis。

**Topics**
+ [将数据导出到 Kinesis 流](#exporting-stream-procedure)
+ [编辑实时数据导出设置](#edit-live-export)
+ [停止实时数据导出](#stop-kinesis-export)
+ [查看数据导出错误](#viewing-kinesis-export-errors)
+ [对 Kinesis 流使用服务器端加密](#data-export-server-side-encryption)
+ [使用 Amazon CloudWatch 日志进行监控](data-export-cloudwatch-logs.md)
+ [将导出的数据存储在 Amazon S3 中](kinesis-store-S3.md)
+ [使用 Lambda 处理数据](data-export-lambda.md)
+ [了解 v1 数据导出架构](data-export-schema.md)

## 将数据导出到 Kinesis 流
<a name="exporting-stream-procedure"></a>

1. 在项目主页面靠近页面底部的右侧，选择**启动实时数据导出**。

1. 在**选择 Amazon Kinesis 数据流**下，执行以下任一操作：
   + 在搜索框中输入现有数据流的名称。然后跳至步骤 5。
   + 选择**创建新数据流**。

1. 在**创建数据流**页面的**数据流配置**下，输入您的数据流名称。

1. 在“数据流容量”下，选择您的容量模式：
   + 如果数据流的吞吐量需求不可预测且不稳定，请选择**按需**。
   + 如果您能够可靠地估算数据流的吞吐量需求，请选择**预置**。然后，在“预置分片”下，输入要创建的分片数量，或者选择**分片估算器**。

1. 选择**创建数据流**。

## 编辑实时数据导出设置
<a name="edit-live-export"></a>

要编辑实时数据导出设置，请执行以下操作：

1. 打开 Amazon Monitron 控制台。

1. 从导航窗格中选择**项目**。

1. 如果您有多个项目，请选择要编辑其导出设置的项目。

1. 在项目主页面的**实时数据导出**下，从**操作**下拉菜单中选择**编辑实时数据导出设置**。

## 停止实时数据导出
<a name="stop-kinesis-export"></a>

1. 打开 Amazon Monitron 控制台。

1. 从导航窗格中选择**项目**。

1. 如果您有多个项目，请选择要编辑其导出设置的项目。

1. 在项目主页面的**实时数据导出**下，从**操作**下拉菜单中选择**停止实时数据导出**。

1. 在弹出窗口中，选择**停止**。

## 查看数据导出错误
<a name="viewing-kinesis-export-errors"></a>

要在 “ CloudWatch 日志” 界面中查看错误消息，请执行以下操作：
+ 在 Amazon Monitron 控制台上，从项目主页的**实时数据导出**下，选择**CloudWatch 日志**组。

## 对 Kinesis 流使用服务器端加密
<a name="data-export-server-side-encryption"></a>

您可以在设置 Kinesis 数据导出前为 Kinesis 流启用服务器端加密。但是，如果在设置 Kinesis 数据导出后再启用服务器端加密，Amazon Monitron 将无法发布到流。那是因为亚马逊 Monitron 无权调用 kms[: GenerateDataKey 这样它就可以加密发送到 K](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) inesis 的数据。

要解决此问题，请按照[编辑实时数据导出设置](#edit-live-export)下的说明进行操作，但不要更改配置。这会将您已设置的加密与您的导出配置关联。

# 使用 Amazon CloudWatch 日志进行监控
<a name="data-export-cloudwatch-logs"></a>

您可以使用亚马逊日志监控 Amazon Monitron 的实时数据导出。 CloudWatch 当测量结果无法导出时，Amazon Monitron 会将日志事件发送到您的 CloudWatch 日志。您还可以针对错误日志设置指标筛选条件，以生成指标和设置警报。警报可以监测特定阈值，并在达到相应阈值时发送通知或执行操作。有关更多信息，请参阅[《 CloudWatch 用户指南》](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)。

Amazon Monitron 将日志事件发送到/ aws/monitron/data-export/ \$1HASH\$1ID\$1 日志组。

日志事件采用以下 JSON 格式：

```
{ 
    "assetDisplayName": "string", 
    "destination": "string", 
    "errorCode": "string", 
    "errorMessage": "string", 
    "eventId": "string", 
    "positionDisplayName": "string", 
    "projectDisplayName": "string", 
    "projectName": "string", 
    "sensorId": "string", 
    "siteDisplayName": "string", 
    "timestamp": "string"
}
```

assetDisplayName  
+ 应用程序中显示的资产名称
+ 类型：字符串

destination  
+ Kinesis 数据流的 ARN
+ 类型：字符串
+ 模式：arn: aws: kinesis: \$1\$1REGION\$1\$1: \$1\$1AWS\$1ACCOUNT\$1ID\$1\$1: stream/ \$1\$1STREAM\$1NAME\$1\$1

errorCode  
+ 错误代码
+ 类型：字符串
+ 有效值：`INTERNAL_SEVER_ERROR | KINESIS_RESOURCE_NOT_FOUND | KINESIS_PROVISIONED_THROUGHPUT_EXCEEDED | KMS_ACCESS_DENIED | KMS_NOT_FOUND | KMS_DISABLED | KMS_INVALID_STATE | KMS_THROTTLING`

errorMessage  
+ 详细错误消息
+ 类型：字符串

eventId  
+ 与每次测量数据导出对应的唯一事件 ID
+ 类型：字符串

positionDisplayName  
+ 应用程序中显示的传感器位置名称
+ 类型：字符串

sensorId  
+ 发出测量数据的传感器的物理 ID
+ 类型：字符串

siteDisplayName  
+ 应用程序中显示的站点名称
+ 类型：字符串

timestamp  
+ Amazon Monitron 服务接收测量数据时的时间戳（UTC 格式）
+ 类型：字符串
+ 图案： yyyy-mm-ddHH: mm: ss.sss

# 将导出的数据存储在 Amazon S3 中
<a name="kinesis-store-S3"></a>

**Topics**
+ [使用预定义的 CloudFormation 模板](#kinesis-cloudfront-makestack)
+ [在控制台中手动配置 Kinesis](#kinesis-configure-console)

## 使用预定义的 CloudFormation 模板
<a name="kinesis-cloudfront-makestack"></a>

Amazon Monitron 提供了一个预定义的 AWS CloudFormation 模板，可帮助快速设置 Firehose，将数据从 Kinesis 数据流传输到 Amazon S3 存储桶。该模板支持动态分区，并且传输的 Amazon S3 对象将使用 Amazon Monitron 推荐的以下键格式：`/project={projectName}/site={siteName}/time={yyyy-mm-dd 00:00:00}/{filename}`

1. 登录您的 AWS 账户。

1. 使用以下 URL 打开一个新的浏览器标签页：

   ```
   https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/create/review?templateURL=https://s3.us-east-1.amazonaws.com/monitron-cloudformation-templates-us-east-1/monitron_kinesis_data_export.yaml&stackName=monitron-kinesis-live-data-export
   ```

1. 在打开的 CloudFormation 页面的右上角，选择您正在使用 Amazon Monitron 的区域。

1. 默认情况下，该模板将创建新的 Kinesis 数据流和 S3 桶，并创建将数据传输到 Amazon S3 所需的其他资源。您可以更改参数以使用现有资源。

1. 勾选显示*我确认 AWS CloudFormation 可能会创建 IAM 资源的复选框。*

1. 选择**创建堆栈**。

1. 在下一页上，按照任意频率单击刷新图标，直到堆栈的状态变为“CREATE\$1COMPLETE”为止。

## 在控制台中手动配置 Kinesis
<a name="kinesis-configure-console"></a>

1. 登录 AWS 管理控制台并打开 Kinesis 控制台，网址为 /kinesis。 https://console.aws.amazon.com

1. 在导航窗格中，选择**传输流**。

1. 选择**创建传输流**。

1. 对于“源”，选择 **Amazon Kinesis Data Streams**。

1. 对于“目标”，选择 **Amazon S3**。

1. 在**源设置、Kinesis 数据流**下，输入 Kinesis 数据流的 ARN。

1. 在**传输流名称**下，输入 Kinesis 数据流的名称。

1. 在**目标设置**下，选择一个 Amazon S3 桶或输入一个桶 URI。

1. （可选）启用使用 JSON 内联解析的动态分区。如果您想基于源信息和时间戳对流测量数据进行分区，则可以选择此选项。例如：
   + 针对**动态分区**选择**启用**。
   + 针对**换行分隔符**选择**启用**。
   + 针对 **JSON 内联解析**选择**启用**。
   + 在**动态分区键**下，添加：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/Monitron/latest/user-guide/kinesis-store-S3.html)

1. 选择**应用动态分区键**并确认生成的 Amazon S3 桶前缀为 `!{partitionKeyFromQuery:project}/!{partitionKeyFromQuery:site}/!{partitionKeyFromQuery:time}/`。

1. 在 Amazon S3 中，对象将使用以下键格式：`/project={projectName}/site={siteName}/time={yyyy-mm-dd 00:00:00}/{filename}`。

1. 选择**创建传输流**。

1. （可选）使用更精细的路径。

   如果您选择动态分区，请使用之前的 Amazon S3 密钥格式（如果您打算使用 AWS Glue 和 Athena 来查询数据）。您也可以选择更精细的键格式，但 Amazon Athena 查询的效率会降低。以下是设置更精细的 Amazon S3 键路径的示例。

   在**动态分区键**下，添加：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/Monitron/latest/user-guide/kinesis-store-S3.html)

   在 Amazon S3 中，对象将使用以下键格式：` /project={projectName}/site={siteName}/asset={assetName}/position={positionName}/sensor={sensorId}/date={yyyy-mm-dd}/time={HH:MM:SS}/{filename}`

# 使用 Lambda 处理数据
<a name="data-export-lambda"></a>

**Topics**
+ [步骤 1：创建 [IAM 角色](https://docs.aws.amazon.com//lambda/latest/dg/lambda-intro-execution-role.html)以向您的函数授予访问 AWS 资源的权限](#create-iam-role)
+ [步骤 2：创建 Lambda 函数](#create-lambda-function)
+ [步骤 3：配置 Lambda 函数](#configure-lambda-function)
+ [步骤 4：在控制台中启用 Kinesis 触发器 AWS Lambda](#enable-lambda-trigger)

## 步骤 1：创建 [IAM 角色](https://docs.aws.amazon.com//lambda/latest/dg/lambda-intro-execution-role.html)以向您的函数授予访问 AWS 资源的权限
<a name="create-iam-role"></a>

1. 在 IAM 控制台中，打开[角色页面](https://console.aws.amazon.com/iam/home?#/roles)。

1. 选择**创建角色**。

1. 创建具有以下属性的角色。
   + 可信实体：Lambda。
   + 权限： AWSLambdaKinesisExecutionRole （以及 Kinesis 直播 AWSKeyManagementServicePowerUser 是否已加密）
   + 角色名称： lambda-kinesis-role  
![\[IAM role creation interface showing name, review, and create steps with role details and permissions.\]](http://docs.aws.amazon.com/zh_cn/Monitron/latest/user-guide/images/lambda-create-role.png)

## 步骤 2：创建 Lambda 函数
<a name="create-lambda-function"></a>

1. 在 Lambda 控制台中打开**函数**页面。

1. 选择**创建函数**。

1. 选择**使用蓝图**。

1. 在**蓝图**搜索栏中，搜索并选择 **kinesis-process-record (nodejs**) 或。**kinesis-process-record-python**

1. 选择**配置**。  
![\[Create function interface with options to author from scratch, use a blueprint, or select container image.\]](http://docs.aws.amazon.com/zh_cn/Monitron/latest/user-guide/images/lambda-create-function.png)

## 步骤 3：配置 Lambda 函数
<a name="configure-lambda-function"></a>

1. 选择**函数名称**。

1. 选择在第一步中创建的角色作为**执行角色**。

1. 配置 Kinesis 触发器。

   1. 选择您的 Kinesis 流。

   1. 单击**创建函数**。  
![\[Lambda function configuration form with basic information and Kinesis trigger settings.\]](http://docs.aws.amazon.com/zh_cn/Monitron/latest/user-guide/images/lambda-kinesis-trigger.png)

## 步骤 4：在控制台中启用 Kinesis 触发器 AWS Lambda
<a name="enable-lambda-trigger"></a>

1. 在**配置**选项卡中，选择**触发器**。

1. 选中 Kinesis 流名称旁边的框，然后选择**启用**。  
![\[Lambda function configuration page with Triggers tab and Kinesis stream trigger highlighted.\]](http://docs.aws.amazon.com/zh_cn/Monitron/latest/user-guide/images/kinesis-process-record-lambda.png)

本示例中使用的蓝图仅使用来自选定数据流的日志数据。您可以在之后进一步编辑 Lambda 函数代码以完成更复杂的任务。

# 了解 v1 数据导出架构
<a name="data-export-schema"></a>

**注意**  
Amazon Monitron Kinesis 数据导出架构 v1 已被弃用。请详细了解 [v2 数据导出架构](monitron-kinesis-export-v2.md)。

每个测量数据及其对应的推理结果都以 JSON 格式导出为一条 Kinesis 数据流记录。

**Topics**
+ [v1 架构格式](#data-export-schema-format)
+ [v1 架构参数](#data-export-schema-parameters)

## v1 架构格式
<a name="data-export-schema-format"></a>

```
{
    "timestamp": "string",
    "eventId": "string",
    "version": "string",
    "projectDisplayName": "string",
    "siteDisplayName": "string",
    "assetDisplayName": "string",
    "sensorPositionDisplayName": "string",
    "sensor": {
        "physicalId": "string",
        "rssi": number
    },
    "gateway": {
        "physicalId": "string"
    },
    "measurement": {
        "features": {
            "acceleration": {
                "band0To6000Hz": {
                    "xAxis": {
                        "rms": number
                    },
                    "yAxis": {
                        "rms": number
                    },
                    "zAxis": {
                        "rms": number
                    }
                },
                "band10To1000Hz": {
                    "resultantVector": {
                        "absMax": number,
                        "absMin": number,
                        "crestFactor": number,
                        "rms": number
                    },
                    "xAxis": {
                        "rms": number
                    },
                    "yAxis": {
                        "rms": number
                    },
                    "zAxis": {
                        "rms": number
                    }
                }
            },
            "temperature": number,
            "velocity": {
                "band10To1000Hz": {
                    "resultantVector": {
                        "absMax": number,
                        "absMin": number,
                        "crestFactor": number,
                        "rms": number
                    },
                    "xAxis": {
                        "rms": number
                    },
                    "yAxis": {
                        "rms": number
                    },
                    "zAxis": {
                        "rms": number
                    }
                }
            }
        },
        "sequenceNo": number
    },
    "models": {
        "temperatureML": {
            "persistentClassificationOutput": "string",
            "pointwiseClassificationOutput": "string"
        },
        "vibrationISO": {
            "isoClass": "string",
            "mutedThreshold": "string",
            "persistentClassificationOutput": "string",
            "pointwiseClassificationOutput": "string"
        },
        "vibrationML": {
            "persistentClassificationOutput": "string",
            "pointwiseClassificationOutput": "string"
        }
    },
    "assetState": {
        "newState": "string",
        "previousState": "string"
    }
}
```

## v1 架构参数
<a name="data-export-schema-parameters"></a>

timestamp  
+ Monitron 服务接收测量数据时的时间戳（UTC 格式）
+ 类型：字符串
+ 图案： yyyy-mm-ddHH: mm: ss.sss

eventId  
+ 为每个测量数据分配的唯一数据导出事件 ID。可用于对收到的 Kinesis 流记录进行重复数据删除。
+ 类型：字符串

版本  
+ 架构版本
+ 类型：字符串
+ 当前值：1.0

projectDisplayName  
+ 应用程序和控制台中显示的项目名称
+ 类型：字符串

siteDisplayName  
+ 应用程序中显示的站点名称
+ 类型：字符串

assetDisplayName  
+ 应用程序中显示的资产名称
+ 类型：字符串

sensorPositionDisplay名称  
+ 应用程序中显示的传感器位置名称
+ 类型：字符串

sensor.physicalId  
+ 发出测量数据的传感器的物理 ID
+ 类型：字符串

sensor.rssi  
+ 传感器蓝牙收到的信号强度指标值
+ 类型：数字
+ 单位：dBm

gateway.physicalId  
+ 用于向 Amazon Monitron 服务传输数据的网关的物理 ID
+ 类型：字符串

measurement.features.acceleration.band0To6000Hz.xAxis.rms  
+ 在 0–6000 Hz 频带内观测到的 x 轴上加速度的均方根
+ 类型：数字
+ 单位：m/s^2

measurement.features.acceleration.band0To6000Hz.yAxis.rms  
+ 在 0–6000 Hz 频带内观测到的 y 轴上加速度的均方根
+ 类型：数字
+ 单位：m/s^2

measurement.features.acceleration.band0To6000Hz.zAxis.rms  
+ 在 0–6000 Hz 频带内观测到的 y 轴上加速度的均方根
+ 类型：数字
+ 单位：m/s^2

measurement.features.acceleration.band10To1000Hz.resultantVector.absMax  
+ 在 10–1000 Hz 频带内观测到的绝对最大加速度
+ 类型：数字
+ 单位：m/s^2

measurement.features.acceleration.band10To1000Hz.resultantVector.absMin  
+ 在 10–1000 Hz 频带内观测到的绝对最小加速度
+ 类型：数字
+ 单位：m/s^2

measurement.features.acceleration.band10To1000Hz.resultantVector.crestFactor  
+ 在 10–1000 Hz 频带内观测到的加速度波峰因数
+ 类型：数字

measurement.features.acceleration.band10To1000Hz.resultantVector.rms  
+ 在 10–1000 Hz 频带内观测到的加速度的均方根
+ 类型：数字
+ m/s^2

measurement.features.acceleration.band10To1000Hz.xAxis.rms  
+ 在 10–1000 Hz 频带内观测到的 x 轴上加速度的均方根
+ 类型：数字
+ m/s^2

measurement.features.acceleration.band10To1000Hz.yAxis.rms  
+ 在 10–1000 Hz 频带内观测到的 y 轴上加速度的均方根
+ 类型：数字
+ m/s^2

measurement.features.acceleration.band10To1000Hz.zAxis.rms  
+ 在 10–1000 Hz 频带内观测到的 z 轴上加速度的均方根
+ 类型：数字
+ m/s^2

measurement.features.temperature  
+ 观测到的温度
+ 类型：数字
+ °C/degC

measurement.features.velocity.band10To1000Hz.resultantVector.absMax  
+ 在 10–1000 Hz 频带内观测到的绝对最大速度
+ 类型：数字
+ mm/s

measurement.features.velocity.band10To1000Hz.resultantVector.absMin  
+ 在 10–1000 Hz 频带内观测到的绝对最小速度
+ 类型：数字
+ mm/s

measurement.features.velocity.band10To1000Hz.resultantVector.crestFactor  
+ 在 10–1000 Hz 频带内观测到的速度波峰因数
+ 类型：数字

measurement.features.velocity.band10To1000Hz.resultantVector.rms  
+ 在 10–1000 Hz 频带内观测到的速度的均方根
+ 类型：数字
+ mm/s

measurement.features.velocity.band10To1000Hz.xAxis.rms  
+ 在 10–1000 Hz 频带内观测到的 x 轴上速度的均方根
+ 类型：数字
+ mm/s

measurement.features.velocity.band10To1000Hz.yAxis.rms  
+ 在 10–1000 Hz 频带内观测到的 y 轴上速度的均方根
+ 类型：数字
+ mm/s

measurement.features.velocity.band10To1000Hz.zAxis.rms  
+ 在 10–1000 Hz 频带内观测到的 z 轴上速度的均方根
+ 类型：数字
+ mm/s

measurement.sequenceNo  
+ 测量数据序列号
+ 类型：数字

models.temperatureM persistentClassificationOutput  
+ 基于机器学习的温度模型的持续分类输出
+ 类型：数字
+ 有效值：`UNKNOWN | HEALTHY | WARNING | ALARM`

models.temperatureM pointwiseClassificationOutput  
+ 基于机器学习的温度模型的逐点分类输出
+ 类型：字符串
+ 有效值：`UNKNOWN | INITIALIZING | HEALTHY | WARNING | ALARM`

models.vibrationISO.isoClass  
+ 基于 ISO 的振动模型使用的 ISO 20816 等级（用于测量和评估机器振动的标准）
+ 类型：字符串
+ 有效值：`CLASS1 | CLASS2 | CLASS3 | CLASS4 | FAN_BV2`

models.vibrationISO.mutedThreshold  
+ 将基于 ISO 的振动模型发出的通知静音的阈值
+ 类型：字符串
+ 有效值：`WARNING | ALARM`

models.vibrationis persistentClassificationOutput  
+ 基于 ISO 的振动模型的持续分类输出
+ 类型：字符串
+ 有效值：`UNKNOWN | HEALTHY | WARNING | ALARM`

models.vibrationis pointwiseClassificationOutput  
+ 基于 ISO 的振动模型的逐点分类输出
+ 类型：字符串
+ 有效值：`UNKNOWN | HEALTHY | WARNING | ALARM | MUTED_WARNING | MUTED_ALARM`

models.vibrationM persistentClassificationOutput  
+ 基于机器学习的振动模型的持续分类输出
+ 类型：字符串
+ 有效值：`UNKNOWN | HEALTHY | WARNING | ALARM`

models.vibrationM pointwiseClassificationOutput  
+ 基于机器学习的振动模型的逐点分类输出
+ 类型：字符串
+ 有效值：`UNKNOWN | INITIALIZING | HEALTHY | WARNING | ALARM`

assetState.newState  
+ 处理测量数据后的机器状态
+ 类型：字符串
+ 有效值：`UNKNOWN | HEALTHY | NEEDS_MAINTENANCE | WARNING | ALARM`

assetState.previousState  
+ 处理测量数据前的机器状态
+ 类型：字符串
+ 有效值：`UNKNOWN | HEALTHY | NEEDS_MAINTENANCE | WARNING | ALARM`