臨近年關,兩個磁盤占滿引起的服務下線


一口氣說兩個因為磁盤空間不足引發的應用故障, 汗, 這兩個都發生在近日。

作為拿起鍵盤一把梭的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"}
}

開發和運維,相愛相殺!相輔相成!相得益彰!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM