ECS Fargate - 设备上没有 Space

ECS Fargate - No Space left on Device

我已经在 AWS Fargate 上部署了我的 asp.net 核心应用程序,一切正常。我正在使用 awslogs 驱动程序并且日志已正确发送到 cloudwatch。但是经过几天的正常工作,我现在只看到如下所示的一种日志:

因此,由于没有 space,所以没有显示任何应用程序日志。如果我更新了ECS服务,logging又开始工作了,提示磁盘已经清理了。

这 link 表明 awslogs 驱动程序不占用 space 而是将日志发送到 cloudwatch。 https://docs.aws.amazon.com/AmazonECS/latest/userguide/task_cannot_pull_image.html

有没有人也遇到过这个问题并且知道如何解决?

这取决于您在应用程序中配置日志记录的方式。 AWSlogs 驱动程序只是抓取所有发送到控制台的输出并将其保存到 CloudWatch,.NET 不一定知道这一点,并且会像其他情况一样继续写入日志。

可能 .NET 仍在将日志写入任何其他位置。

关于如何排查和解决问题的建议:

  • 首先,运行 本地应用程序并检查日志文件是否保存在任何地方
  • 其次,可选地 运行 容器测试以查看日志文件是否也保存在那里
    • 确保您的计算机上安装了 docker
    • 从 Fargate 正在 运行ning 的 ECR 下载容器映像。
      • docker 从 ECR 拉取 {Image URI}
    • 运行 这个在本地
      • 执行一些您知道会生成一些日志的任务
    • 使用 docker exec -it 连接到您的容器
    • 检查日志文件是否被写入您在第一次测试时确定的位置

最后,一旦您确定日志正在写入某处的文件,请选择这些选项之一

  1. 添加一些可以选择性指定的标志以禁止记录到文件。 运行在容器内安装您的应用程序时使用它。
  2. 实施一些逻辑来定期或在日志文件达到一定大小时清理日志文件。 (请记住,ECS 容器最多具有 20GB 本地存储空间)
  3. 禁用所有文件日志记录(我认为这不是一个好的选择)

祝你好运!

您需要将 AWS 日志记录配置中的“LibraryLogFileName”参数设置为空。

所以在 .Net Core 应用程序的 appsettings.json 文件中,它看起来像这样:

"AWS.Logging": {
  "Region": "eu-west-1",
  "LogGroup": "my-log-group",
  "LogLevel": {
    "Default": "Information",
    "Microsoft": "Warning",
    "Microsoft.Hosting.Lifetime": "Information"
  },
  "LibraryLogFileName": null
}