【问题标题】:Log requests/responses in API gateway through Labmbda proxy通过 Labmbda 代理在 API 网关中记录请求/响应
【发布时间】:2020-04-16 01:57:49
【问题描述】:

我想记录完整的请求+响应,包括。在将要处理的请求传递到不同的服务器(如反向代理请求)时,在 AWS Lambda 代理中的 API 网关上接收到的正文。因为从 API Gateway 到 CloudWatch 的标准日志记录会在 1024 字节后截断请求/响应,所以我无法使用此选项。 所以处理看起来像这样:

请求 -> API 网关 -> Lambda 以记录完整请求,包括。正文 -> 公共 API 端点 -> 响应 -> Lambda 以记录完整响应,包括。正文 -> API 网关 -> 响应

这种情况有已知的解决方案吗?

【问题讨论】:

  • 为什么您的场景中有 3 个 API 网关?这些是 lambdas@edge 吗?
  • 不,抱歉,我的意思是显示消息流。 API 网关上有一个请求,我想将其反向代理到公共端点。同时我需要记录完整的请求/响应,包括。将超过 API Gateway/CloudWatch 日志记录可以处理的长度的正文。这就是为什么我需要一个 lambda 来将它存储在某个地方(例如在 S3 存储桶中)
  • @matt478 我也有类似的需求。你解决了吗?如果是这样,你是怎么做到的?
  • 在哪里可以找到这个 1024 字节的日志记录限制?

标签: amazon-web-services aws-lambda aws-api-gateway reverse-proxy


【解决方案1】:

您可能有充分的理由这样做,但请确保您知道记录完整的请求/响应正文可能会产生很多不良影响。

例如,如果您的服务需要 GDPR 合规性,这是一个大问题。此外,它可能会极大地影响性能并让您遇到一些与配额相关的问题。基本上,这样做通常不是一个好主意。

如果 1K 限制不是问题,则将这些日志存储在 cloudwatch 上将是最简单的请求选项。如果您只有一堆请求,而这还不够,您可以考虑将它们视为例外。

您可以使用 S3 / DynamoDB / Elastic Search,这取决于你想用它们做什么,并且也有权衡。

S3 - 这将允许存储非常大的请求/响应,但它会产生大量碎片。您最终可能会得到很多小文件,并且还需要某种索引(可能将 S3 密钥存储在 cloudwatch 日志中)。在这种情况下,搜索可能会有些痛苦(尽管您可能能够使用 Athena,具体取决于您如何存储它)。

DynamoDB - 易于存储,但如果您的 API 访问过于频繁,您可能会遇到很多配额限制。您可能需要大量增加成本以防止它们发生。此外,每条记录的限制为 400Kb。我个人不推荐这种方法。

ElasticSearch - 默认记录大小限制为 100Mb,但可以增加。这将使以后查询这些数据变得容易。

鉴于该线程拥有的信息量,我认为 ElasticSearch 可能更适合这种情况。此外,根据数量,其中一些解决方案最终将需要一些发布-订阅机制(例如 Kinesis)来处理突发限制和消息分组(例如,如果您是 S3,您可能希望将多个条目分组到一个单个文件)

【讨论】:

    猜你喜欢
    • 2019-09-06
    • 2022-01-09
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多