臨近年關,兩個磁碟佔滿引起的服務下線
阿新 • • 發佈:2020-12-29
> 一口氣說兩個因為磁碟空間不足引發的應用故障, 汗, 這兩個都發生在近日。
作為拿起鍵盤一把梭的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)
開發和運維,相愛相殺!相輔相成!相得