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

将代码添加到应用程序

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

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

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

使用 EvaluateFeature

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

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

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

  • evaluationContext – 可选。这可包括要记录的实体属性以及评估事件。

粘性评估

CloudWatch Evidently 使用“粘性”评估。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 测试