AWS CloudWatch 显然实验不会记录自定义指标的事件

问题描述 投票:0回答:1

我配置了一个 Evidently 项目,其中包含一项功能并准备了一项实验,其中我定义了一个自定义指标。问题很简单:我只是无法明显地记录任何事件。我就是不明白,出了什么问题。

此时我已经简化了故障排除,并且我正在使用命令行将事件发送到 Evidently:

aws evidently put-project-events \
    --project "myprojectname"\
    --events '[{"data" : "{\"value\":\"1\", \"userIP\":\"12.345.678.90\"}", "timestamp":"1693156893", "type":"aws.evidently.custom" }]'

结果看起来很成功:

{
    "eventResults": [
        {
            "eventId": "fddbaf08-ad49-40d1-bcaa-aa49f44ea5e1"
        }
    ],
    "failedEventCount": 0
}

但是,我的实验似乎无法注册任何事件(对于我的功能的两种变体,事件计数仍然为零,并且不会随着每个脚本运行而增加;而且,一段时间后也不会增加(https://i.stack.imgur.com/WFoJP.png))。

在实验配置中,度量规则如下所示:

{
  "entityIdKey": "userIP",
  "valueKey": "value",
  "eventPattern": {
    "userIP": [
      {
        "exists": true
      }
    ],
    "value": [
      {
        "exists": true
      }
    ]
  }
}

我可以看到指标进入了“CloudWatch”->“指标”->“所有指标”,但它们仍然没有出现在 Evidently 的实验中。

我在 React 应用程序中的代码如下所示:

    import { EvidentlyClient, EvaluateFeatureCommand, PutProjectEventsCommand } from "@aws-sdk/client-evidently";
    
    const eviclient = new EvidentlyClient({ 
        region : 'eu-north-1',
        endpoint: "https://evidently.eu-north-1.amazonaws.com",
        credentials : {
            accessKeyId     : 'AKIA2NxxxxxxxxW6P3UL', 
            secretAccessKey : 'fo5hMrufII7eHZxxxxxxxxS/5ZHnXqIFXNXGHt2e'
        }
    });
    
    async function evaluate() {
        const command1 = new EvaluateFeatureCommand({ 
            project: "myprojectname", feature: "SolutionInterest",  entityId: "12.345.678.90"
        });
        const command2 = new PutProjectEventsCommand({
            project: "myprojectname", events: [
              { timestamp: new Date(), type: "aws.evidently.custom", data: { "userIP": "12.345.678.90", "value": "1" } }
            ]
        });
        let response1 =  await eviclient.send(command1);
        console.log('response1: ' + JSON.stringify(response1));
        let response2 =  await eviclient.send(command2);
        console.log('response2: ' + JSON.stringify(response2));
    }
    
    function App() {
        evaluate();
        return null;
    }

我在控制台中得到的内容如下:

[Log] response1: {"$metadata":{"httpStatusCode":200,"requestId":"f9f35837-4796-4456-925f-97be4afaa240","attempts":1,"totalRetryDelay":0},"details":"{\"experiment\":\"Test4\",\"treatment\":\"Variation2\"}","reason":"EXPERIMENT_RULE_MATCH","value":{"boolValue":true},"variation":"Variation2"}

[Log] response2: {"$metadata":{"httpStatusCode":200,"requestId":"fb29f316-85bc-4416-9dcf-920ba98fae57","attempts":1,"totalRetryDelay":0},"eventResults":[{"errorCode":null,"errorMessage":null,"eventId":"434115a0-0e18-4cae-a2fe-c53f8dca117d"}],"failedEventCount":0}

到目前为止,我尝试了以下方法:

  • 在另一个地区创建项目和实验 - 仍然是同样的问题,所以它不是特定于地区的。
  • 使用与客户端配置一起使用的相同用户身份创建实验 - 仍然是同样的问题。
  • 使用和不使用规则模式创建指标 - 没有区别。

有谁知道这里可能出了什么问题,或者是否有我忽略的先决配置?

非常感谢您的时间和建议。

amazon-web-services amazon-cloudwatch ab-testing evidently
1个回答
0
投票

所以我不确定你是否遇到这种情况,但对我来说,这就是事件没有被记录的原因。他们现在是。

对于要记录的指标,需要调用 putProjectEvents a - 在调用valuateFeature后1小时内调用 b - 有一个匹配的entityIdKey

在evaluateFeature中,boto3库强制使用entityId并告诉我它需要是一个字符串。

在 putProjectEvents 调用中,entityIdKey 作为数据参数的一部分作为字符串(在 python 中)传递,因此不强制执行。

在一种情况下,我有一个字符串“6552”,在另一种情况下,我有一个整数 6552。

因此指标没有映射到实验中。

一旦我完成了这些匹配,一切都按预期进行。

© www.soinside.com 2019 - 2024. All rights reserved.