3

主要问题:

我们能否从云端点统计/监控中排除路径,同时仍允许流量流向我们的实际后端?

解释:

我们有一个在 Kubernetes 上运行的后端,现在正在试用 Google Cloud Endpoints。我们将 EPS 容器添加到后端容器前面的 pod 中。正如我们在其他地方所做的那样,我们也在 Kubernetes 和前面的 Google (L7) LoadBalancer 中使用健康检查。为了让健康检查到达我们的后端,它必须在 EPS 容器使用的 openapi yaml 文件中定义,例如:

...
paths:
"/_ah/health":
  get:
    operationId: "OkStatus"
    security: []
    responses:
      200:
        description: "Ok message"
...

问题在于这些请求混淆了我们实际 API 的监控/跟踪/统计。云端点注册的延迟数字是无用的:它们显示 2 毫秒的第 50 个百分位,然后是 20 秒的第 95 个百分位,因为运行状况检查流量的比例很高。实际请求耗时 20 多秒显示为请求的边际部分,因为运行状况检查每秒会多次请求,每次耗时 2 毫秒。由于这些健康检查是稳定的流量,占所有请求的 90%,因此实际相关请求在边距中显示为“异常”。

因此,我们希望从端点统计信息中排除此健康流量,但保持健康检查功能。

我在文档中没有找到任何关于此的内容,也没有在其他地方的网络上找到任何解决方案。

可能的替代解决方案

我们可以在我们的 Kubernetes 设置中添加一个额外的服务,直接到达我们的后端,仅用于健康检查。这方面的问题是:

  • 额外的 k8s 服务、配置、防火墙规则……需要
  • 我们不对实际设置进行健康检查。如果 EPS 容器无法将流量引导到我们的后端,这将被忽视。
  • 我们使用 SSL 加密负载均衡器和后端之间的流量,但是我们的实际后端现在应该需要一个额外的 ssl 感知网络服务器来实现这一点。对于没有实际数据的运行状况检查,这是一个小问题,但仍然意味着规则的例外。
  • 我们也可以为 EPS 容器添加额外的健康检查。但是由于这不应该出现在统计数据中,它应该就像对未定义的路径进行请求并检查响应是否是该案例的 EPS 响应:

    {"code": 5,
     "message": "Method does not exist.",
     "details": [{
         "@type": "type.googleapis.com/google.rpc.DebugInfo",
         "stackEntries": [],
         "detail": "service_control"
     }]
    }
    

    这也不理想。它确实检查容器是否至少在运行,但它更像是一种“它没有关闭”而不是“它正在工作”的方法,所以很多其他问题都不会被注意到。

4

1 回答 1

2

Google Cloud Endpoints 尚不支持从报告统计/监控中排除路径。这是在雷达上并被积极关注的东西。

同时,您的替代解决方案将作为权宜之计,但有您发布的缺点。

于 2017-05-03T17:21:43.893 回答