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

将代码添加到应用程序

重要

终止支持通知:2025 年 10 月 16 日,Amazon 将停止对 CloudWatch Evidently 的支持。2025 年 10 月 16 日之后,您将无法再访问 Evidently 控制台或 Evidently 资源。

要使用 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 测试