从 ECS 容器记录到两个不同的 CloudWatch 日志流的最佳方式?

Bas*_*ass 5 amazon-web-services amazon-cloudwatch docker amazon-ecs

我们在AWS的ECS平台上运行我们的服务,并将日志发送到AWS CloudWatch。

我们有两种类型的日志,任何容器都可以生成其中一种类型:

  1. 常见的应用程序日志(访问、错误等);这些必须易于开发人员和管理员查看
  2. 审计日志(人类可读的“谁在何时做了什么”日志);必须限制对这些内容的访问

审核日志是法规强制要求的,除了更严格的访问控制要求外,它们的保留时间比应用程序日志更长,因此将两者放在同一个日志流中并不是真正的选择。因此,我们使用两个日志流,其中一个位于具有严格访问策略的 CloudWatch 日志组中。

目前,我们正在将日志写入单独的磁盘文件,日志代理将日志条目从磁盘文件发送到 CloudWatch。然而,我们希望切换到“Doc​​ker 方式”的日志记录,即将所有日志写入 STDOUT 或 STDERR,并让日志驱动程序处理其余的事情。这听起来特别有吸引力,因为日志磁盘(几乎)是我们正在使用的唯一磁盘安装,摆脱它们确实非常好。(除了日志磁盘之外,我们的容器是严格只读的。)

问题是,我们无法找到一种明智的方法来保持日志流分离。显而易见的事情是以某种方式标记日志消息并稍后将它们分开,但仍然存在一个问题:

  • 明智的方法是让日志驱动程序根据消息标签将消息分离到不同的日志流。Docker 的 awslogs 日志驱动程序不支持此功能。
  • “强力”方法是写入单个 CloudWatch 日志流,并使用写入其他两个日志流的自写过滤器重新处理该流。由于 CloudWatch 计费基于 API 调用,这基本上会使成本翻倍,因此是不可能的。
  • 我们还可以设置一个日志主机,并使用另一个 docker 日志驱动程序(例如 syslog)将所有日志发送到那里。然后我们可以分割日志流,并将它们转发到 CloudWatch。这会给所有日志记录增加一个瓶颈和一个单点故障,所以听起来也不太好。

希望我们遗漏了一些明显的东西,在这种情况下,我们将非常感谢您的帮助。

如果没有,是否有任何解决方法(甚至是适当的解决方案)来让这种事情发挥作用?

小智 0

关于审计日志,能否分享一下您要审计的内容?一般来说,出于这种目的,您可能需要使用 CloudTrail 或 GuardDuty。