·조회수 56

CloudWatch + Lambda + S3로 로그 수집하기

开始

我正在使用无服务器架构实现Web服务。无服务器是一种按需付费的服务,因此我想要测量用户使用API的频率。最简单的方法是每次调用API时记录到数据库中,但这种方法效率低下。因此,在研究了一番后,我决定定期从CloudWatch中提取日志并处理后,仅将处理后的信息存储到数据库中。

在无服务器架构中,API通过API Gateway + Lambda执行。在API调用过程中生成的所有日志都会自动记录到Cloudwatch中,无需额外操作。我设置了每小时将其移动到S3。移动完成后,从S3读取1小时的日志,整理API调用次数并存储到数据库中即可。

这样设置的原因如下。

  1. 将CloudWatch日志转移到S3的原因是,S3的存储成本比CloudWatch低。
  2. 每小时计算用户使用量并存储到数据库中是因为,当在我的服务仪表板上为每个用户显示使用量时,最小单位是1小时。

进行方式

  1. 将存储在CloudWatch中的日志移动到S3时,我使用了aws-sdk提供的CloudWatch.createExportTask。我使用cron表达式每小时执行Lambda简单地移动日志。

  2. 为了方便分析和管理日志,我将日志以JSON格式存储。我使用lambda-log库将其保存为JSON。

之后就很简单了。分析日志文件,加工成所需格式后存储即可。

尽管看起来不起眼,但我花了很多时间来解决AWS的权限问题,以及Lambda日志是如何存储在CloudWatch中的。

김지식
김지식
웹, 앱 개발자입니다.

댓글

댓글을 불러오는 중...