

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

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

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

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

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

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

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

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

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

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

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

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

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

1. 打开 Amazon Monitron 控制台。

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

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

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

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

1. 打开 Amazon Monitron 控制台。

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

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

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

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

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

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

## 对 Kinesis 流使用服务器端加密
<a name="data-export-server-side-encryption-v2"></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-v2)下的说明进行操作，但不要更改配置。这会将您已设置的加密与您的导出配置关联。

# 使用 Amazon CloudWatch 日志进行监控
<a name="data-export-cloudwatch-logs-v2"></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 格式：

```
{
    "assetName": "string",
    "destination": "string",
    "errorCode": "string",
    "errorMessage": "string",
    "eventId": "string",
    "eventType": "string",
    "positionName": "string",
    "projectName": "string",
    "projectId": "string",
    "sensorId": "string",
    "gatewayId": "string",
    "siteName": "string",
    "timestamp": "string"
}
```

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

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
+ 类型：字符串

eventType  
+ 当前事件类型
+ 类型：字符串
+ 有效值：`measurement` ` | gatewayConnected` ` | gatewayDisconnected` ` | sensorConnected` ` | sensorDisconnected` ` | assetStateTransition`

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

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

  

projectID  
+ 与 Amazon Monitron 项目对应的唯一项目 ID
+ 类型：字符串

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

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

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

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

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

如果要将导出的数据存储在 Amazon S3 中，请执行以下程序。

**Topics**
+ [在控制台中手动配置 Kinesis](#kinesis-configure-console-v2)

## 在控制台中手动配置 Kinesis
<a name="kinesis-configure-console-v2"></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-v2.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. 选择**创建传输流**。

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

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

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

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

1. 请选择 **Create role**（创建角色）。

1. 在**选择受信任的实体**页面上，请执行以下操作：
   + 在**可信实体类型**中，选择**AWS 服务**。
   + 在**用例**中，对于**服务或用例**，选择 **Lambda**。
   + 选择**下一步**。  
![\[IAM role creation interface showing trusted entity selection with AWS 服务 option chosen.\]](http://docs.aws.amazon.com/zh_cn/Monitron/latest/user-guide/images/lambda-role-1.png)

1. 在 “**添加权限**” 页面中，执行以下操作：
   + 在**权限策略**中，选择 AWSLambdaKinesisExecutionRole （以及 AWSKeyManagementServicePowerUser 是否已加密 Kinesis 流）。
   + 将 “**设置权限边界”** 中的配置保持不变。
   + 选择**下一步**。  
![\[Add permissions interface showing AWSLambdaKinesisExecutionRole policy selected for a new role.\]](http://docs.aws.amazon.com/zh_cn/Monitron/latest/user-guide/images/lambda-role-2.png)

1. 在 “**名称、查看和创建**” 页面中，执行以下操作：
   + 在**角色详细信息**中，在**角色名称**中，输入角色的名称。例如 *lambda-kinesis-role*。您也可以选择添加可选的**描述**。
   + 保留**步骤 1：选择可信实体**和**步骤 2：按原样添加权限**的设置。您可以选择在**步骤 3：添加标签中添加标签**以跟踪您的资源。  
![\[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)

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

## 步骤 2：创建 Lambda 函数
<a name="create-lambda-function-v2"></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-v2"></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="configure-kinesis-trigger-v2"></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 函数代码以完成更复杂的任务。

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

 每个测量数据、其相应的推理结果、网关connect/disconnect, and sensor connect/disconnect事件都以 JSON 格式导出为一个 Kinesis 数据流记录。

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

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

```
{
    "timestamp": "string",
    "eventId": "string",
    "version": "2.0",
    "accountId": "string",
    "projectName": "string",
    "projectId": "string",
    "eventType": "measurement|gatewayConnected|gatewayDisconnected|sensorConnected|sensorDisconnected|assetStateTransition",
    // measurement
    "eventPayload": {
        "siteName": "string",
        "assetName": "string",
        "positionName": "string",
        "companyName": "string",
        "geoLocation": {
            "latitude": number,
            "longitude": number
        },
        "address": "string",
        "serialNumber": "string",
        "make": "string",
        "model": "string",
        "assetPositionURL": "string",
        "sensor": {
            "physicalId": "string",
            "rssi": number
        },
        "gateway": {
            "physicalId": "string"
        },
        "sequenceNo": number,
        "features": {
            "acceleration": {
                "band0To6000Hz": {
                    "xAxis": {
                        "rms": number
                    },
                    "yAxis": {
                        "rms": number
                    },
                    "zAxis": {
                        "rms": number
                    }
                },
                "band10To1000Hz": {
                    "totalVibration": {
                        "absMax": number,
                        "absMin": number,
                        "crestFactor": number,
                        "rms": number
                    },
                    "xAxis": {
                        "rms": number
                    },
                    "yAxis": {
                        "rms": number
                    },
                    "zAxis": {
                        "rms": number
                    }
                }
            },
            "velocity": {
                "band10To1000Hz": {
                    "totalVibration": {
                        "absMax": number,
                        "absMin": number,
                        "crestFactor": number,
                        "rms": number
                    },
                    "xAxis": {
                        "rms": number
                    },
                    "yAxis": {
                        "rms": number
                    },
                    "zAxis": {
                        "rms": number
                    }
                }
            },
            "temperature": number
        }
        "models": {
            "temperatureML": {
                "previousPersistentClassificationOutput": "string",
                "persistentClassificationOutput": "string",
                "pointwiseClassificationOutput": "string"
            },
            "vibrationISO": {
                "isoClass": "string",
                "mutedThreshold": "string",
                "previousPersistentClassificationOutput": "string",
                "persistentClassificationOutput": "string",
                "pointwiseClassificationOutput": "string"
            },
            "vibrationML": {
                "previousPersistentClassificationOutput": "string",
                "persistentClassificationOutput": "string",
                "pointwiseClassificationOutput": "string"
            }
        },
        "assetPositionId": "string"
    }
    
    // sensorConnected
    "eventPayload": {
        "siteName": "string",
        "assetName": "string",
        "positionName": "string",
        "companyName": "string",
        "geoLocation": {
            "latitude": number,
            "longitude": number
        },
        "address": "string",
        "serialNumber": "string",
        "make": "string",
        "model": "string",
        "assetPositionURL": "string",
        "sensor": {
            "physicalId": "string"
        },
        "assetPositionId": "string"
    }
    
    // sensorDisconnected
    "eventPayload": {
        "siteName": "string",
        "assetName": "string",
        "positionName": "string",
        "companyName": "string",
        "geoLocation": {
            "latitude": number,
            "longitude": number
        },
        "address": "string",
        "serialNumber": "string",
        "make": "string",
        "model": "string",
        "assetPositionURL": "string",
        "sensor": {
            "physicalId": "string"
        },
        "assetPositionId": "string"
    }
    
    // gatewayConnected
    "eventPayload": {
        "siteName": "string",
        "gatewayName": "string",
        "gatewayListURL": "string",
        "companyName": "string",
        "geoLocation": {
            "latitude": number,
            "longitude": number
        },
        "address": "string",
        "gateway": {
            "physicalId": "string"
        }
    }
    
    // gatewayDisconnected
    "eventPayload": {
        "siteName": "string",
        "gatewayName": "string",
        "gatewayListURL": "string",
        "companyName": "string",
        "geoLocation": {
            "latitude": number,
            "longitude": number
        },
        "address": "string",
        "gateway": {
            "physicalId": "string"
        }
    }
    
    // assetStateTransition
    "eventPayload": {
        "siteName": "string",
        "assetName": "string",
        "positionName": "string",
        "companyName": "string",
        "geoLocation": {
            "latitude": number,
            "longitude": number
        },
        "address": "string",
        "serialNumber": "string",
        "make": "string",
        "model": "string",
        "assetPositionURL": "string",
        "sensor": {
            "physicalId": "string"
        },
        "assetTransitionType": "measurement|userInput",
        "assetState": {
            "newState": "string",
            "previousState": "string"
        },
        "closureCode": {
            "failureMode": "string",
            "failureCause": "string",
            "actionTaken": "string",
            "resolvedModels": list<"string">
        },
        "assetPositionId": "string"
    }
}
```

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

 Amazon Monitron Kinesis 数据导出架构 v2 包含以下架构参数。其中一些参数是对 v1 的更新，另一些参数是 v2 所独有的。例如，`siteName` 在 v1 中是一级参数。在 v2 中，它是二级参数，可以在 `eventPayload` 实体下找到。

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

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

版本  
+ 架构版本
+ 类型：字符串
+ 值：1.0 或 2.0

accountId  
+ 你的 Monitron 项目的 12 位数 AWS 账户 ID
+ 类型：字符串

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

projectId  
您的 Amazon Monitron 项目的唯一 ID。  
类型：字符串

eventType  
+ 当前事件流。每个事件类型都有一个专用 `eventPayload` 格式。
+ 类型：字符串
+ 可能的值：`measurement`、`gatewayConnected`、`gatewayDisconnected`、`sensorConnected`、`sensorDisconnected`、`assetStateTransition`。

**`eventType: measurement`**

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

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

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

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

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

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

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

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

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

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

eventPayload.features.temperature  
+ 观测到的温度
+ 类型：数字
+ °c/degc

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

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

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

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

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

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

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

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

事件负载。 assetPositionId  
+ 发送测量结果的传感器位置的标识符。
+ 类型：字符串

Eventpayload.company  
+ 使用该资产的公司的名称。
+ 类型：字符串

Eventpayload.geoLocation.  
+ 网站实际位置的纬度。
+ 类型：数字

eventpayload.geolocation.Long  
+ 网站实际位置的经度。
+ 类型：数字

EventPayload.addr  
+ 网站的地址。
+ 类型：字符串

Eventpayload.serialNum  
+ 资产的序列号。
+ 类型：字符串

eventpayload.make  
+ 资产的品牌。
+ 类型：字符串

eventPayload.model  
+ 资产的模型。
+ 类型：字符串

`eventType: sensorConnected`

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

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

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

assetPositionURL  
+ 应用程序中显示的传感器 URL
+ 类型：字符串

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

事件负载。 assetPositionId  
+ 状态发生变化的传感器位置的标识符。
+ 类型：字符串

Eventpayload.company  
+ 使用该资产的公司的名称。
+ 类型：字符串

Eventpayload.geoLocation.  
+ 网站实际位置的纬度。
+ 类型：数字

eventpayload.geolocation.Long  
+ 网站实际位置的经度。
+ 类型：数字

EventPayload.addr  
+ 网站的地址。
+ 类型：字符串

Eventpayload.serialNum  
+ 资产的序列号。
+ 类型：字符串

eventpayload.make  
+ 资产的品牌。
+ 类型：字符串

eventPayload.model  
+ 资产的模型。
+ 类型：字符串

`eventType: sensorDisconnected`

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

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

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

assetPositionURL  
+ 应用程序中显示的传感器 URL
+ 类型：字符串

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

事件负载。 assetPositionId  
+ 状态发生变化的传感器位置的标识符。
+ 类型：字符串

Eventpayload.company  
+ 使用该资产的公司的名称。
+ 类型：字符串

Eventpayload.geoLocation.  
+ 网站实际位置的纬度。
+ 类型：数字

eventpayload.geolocation.Long  
+ 网站实际位置的经度。
+ 类型：数字

EventPayload.addr  
+ 网站的地址。
+ 类型：字符串

Eventpayload.serialNum  
+ 资产的序列号。
+ 类型：字符串

eventpayload.make  
+ 资产的品牌。
+ 类型：字符串

eventPayload.model  
+ 资产的模型。
+ 类型：字符串

 `eventType: gatewayConnected` 

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

eventPayload.gatewayName  
+ 应用程序中显示的网关的名称
+ 类型：字符串

eventPayload.gatewayListURL  
+ 应用程序中显示的网关 URL
+ 类型：字符串

eventPayload.gateway.physicalID  
+ 刚刚连接的网关（用于向 Amazon Monitron 服务传输数据）的物理 ID
+ 类型：字符串

Eventpayload.company  
+ 使用该资产的公司的名称。
+ 类型：字符串

Eventpayload.geoLocation.  
+ 网站实际位置的纬度。
+ 类型：数字

eventpayload.geolocation.Long  
+ 网站实际位置的经度。
+ 类型：数字

EventPayload.addr  
+ 网站的地址。
+ 类型：字符串

`eventType: gatewayDisconnected`

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

gatewayName  
+ 应用程序中显示的网关的名称
+ 类型：字符串

gatewayListURL  
+ 应用程序中显示的网关 URL
+ 类型：字符串

physicalID  
+ 刚刚连接的网关（用于向 Amazon Monitron 服务传输数据）的物理 ID
+ 类型：字符串

Eventpayload.company  
+ 使用该资产的公司的名称。
+ 类型：字符串

Eventpayload.geoLocation.  
+ 网站实际位置的纬度。
+ 类型：数字

eventpayload.geolocation.Long  
+ 网站实际位置的经度。
+ 类型：数字

EventPayload.addr  
+ 网站的地址。
+ 类型：字符串

`eventType: assetStateTransition`

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

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

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

eventPayload.assetPositionURL  
+ 应用程序中显示的传感器 URL
+ 类型：字符串

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

事件负载。 assetTransitionType  
+ 资产状态转换背后的原因
+ 类型：字符串
+ 可能的值：`measurement` 或 `userInput`

eventPayload.assetState.newState  
+ 资产的新状态
+ 类型：字符串

eventPayload.assetState.previousState  
+ 资产的先前状态
+ 类型：字符串

eventPayload.closureCode.failureMode  
+ 用户在确认此故障时选择的故障模式
+ 类型：字符串
+ 可能的值：`NO_ISSUE` \$1 `BLOCKAGE` \$1 `CAVITATION` \$1 `CORROSION` \$1 `DEPOSIT` \$1 `IMBALANCE` \$1 `LUBRICATION` \$1 `MISALIGNMENT` \$1 `OTHER` \$1 `RESONANCE` \$1 `ROTATING_LOOSENESS` \$1 `STRUCTURAL_LOOSENESS` \$1 `TRANSMITTED_FAULT` \$1 `UNDETERMINED` 

eventPayload.closureCode.failureCause  
+ 用户确认故障时在应用程序下拉菜单中选择的故障原因。
+ 类型：字符串
+ 可能的值：`ADMINISTRATION` \$1 `DESIGN` \$1 `FABRICATION` \$1 `MAINTENANCE` \$1 `OPERATION` \$1 `OTHER` \$1 `QUALITY` \$1 `UNDETERMINED` \$1 `WEAR` 

eventPayload.closureCode.actionTaken  
+ 关闭此异常时执行的操作，由用户在应用程序下拉菜单中选择。
+ 类型：字符串
+ 可能的值：`ADJUST` \$1 `CLEAN` \$1 `LUBRICATE` \$1 `MODIFY` \$1 `NO_ACTION` \$1 `OTHER` \$1 `OVERHAUL` \$1 `REPLACE` 

eventPayload.closureCode.resolvedModels  
+ 指出了问题的一组模型。
+ 类型：字符串列表
+ 可能的值：`vibrationISO` \$1 `vibrationML` \$1 `temperatureML` 

事件负载。 assetPositionId  
+ 状态发生变化的资产头寸的标识符。
+ 类型：字符串

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`

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`

Eventpayload.company  
+ 使用该资产的公司的名称。
+ 类型：字符串

Eventpayload.geoLocation.  
+ 网站实际位置的纬度。
+ 类型：数字

eventpayload.geolocation.Long  
+ 网站实际位置的经度。
+ 类型：数字

EventPayload.addr  
+ 网站的地址。
+ 类型：字符串

Eventpayload.serialNum  
+ 资产的序列号。
+ 类型：字符串

eventpayload.make  
+ 资产的品牌。
+ 类型：字符串

eventPayload.model  
+ 资产的模型。
+ 类型：字符串

# 从 Kinesis v1 迁移到 v2
<a name="migration-from-v1-to-v2"></a>

 如果您当前使用的是 v1 数据架构，您可能已经在向 Amazon S3 发送数据，或者已经在使用 Lambda 进一步处理数据流负载。

**Topics**
+ [将数据架构更新到 v2](#updating-to-v2)
+ [使用 Lambda 更新数据处理](#updating-with-lam)

## 将数据架构更新到 v2
<a name="updating-to-v2"></a>

 如果您已经使用 v1 架构配置了数据流，则可以通过执行以下操作来更新数据导出流程：

1. 打开您的 Amazon Monitron 控制台。

1. 导航到您的项目。

1.  停止[当前实时数据导出](monitron-kinesis-export-v2.md#stop-kinesis-export-v2)。

1.  启动实时数据导出以创建新数据流。

1. 选择新创建的数据流。

1. 选择**启动实时数据导出**。此时，新架构将通过数据流发送您的负载。

1. （可选）转到 Kinesis 控制台并删除您的旧数据流。

1. 使用 v2 架构为新创建的数据流配置新传输方式。

 您的新数据流现在会将符合 v2 架构的负载传输到您的新桶。我们建议您使用两个不同的桶来保证格式一致，以防您要处理这些桶中的所有数据。例如，使用其他服务，例如 Athena 和。 AWS Glue

**注意**  
如果您要将数据传输到 Amazon S3，请了解如何[将导出的数据存储在 Amazon S3 中](kinesis-store-S3-v2.md#kinesis-store-S3-title-v2)，进而详细了解如何使用 v2 架构将数据传输到 Amazon S3。

**注意**  
如果您要使用 Lambda 函数来处理负载，请了解如何[使用 Lambda 处理数据](https://docs.aws.amazon.com/Monitron/latest/user-guide/data-export-lambda.html)。您还可以参阅[使用 Lambda 进行更新](#updating-with-lam)部分以获取更多信息。

## 使用 Lambda 更新数据处理
<a name="updating-with-lam"></a>

 使用 Lambda 更新数据处理时需要注意，v2 数据流现在基于事件。您的初始 v1 Lambda 代码可能与下面类似：

```
import base64

def main_handler(event):
    # Kinesis "data" blob is base64 encoded so decode here:
    for record in event['Records']:
        payload = base64.b64decode(record["kinesis"]["data"])
     
        measurement = payload["measurement"]
        projectDisplayName = payload["projectDisplayName"]
     
        # Process the content of the measurement
        # ...
```

 由于 v1 数据架构正处于弃用过程中，因此以前的 Lambda 代码并不适用于所有新数据流。

 以下 Python 示例代码将使用数据架构 v2 处理来自 Kinesis 流的事件。此代码使用新 `eventType` 参数将处理定向到合适的处理程序：

```
import base64

handlers = {
    "measurement": measurementEventHandler,
    "gatewayConnected": gatewayConnectedEventHandler,
    "gatewayDisconnected": gatewayDisconnectedEventHandler,
    "sensorConnected": sensorConnectedEventHandler,
    "sensorDisconnected": sensorDisconnectedEventHandler,
}

def main_handler(event):
    # Kinesis "data" blob is base64 encoded so decode here:
    for record in event['Records']:
        payload = base64.b64decode(record["kinesis"]["data"])
          
        eventType = payload["eventType"]
        if eventType not in handler.keys():
            log.info("No event handler found for the event type: {event['eventType']}")
            return 
     
        # Invoke the appropriate handler based on the event type.
        eventPayload = payload["eventPayload"]
        eventHandler = handlers[eventType] 
        eventHandler(eventPayload)

def measurementEventHandler(measurementEventPayload):
    # Handle measurement event
    projectName = measurementEventPayload["projectName"]
    
    # ...

def gatewayConnectedEventHandler(gatewayConnectedEventPayload):
    # Handle gateway connected event

# Other event handler functions
```