1. 程式人生 > >臨近年關,兩個磁碟佔滿引起的服務下線

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

> 一口氣說兩個因為磁碟空間不足引發的應用故障, 汗, 這兩個都發生在近日。 作為拿起鍵盤一把梭的Coder, 開發--->部署-->收工--->心曠神怡,滋一口82年的可樂. ![](https://img2020.cnblogs.com/blog/587720/202012/587720-20201229151336058-590386088.jpg) 過了幾個月,服務突然下線了!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`庫檔案
# 其中的ConnectionString參見[Settings]-->[Access Keys] ``` #### 事故2: Docker Docker預設以Json的形式將日誌儲存到`/var/lib/docker/containers` 使用 `docker system df`命令檢視Docker磁碟佔用 ![](https://img2020.cnblogs.com/blog/587720/202012/587720-20201229151350501-1945069858.png) 使用`docker ps --size`定位每個容器的磁碟佔用 ![](https://img2020.cnblogs.com/blog/587720/202012/587720-20201229151359917-37996376.png) 我手上的應用,部署了EFK採集資料,併為ES的資料儲存儲存了較大的獨立磁碟, 但是對EFK本身卻忘記了控制日誌大小。 清理容器治標不治本,要從根本上解決問題,需要限制容器的日誌大小上限。 1. 配置每個容器的docker-compose中的max-size ``` logging: driver: "json-file" options: max-size: 100k max-file: "5" ``` 2. 全域性設定 新建/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"} } ``` ![](https://img2020.cnblogs.com/blog/587720/202012/587720-20201229151411666-1546691824.gif) 開發和運維,相愛相殺!相輔相成!相得