Amazon SQS是将分析日志logging数据处理到数据库的好工具吗?

我们有几个nodejs服务器,每个请求的详细信息和有效负载需要logging到SQL Server进行报告和其他业务分析。

请求的数量和服务器之间的需求相似性,我想用一个集中的日志服务来处理这个问题。 我的第一个直觉就是使用像Amazon SQS这样的东西,并让它直接作为SQL Server的缓冲区,或者构build一个小型日志logging服务器,这个服务器可以使SQS引导数据库调用。

这听起来像SQS的一个很好的使用,或者我错过了这个任务广泛使用的工具?

该解决scheme将取决于您使用的数据量,因为每个服务都有限制。 仅举几例:

SQS

  • 首先,因为你正在处理日志,所以你不要重复。 考虑到这一点,你需要一个FIFO(先进先出)队列 。
  • SQS本身并不真正调用任何东西。 您需要在这里设置队列,然后通过AWS JS SDK进行调用以提交消息。 然后,当您在callback中获取消息时,获取消息ID并将该数据传递给一个被调用的Lambda函数(您也可以在NodeJS中编写这些函数),这些函数将您需要的信息存储在数据库中。
  • 这就是说知道SQS队列中的消息有一个大小限制是很重要的:

最小消息大小是1个字节(1个字符)。 最大为262,144字节(256 KB)。

要发送大于256 KB的邮件,您可以使用适用于Java的Amazon SQS扩展客户端库。 此库允许您发送Amazon SQS消息,其中包含对Amazon S3中消息负载的引用。 最大有效载荷大小是2 GB。

CloudWatch日志

(不要与高级云观察服务本身混淆,这是更多的发送指标)

  • 这里的想法是您将事件数据提交给CloudWatch日志
  • 这里也有一个限制:

事件大小:256 KB(最大)。 这个限制是不能改变的

  • 与SQS不同,CloudWatch日志可以自动将日志数据传递到Lambda,然后将其写入您的SQL服务器。 AWS文档解释了如何设置 。

S3

只需设置一个存储桶,让你的服务器写出数据。 这里的好处是,因为S3是用来存储大文件的,所以你不必担心前面提到的大小限制。 S3桶也有可能触发lambda函数的事件。 然后,你可以愉快地继续发送标志数据。

如果您的日志数据足够大,您可以扩展到AWS Batch之类的东西,从而为您提供可用于处理日志数据的容器群集。 最后你还得到一个数据备份。 如果您的数据库出现故障,您将获得存储在S3中的日志数据,并可以将脚本加载到一起以加载所有内容。 您还可以使用生命周期策略将旧数据迁移到成本较低的存储,或直接将其全部删除。