将代码添加到应用程序 - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将代码添加到应用程序

要使用 CloudWatch Evidently,您可以将代码添加到应用程序添,以向每个用户会话分配变体,并将指标发送到 Evidently。使用 CloudWatch Evidently EvaluateFeature 操作将变体分配给用户会话,然后使用 PutProjectEvents 操作将事件发送到 Evidently,用于计算启动或实验的指标。

当您创建变体或自定义指标时,CloudWatch Evidently 控制台会提供需要添加的代码示例。

有关端到端示例的信息,请参阅 教程:使用 Evidently 示例应用程序进行 A/B 测试

使用 EvaluateFeature

在启动或实验中使用功能变体时,应用程序会使用 EvaluateFeature 操作为每个用户会话分配一个变体。将变体分配给用户即为评估事件。如果您调用此操作,会传递以下内容:

  • Feature name(功能名称)– 必填。Evidently 会根据启动或实验的功能评估规则进行评估,并为实体选择变体。

  • entityId – 必填。表示唯一的用户。

  • evaluationContext – 可选。一个 JSON 对象,表示有关用户的其他信息。如果您已经创建了细分,Evidently 会使用此值在功能评估期间将用户与受众细分匹配。有关更多信息,请参阅 使用细分来聚焦受众

    下面是您可以发送至 Evidently 的 evaluationContext 值的示例。

    { "Browser": "Chrome", "Location": { "Country": "United States", "Zipcode": 98007 } }

粘性评估

CloudWatch Evidently 使用“粘性”评估。entityId 的单个配置、功能、功能配置evaluationContext 始终会接收相同的变体分配。此变体分配仅在实体添加到覆盖或实验流量增加时更改。

功能配置包括以下内容:

  • 功能变体

  • 此功能当前运行的实验的变体配置(分配给每个变体的百分比)(如果有)。

  • 此功能当前运行的启动的变体配置(如果有)。变体配置包括定义的区段覆盖(如果有)。

如果增加实验的流量分配,则之前分配给实验处理组的所有 entityId 都将继续接受相同的处理。根据为实验指定的变体配置,之前分配给对照组的所有 entityId 都可能被分配到实验处理组。

如果减少实验的流量分配,则 entityId 可能会从处理组转移到对照组,但不会进入不同的处理组。

使用 PutProjectEvents

要为 Evidently 编写自定义指标,请使用 PutProjectEvents 操作。以下是一个简单的有效负载示例。

{ "events": [ { "timestamp": {{$timestamp}}, "type": "aws.evidently.custom", "data": "{\"details\": {\"pageLoadTime\": 800.0}, \"userDetails\": {\"userId\": \"test-user\"}}" } ] }

entityIdKey 可以只是 entityId,您也可以将其重命名为其他任何名称,例如 userId。在实际事件中,entityId 可以是用户名、会话 ID 等等。

"metricDefinition":{ "name": "noFilter", "entityIdKey": "userDetails.userId", //should be consistent with jsonValue in events "data" fields "valueKey": "details.pageLoadTime" },

为了确保事件与正确的启动或实验相关联,您必须在调用 EvaluateFeaturePutProjectEvents 时传递相同的 entityId。请务必在调用 EvaluateFeature 之后调用 PutProjectEvents,否则数据会丢弃,并且 CloudWatch Evidently 不会使用。

PutProjectEvents 操作不要求将功能名称作为输入参数。这样一来,您可在多个实验中使用一个事件。例如,假设您调用 EvaluateFeature 并将 entityId 设置为 userDetails.userId。如果您有两个或更多运行中的实验,则可以从该用户的会话中获得单个事件,并为每个这些实验发出指标。为此,使用相同的 entityId 为每个实验调用一次 PutProjectEvents

Timing

在应用程序调用 EvaluateFeature 之后,有一个小时的时间段,其中根据该评估限制来自 PutProjectEvents 的指标事件。如果在一小时之后发生了更多的事件,则不会限制这些事件。

但是,如果在初始调用的一小时时段内将相同的 entityId 用于新 EvaluateFeature 调用,则现在改为使用后一个 EvaluateFeature 的结果,并重新启动一个小时的计时器。仅在某些情况下才会发生此操作,例如在两此分配之间增加实验流量时,如前面的粘性评估部分所解释。

有关端到端示例的信息,请参阅 教程:使用 Evidently 示例应用程序进行 A/B 测试