临近年关,发生两起磁盘占满引发的服务下线故障
一口氣說兩個因為磁盤空間不足引發的應用故障。
作為拿起鍵盤一把梭的Coder, 開發--->部署-->收工--->心曠神怡,滋一口82年的可樂.
過了幾個月,服務突然下線了!CTO又有殺程序員祭天的理由了!
事故1:Azure App Service
Azure App Service運行一段時間之后,你也許會遇到磁盤占滿的錯誤, 表象如下:
應用程序觸發System.Io.IOException:There is not enough space on the disk異常
你會在KUDU控制臺發現磁盤錯誤(紅色警告)
當你使用Visual Studio部署新的代碼,你會得到失敗結果。
ERROR_NOT_ENOUGH_DISK_SPACE: Web deployment task failed. (Web Deploy detected insufficient space on disk)
每個App Service Plan只獲得與定價層匹配的磁盤空間分配,故面向Azure App Service開發的應用需要關注空間消耗!
| 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`庫文件<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本身卻忘記了控制日志大小。
清理容器治標不治本,要從根本上解決問題,需要限制容器的日志大小上限。
配置每個容器的docker-compose中的max-size
全局設置
新建/etc/docker/daemon.json,若有就不用新建了,添加log-dirver和log-opts參數
---------------------------------------------------------------
剖析以上事故,因為是我一個人開發+部署,考慮了一些事,也遺漏了一些事,凸顯了職業運維的重要性。
開發和運維,相愛相殺!相輔相成!相得益彰!
臨近年關,大家也檢查一下部署的應用是否有此低級的風險,?不要像我一樣晚節不保!
關注并星標我們
更多干貨及最佳實踐分享
總結
以上是生活随笔為你收集整理的临近年关,发生两起磁盘占满引发的服务下线故障的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BeetleX自定义http/webso
- 下一篇: 如何在 ASP.NET Core 中 自