首页 > 解决方案 > aws xray 采样不适用于 http 状态代码

问题描述

我们如何根据 http 状态码对 aws xray 中的数据进行采样,例如,我将采样 40% 的状态码为 200 的记录和 100% 的状态码为 500 的记录。下面是示例 json,但我无法采样数据

const rules = {
    "rules": [{
        "description": "get users",
        "service_name": "*",
        "http_method": "GET",
        "url_path": "*",
        "fixed_target": 0,
        "rate": 0.25
        "attributes": {
            "status": 200
         }
    }],
    "default": { "fixed_target": 1, "rate": 0.1},
    "version": 1
};

标签: node.jsamazon-web-servicesaws-sdkaws-xray

解决方案


X-Ray SDK 目前不支持您需要的功能。
AWS 在文档 [1] 中提到了这一点:

  • (可选)属性(键和值)——在做出抽样决定时已知的分段属性。

    • X-Ray SDK –不支持。SDK 会忽略指定属性的规则。

    • Amazon API Gateway – 来自原始 HTTP 请求的标头。

在查看适用于 Node.js 的 AWS X-Ray 开发工具包中的采样规则的源代码时,您还可以看到它不受支持。[2]

我认为您只能从 AWS 管理控制台(而不是开发工具包)指定Attributes属性,并且只能为 Amazon API Gateway 指定。

解决方案

  1. 将样本计数增加到 100%(不推荐,因为它有效地破坏了采样的目的——尽管对于一小部分 HTTP 端点可能是可行的)。
  2. 使用 API 网关(可能成本高昂)。
  3. 如果您在支持计划中,请在 GitHub 上使用功能请求 (FR) 打开一个问题并写信给 AWS 支持以提交 FR(根据我对 AWS X-Ray 开发速度的经验,这不是很有希望)。

参考

[1] https://docs.aws.amazon.com/xray/latest/devguide/xray-console-sampling.html#xray-console-sampling-options
[2] https://github.com/aws/aws -xray-sdk-node/blob/6bade5ad006a47f19a5352a40f1ad2823f404e63/packages/core/lib/middleware/sampling/sampling_rule.js


推荐阅读