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 连接到您的容器
- 检查日志文件是否被写入您在第一次测试时确定的位置
最后,一旦您确定日志正在写入某处的文件,请选择这些选项之一
- 添加一些可以选择性指定的标志以禁止记录到文件。 运行在容器内安装您的应用程序时使用它。
- 实施一些逻辑来定期或在日志文件达到一定大小时清理日志文件。 (请记住,ECS 容器最多具有 20GB 本地存储空间)
- 禁用所有文件日志记录(我认为这不是一个好的选择)
祝你好运!
您需要将 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
}
我已经在 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 连接到您的容器
- 检查日志文件是否被写入您在第一次测试时确定的位置
最后,一旦您确定日志正在写入某处的文件,请选择这些选项之一
- 添加一些可以选择性指定的标志以禁止记录到文件。 运行在容器内安装您的应用程序时使用它。
- 实施一些逻辑来定期或在日志文件达到一定大小时清理日志文件。 (请记住,ECS 容器最多具有 20GB 本地存储空间)
- 禁用所有文件日志记录(我认为这不是一个好的选择)
祝你好运!
您需要将 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
}