临近年关,发生两起磁盘占满引发的服务下线故障
一口氣說(shuō)兩個(gè)因?yàn)榇疟P空間不足引發(fā)的應(yīng)用故障。
作為拿起鍵盤一把梭的Coder, 開(kāi)發(fā)--->部署-->收工--->心曠神怡,滋一口82年的可樂(lè).
過(guò)了幾個(gè)月,服務(wù)突然下線了!CTO又有殺程序員祭天的理由了!
事故1:Azure App Service
Azure App Service運(yùn)行一段時(shí)間之后,你也許會(huì)遇到磁盤占滿的錯(cuò)誤, 表象如下:
應(yīng)用程序觸發(fā)System.Io.IOException:There is not enough space on the disk異常
你會(huì)在KUDU控制臺(tái)發(fā)現(xiàn)磁盤錯(cuò)誤(紅色警告)
當(dāng)你使用Visual Studio部署新的代碼,你會(huì)得到失敗結(jié)果。
ERROR_NOT_ENOUGH_DISK_SPACE: Web deployment task failed. (Web Deploy detected insufficient space on disk)
每個(gè)App Service Plan只獲得與定價(jià)層匹配的磁盤空間分配,故面向Azure App Service開(kāi)發(fā)的應(yīng)用需要關(guān)注空間消耗!
| Disk Space | 1G | 10G | 50G | 250G |
一個(gè)App Service Plan可支撐多個(gè)web應(yīng)用共享付費(fèi)套餐里面的所有資源,如果磁盤文件大小超過(guò)配額,你會(huì)看到上面的錯(cuò)誤!
你可以在每個(gè)應(yīng)用的[App Service Paln]--->[Quotas] 配置節(jié)下面發(fā)現(xiàn)當(dāng)前應(yīng)用占用的磁盤空間。
一個(gè)常規(guī)的Web應(yīng)用包含如下內(nèi)容:
| 1 | WebSite Content | 剛需 | |
| 2 | App_Data | 存儲(chǔ)持久化數(shù)據(jù)/圖片 | 嘗試轉(zhuǎn)移到Azure其他存儲(chǔ)組件 |
| 3 | Log Files | 本地日志文件 | 嘗試轉(zhuǎn)移到Azure其他存儲(chǔ)組件 |
Azure Storage Account為任意數(shù)據(jù)提供可擴(kuò)展、持久化的云存儲(chǔ)、備份和恢復(fù)解決方案,包括非結(jié)構(gòu)化文本或二進(jìn)制數(shù)據(jù),如視頻、音頻和圖像。
本文點(diǎn)到為止,演示將日志數(shù)據(jù)轉(zhuǎn)移到Azure Storage Container (非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ))。
#?還是以常見(jiàn)的NLog為藍(lán)本: #?引入`NLog.Extensions.AzureBlobStorage`庫(kù)文件<target?xsi:type="AzureBlobStorage"name="Cloud_applogs"layout="${format}"connectionString="********"container="actionlogs"?blobName="applogs/applog-${date:format=yyyyMMdd}.log"??/>#?其中的ConnectionString參見(jiàn)[Settings]-->[Access?Keys]??<logger?name?="LoggingActionFilter"?minlevel="Info"?writeTo="Cloud_applogs"?/>事故2: ?Docker
Docker默認(rèn)以Json的形式將日志存儲(chǔ)到/var/lib/docker/containers
使用 docker system df命令查看Docker磁盤占用
使用docker ps --size定位每個(gè)容器的磁盤占用
我手上的應(yīng)用,部署了EFK采集數(shù)據(jù),并為ES的索引指定了較充裕的獨(dú)立磁盤, 但是對(duì)EFK本身卻忘記了控制日志大小。
清理容器治標(biāo)不治本,要從根本上解決問(wèn)題,需要限制容器的日志大小上限。
配置每個(gè)容器的docker-compose中的max-size
全局設(shè)置
新建/etc/docker/daemon.json,若有就不用新建了,添加log-dirver和log-opts參數(shù)
---------------------------------------------------------------
剖析以上事故,因?yàn)槭俏乙粋€(gè)人開(kāi)發(fā)+部署,考慮了一些事,也遺漏了一些事,凸顯了職業(yè)運(yùn)維的重要性。
開(kāi)發(fā)和運(yùn)維,相愛(ài)相殺!相輔相成!相得益彰!
臨近年關(guān),大家也檢查一下部署的應(yīng)用是否有此低級(jí)的風(fēng)險(xiǎn),?不要像我一樣晚節(jié)不保!
關(guān)注并星標(biāo)我們
更多干貨及最佳實(shí)踐分享
總結(jié)
以上是生活随笔為你收集整理的临近年关,发生两起磁盘占满引发的服务下线故障的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: BeetleX自定义http/webso
- 下一篇: 程序员过关斩将--少年派登录安全的奇幻遐