【问题标题】:Tracking of Common Services in AWS using X-ray使用 X 射线跟踪 AWS 中的公共服务
【发布时间】:2024-04-24 14:25:01
【问题描述】:

我有多个 Lambda,每个 Lambda 要么调用另一个 lambda,要么调用一个 rest API 或 dynamoDB 或 S3 等。

例子:

  • 酒店预订
  • 机票预订

这些调用像

这样的通用服务
  • 预订服务
  • 发票服务

我需要跟踪哪个应用程序,即航班预订/酒店预订正在调用预订服务以及多少次/多少 CPU 等

这是否可以通过 AWS 中的 X-Ray 或任何其他更好的方式实现?

【问题讨论】:

    标签: amazon-web-services aws-lambda serverless aws-xray


    【解决方案1】:

    经过一番研究,我认为注释是解决上述问题的最佳方法

    所以我们需要在NodeJS中添加注解

                AWSXRay.captureFunc('annotations', (subsegment) => {
                    subsegment.addAnnotation('application', "BookingService");
                });

    注释被索引并且也可以用于过滤 使用类似这个注解的表达式。= "BookingService"

    更多信息: X 射线将分段、子分段合并到轨迹,因此子分段级别的注释足以过滤轨迹

    【讨论】:

      【解决方案2】:

      AWS Xray 可以帮助您以分段和子分段的形式跟踪 lambda 应用程序进行的下游调用,以便为您提供应用程序的整体视图。我认为 AWS Xray 可以在您的用例中为您提供帮助,而且您将能够跟踪您的 lambda 正在进行的 Dynamodb、S3 或 RestAPI 调用,并能够识别哪个应用程序(在您的情况下为 Flight Booking / HotelBooking)正在调用该服务(预订服务)。虽然您可能看不到性能数据(例如内存和 CPU 使用率),但您将能够跟踪应用程序内部的异常情况。

      【讨论】:

      • 我知道 X-Ray,但我想知道如何跟踪谁在调用公共服务
      • 服务被细分为多个部分。使用 X-Ray 时,您通常将分段名称预配置为它所代表的特定服务。根据您使用的语言,我们支持 Web 框架。例如,在 Java 中,我们支持 Spring Boot 和 Servlets,其中段名称预定义为您的服务名称。在您的情况下,您可以将特定服务的段命名为“BookingService”或“InvoiceService”。 X-Ray 将跟踪任何异常、延迟和资源元数据(如果您正在进行下游调用)。
      • @ChanChiemJefferySaeteurn 所以你的意思是说我可以根据正在调用的源服务过滤下游调用,只是另一个问题,那么如果我从浏览器和我调用这些公共服务怎么办?仍想知道电话是从 BookingHotel 页面或 Booking Flight 页面发出的吗?