博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
临近年关,发生两起磁盘占满引发的服务下线故障
阅读量:4035 次
发布时间:2019-05-24

本文共 1754 字,大约阅读时间需要 5 分钟。

一口气说两个因为磁盘空间不足引发的应用故障。

作为拿起键盘一把梭的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 Paln]--->[Quotas] 配置节下面发现当前应用占用的磁盘空间。

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

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

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

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

# 还是以常见的NLog为蓝本:# 引入`NLog.Extensions.AzureBlobStorage`库文件  
# 其中的ConnectionString参见[Settings]-->[Access Keys]   

事故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"}}

---------------------------------------------------------------

剖析以上事故,因为是我一个人开发+部署,考虑了一些事,也遗漏了一些事,凸显了职业运维的重要性。

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

临近年关,大家也检查一下部署的应用是否有此低级的风险, 不要像我一样晚节不保!

关注并星标我们

更多干货及最佳实践分享

转载地址:http://okudi.baihongyu.com/

你可能感兴趣的文章
移植QT
查看>>
如此调用
查看>>
计算机的发展史
查看>>
带WiringPi库的交叉编译如何处理一
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Spring事务的七种传播行为
查看>>
ES写入找不到主节点问题排查
查看>>
Java8 HashMap集合解析
查看>>
ArrayList集合解析
查看>>
欢迎使用CSDN-markdown编辑器
查看>>
Android计算器实现源码分析
查看>>
Android系统构架
查看>>
Android 跨应用程序访问窗口知识点总结
查看>>
各种排序算法的分析及java实现
查看>>
SSH框架总结(框架分析+环境搭建+实例源码下载)
查看>>
js弹窗插件
查看>>
自定义 select 下拉框 多选插件
查看>>
js判断数组内是否有重复值
查看>>
js获取url链接携带的参数值
查看>>
gdb 调试core dump
查看>>