我正在使用无服务器框架在AWS Lambdas上托管我的函数。对于开发,我使用Kotlin。
因为我想通过特定的lambda重用资源(如DB连接),所以我对具有相同处理函数的api进行了分组。就像所有/posts
相关的api将由PostHandler
处理一样。在内部,基于routeKey
,我将请求分配给相关功能。
这意味着对于所有/posts
端点(如GET /posts/{id}
,POST /posts
等),它们都被记录到相同的CloudWatch日志组。这成了一个问题。由于我使用的是API网关,所以我还启用了API网关级别的访问日志记录。这解决了我的问题,当我直接击中一个api。
然而,我也有一个服务想要直接调用这些lambda(它可以是调用我的服务的lambda的服务的lambda或调用我的服务的EC2/ECS实例的lambda)。在这种情况下,我们将直接使用lambda,而不涉及ApiGateway。在这种情况下,如何维护不同端点的日志记录?
很难说出实际的问题是什么,我想你是说很难区分不同的用例和请求?
我建议使用结构化日志(记录为JSON),然后使用CloudWatch logs Insights来查询您需要的特定信息。例如,可以为每条消息记录一个请求id,然后再对请求id进行查询。您还可以在其他服务之间使用共享id,这将为您提供端到端的日志可见性。