临近年关,两个磁盘占满引起的服务下线

一口气说两个因为磁盘空间不足引发的应用故障, 汗, 这两个都发生在近日。

作为拿起键盘一把梭的Coder, 开发--->部署-->收工--->心旷神怡,滋一口82年的可乐.

过了几个月,服务突然下线了!CTO又有杀程序员祭天的理由了!

事故1:Azure App Service

Azure App Service运行一段时间之后,你也许会遇到磁盘占满的错误, 表象如下:

  1. 应用程序触发System.Io.IOException:There is not enough space on the disk异常
  2. 你会在KUDU控制台发现磁盘错误(红色警告)
  3. 当你使用Visual Studio部署新的代码,你会得到失败结果。
    ERROR_NOT_ENOUGH_DISK_SPACE: Web deployment task failed. (Web Deploy detected insufficient space on disk)

每个App Service Plan只获得与定价层匹配的磁盘空间分配,故面向Azure App Service开发的应用需要关注空间消耗!

Shared Basic STANDARD PREMIUM
Disk Space 1G 10G 50G 250G

相同App Service Plan内的web应用共享你付费套餐里面的磁盘空间,如果磁盘文件大小超限,你会看到上面的错误!

因为一个App Service Plan可支撑多个Web应用, 你可以在每个应用的[App Service Paln]--->[Quotas] 配置节下面发现当前应用占用的磁盘空间。

一个常规的Web应用包含如下内容:

--- --- 描述 转移方案
1 WebSite Content 刚需
2 App_Data 存储持久化数据/图片 尝试转移到Azure其他存储组件
3 Log Files 本地日志文件 尝试转移到Azure其他存储组件

Azure Storage Account为任意数据提供可扩展、持久化的云存储、备份和恢复解决方案,包括非结构化文本或二进制数据,如视频、音频和图像。

本文点到为止,演示将日志数据转移到Azure Storage Container (非结构化数据存储)。

# 还是以常见的NLog为蓝本:
# 引入`NLog.Extensions.AzureBlobStorage`库文件
<target xsi:type="AzureBlobStorage"
name="Cloud_applogs"
layout="${format}"
connectionString="********"
container="actionlogs"
blobName="applogs/applog-${date:format=yyyyMMdd}.log" />
# 其中的ConnectionString参见[Settings]-->[Access Keys]
<logger name ="LoggingActionFilter" minlevel="Info" writeTo="Cloud_applogs" />

事故2: Docker

Docker默认以Json的形式将日志存储到/var/lib/docker/containers

使用 docker system df命令查看Docker磁盘占用

使用docker ps --size定位每个容器的磁盘占用

我手上的应用,部署了EFK采集数据,并为ES的数据存储存储了较大的独立磁盘, 但是对EFK本身却忘记了控制日志大小。

清理容器治标不治本,要从根本上解决问题,需要限制容器的日志大小上限。

  1. 配置每个容器的docker-compose中的max-size
logging:
driver: "json-file"
options:
max-size: 100k
max-file: "5"
  1. 全局设置
    新建/etc/docker/daemon.json,若有就不用新建了,添加log-dirver和log-opts参数
# vim /etc/docker/daemon.json
{
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"}
}

开发和运维,相爱相杀!相辅相成!相得益彰!

posted @   码甲哥不卷  阅读(658)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示