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


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

    作为拿起键盘一把梭的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"}
    }
    

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

  • 相关阅读:
    约瑟夫环问题拓展 C/C++
    C/C++之STL简介
    详解约瑟夫环问题 C/C++
    HC-SR04超声波传感器
    TCRT5000 红外传感器
    win10的docker无法运行mysql的image,Public Key Retrieval is not allowed
    如何将docker默认的安装位置从C盘改为D盘?
    免费PDF阅读器
    A1B2B3
    动态代理
  • 原文地址:https://www.cnblogs.com/JulianHuang/p/14202977.html
Copyright © 2020-2023  润新知