CMDB和運(yùn)維自動(dòng)化
IT運(yùn)維,指的是對(duì)已經(jīng)搭建好的網(wǎng)絡(luò),軟件,硬件進(jìn)行維護(hù)。運(yùn)維領(lǐng)域也是細(xì)分的,有硬件運(yùn)維和軟件運(yùn)維
硬件運(yùn)維主要包括對(duì)基礎(chǔ)設(shè)施的運(yùn)維,比如機(jī)房的設(shè)備,主機(jī)的硬盤(pán),內(nèi)存這些物理設(shè)備的維護(hù)
軟件運(yùn)維主要包括系統(tǒng)運(yùn)維和應(yīng)用運(yùn)維,系統(tǒng)運(yùn)維主要包括對(duì)OS,數(shù)據(jù)庫(kù),中間件的監(jiān)控和維護(hù),這些系統(tǒng)介于設(shè)備和應(yīng)用之間,應(yīng)用運(yùn)維主要是對(duì)線(xiàn)上業(yè)務(wù)系統(tǒng)的運(yùn)維
這里討論的主要是軟件運(yùn)維的自動(dòng)化,包括系統(tǒng)運(yùn)維和應(yīng)用運(yùn)維的自動(dòng)化
為什么需要運(yùn)維自動(dòng)化,運(yùn)維自動(dòng)化需要哪些工具,CMDB在運(yùn)維自動(dòng)化中的作用是怎樣的呢 ?
一. 傳統(tǒng)運(yùn)維痛點(diǎn)
先來(lái)看一下傳統(tǒng)運(yùn)維的痛點(diǎn)
1.1 日常工作繁瑣
日常運(yùn)維工作是比較繁瑣的,研發(fā)同學(xué)會(huì)經(jīng)常需要到服務(wù)器上查日志,重啟應(yīng)用,或者是說(shuō)今天上線(xiàn)某個(gè)產(chǎn)品,需要部署下環(huán)境。這些瑣事是傳統(tǒng)運(yùn)維的大部分工作
1.2 應(yīng)用運(yùn)行環(huán)境不統(tǒng)一
在部署某應(yīng)用后,應(yīng)用不能訪(fǎng)問(wèn),就會(huì)聽(tīng)到開(kāi)發(fā)人員說(shuō),在我的環(huán)境運(yùn)行很好的,怎么部署到測(cè)試環(huán)境后,就不能用了,因?yàn)楦黝?lèi)環(huán)境的類(lèi)庫(kù)不統(tǒng)一
還有一種極端情況,運(yùn)維人員習(xí)慣不同,可能憑自己的習(xí)慣來(lái)安裝部署軟件,每種服務(wù)器上運(yùn)行軟件的目錄不統(tǒng)一
1.3 運(yùn)維及部署效率低下
想想運(yùn)維人員需要登陸到服務(wù)器上執(zhí)行命令,部署程序,不僅效率很低,并且非常容易出現(xiàn)人為的錯(cuò)誤,一旦手工出錯(cuò),追溯問(wèn)題將會(huì)非常不容易
1.4 無(wú)用報(bào)警信息過(guò)多
經(jīng)常會(huì)收到很多報(bào)警信息,多數(shù)是無(wú)用的報(bào)警信息,造成運(yùn)維人員經(jīng)常屏蔽報(bào)警信
另外如果應(yīng)用的訪(fǎng)問(wèn)速度出了問(wèn)題,總是需要從系統(tǒng)、網(wǎng)絡(luò)、應(yīng)用、數(shù)據(jù)庫(kù)等一步步的查找原因
1.5 資產(chǎn)管理和應(yīng)用管理混亂
資產(chǎn)管理,服務(wù)管理經(jīng)常記錄在excel、文本文件或者wiki中,不便于管理,老員工因?yàn)楸容^熟,不注重這些文檔的維護(hù),只有靠每次有新員工入職時(shí),資產(chǎn)才能夠更正一次
二. 自動(dòng)化運(yùn)維平臺(tái)應(yīng)該有哪些特性
針對(duì)傳統(tǒng)運(yùn)維的痛點(diǎn),我們可以知道自動(dòng)化運(yùn)維需要支持哪些功能
2.1 標(biāo)準(zhǔn)化一切
運(yùn)維自動(dòng)化最重要的就是標(biāo)準(zhǔn)化一切
- OS的選擇統(tǒng)一化,同一個(gè)項(xiàng)目使用同樣的OS系統(tǒng)部署其所需要的各類(lèi)軟件
- 軟件安裝標(biāo)準(zhǔn)化,例如JAVA虛擬機(jī),php,nginx,mysql等各類(lèi)應(yīng)用需要的軟件版本,安裝目錄,數(shù)據(jù)存放目錄,日志存放目錄等
- 應(yīng)用包目錄統(tǒng)一標(biāo)準(zhǔn)化,及應(yīng)用命名標(biāo)準(zhǔn)化
- 啟動(dòng)腳本統(tǒng)一目錄和名字,需要變化的部分通過(guò)參數(shù)傳遞
- 配置文件標(biāo)準(zhǔn)化,需要變化的部分通過(guò)參數(shù)傳遞
- 日志輸出,日志目錄,日志名字標(biāo)準(zhǔn)化
- 應(yīng)用生成的數(shù)據(jù)要實(shí)現(xiàn)統(tǒng)一的目錄存放
- 主機(jī)/虛擬機(jī)命名標(biāo)準(zhǔn)化,虛擬機(jī)管理使用標(biāo)準(zhǔn)化模板
- 使用docker比較容易實(shí)現(xiàn)軟件運(yùn)行環(huán)境的標(biāo)準(zhǔn)化
2.2 資產(chǎn)管理系統(tǒng)(CMDB)
CMDB是所有運(yùn)維工具的數(shù)據(jù)基礎(chǔ)
如果用開(kāi)源工具(openstack,jenkins,ansible,saltstack,zabbix)來(lái)搭建自動(dòng)化運(yùn)維平臺(tái),如何將各個(gè)工具之間的數(shù)據(jù)統(tǒng)一起來(lái)就非常重要,如果這些工具的數(shù)據(jù)不統(tǒng)一記錄,那么意味著每增加一臺(tái)服務(wù)器,需要將這個(gè)服務(wù)器的數(shù)據(jù)在所有的工具系統(tǒng)中增加一遍,那么這些數(shù)據(jù)的統(tǒng)一就需要CMDB,那么如何獲取和更新CMDB中的數(shù)據(jù)呢,API無(wú)疑是一種非常好的方法
另外現(xiàn)在越來(lái)越多的公司選擇將自己的服務(wù)器遷移到云上,云其實(shí)就是虛擬化的一種高級(jí)應(yīng)用,這些公有云(阿里云,騰訊云,aws等)、私有云(openstack,Vmware等)都擁有比較完備的資源管理的API,這些API也就是構(gòu)建一個(gè)云服務(wù)器的CMDB的基礎(chǔ)。自動(dòng)化運(yùn)維平臺(tái)可以基于這些云平臺(tái)的API來(lái)管理和維護(hù)服務(wù)器、存儲(chǔ)、網(wǎng)絡(luò)、負(fù)載均衡等資源。
通過(guò)API對(duì)資源的操作需要日志記錄,以備后續(xù)操作審計(jì)。
2.3 集中化批量運(yùn)維工具
當(dāng)你維護(hù)的服務(wù)器從幾臺(tái),到幾十臺(tái),再到幾百臺(tái),集中化運(yùn)維就勢(shì)在必行了?,F(xiàn)在有不少開(kāi)源的集中化批量運(yùn)維工具,比如puppet、chef、ansible、saltstack。
我們主要使用ansible和saltstack,這兩個(gè)系統(tǒng)都是python寫(xiě)的,而且現(xiàn)在大多數(shù)運(yùn)維人員都有一定的python開(kāi)發(fā)能力,這兩個(gè)工具提供的API或者SDK來(lái)來(lái)實(shí)現(xiàn)更為復(fù)雜的功能
2.4 持續(xù)集成和部署工具
集成和部署工具,一般用jenkins的比較多,把打好的包發(fā)布至各臺(tái)服務(wù)器,可以通過(guò)批量運(yùn)維工具或者自定義腳本,軟件應(yīng)用從立項(xiàng)開(kāi)始就需要定義好業(yè)務(wù)線(xiàn),項(xiàng)目等,如果某個(gè)項(xiàng)目對(duì),服務(wù)器的資源需求增多,只需要在對(duì)應(yīng)的項(xiàng)目集群中增加對(duì)應(yīng)的資源,這些需要和CMDB聯(lián)系起來(lái)
軟件發(fā)布包括文件的上傳、分發(fā)、版本管理、回滾等各種操作,推薦使用SVN或者GIT對(duì)打包好的文件進(jìn)行管理,然后通過(guò)腳本在各臺(tái)服務(wù)器上進(jìn)行發(fā)布操作,利用SVN或GIt來(lái)完成文件的上傳、分發(fā)、版本管理、回滾等各種操作,這些操作對(duì)需要進(jìn)行日志記錄,需要在記錄中來(lái)確保
另外使用docker鏡像來(lái)進(jìn)行持續(xù)交付會(huì)更加高效,因?yàn)閐ocker鏡像可以輕松解決環(huán)境依賴(lài)的問(wèn)題
2.5 監(jiān)控及應(yīng)用性能分析工具
資源性能監(jiān)控和應(yīng)用性能監(jiān)控,有很多重疊的地方,如CPU或者內(nèi)存的使用率增高往往和應(yīng)用的性能有關(guān)
常使用開(kāi)源資源監(jiān)控系統(tǒng)有Zabbix、Nagios,OpenFalcon,這些軟件主要是服務(wù)器的資源性能監(jiān)控(例如CPU,磁盤(pán)、網(wǎng)絡(luò)、內(nèi)存等)和服務(wù)軟件的性能監(jiān)控(例如JAVA虛擬機(jī),中間件,數(shù)據(jù)庫(kù)等)
APM關(guān)注于對(duì)應(yīng)用程序內(nèi)部及應(yīng)用程序之間調(diào)用的性能分析,比如能精確定位到某應(yīng)用的URL的訪(fǎng)問(wèn)速度快慢,SQL執(zhí)行速度的快慢,這可以幫助開(kāi)發(fā)和運(yùn)維人員定位程序的應(yīng)用性能瓶頸
2.6 日志集中分析工具
應(yīng)用系統(tǒng)的問(wèn)題定位方式,主要就是日志分析。但是隨著業(yè)務(wù)和服務(wù)器的增長(zhǎng),日志的分析定位也會(huì)比較困難,系統(tǒng)一旦出故障,發(fā)生哪個(gè)應(yīng)用,引用所在服務(wù)器以及應(yīng)用的代碼。日志集中分析和APM一起使用,同時(shí)可以根據(jù)CMDB中記錄的應(yīng)用服務(wù)相關(guān)信息,應(yīng)用定位問(wèn)題會(huì)更加高效。
2.7 安全漏洞掃描工具
安全漏洞更多的是安全工程師的來(lái)做,運(yùn)維工程師更多是去解決這些漏洞,關(guān)于安全漏洞掃描如何與CMDB結(jié)合起來(lái)使用,可以使用提供API的漏洞掃描工具,針對(duì)CMDB中記錄中對(duì)安全要求很高的應(yīng)用來(lái)進(jìn)行掃描。
三. 資源管理系統(tǒng)的功能
從上面可以知道,所有的運(yùn)維工具都離不開(kāi)CMDB的支持,那么CMDB應(yīng)該有哪些數(shù)據(jù),可以實(shí)現(xiàn)什么樣的功能,如何確保CMDB的準(zhǔn)確性 ?
3.1 CMDB管理什么數(shù)據(jù)
- 用戶(hù)信息管理,記錄測(cè)試,開(kāi)發(fā),運(yùn)維人員的用戶(hù)表
- 業(yè)務(wù)信息線(xiàn)管理,需要記錄業(yè)務(wù)的詳情
- 項(xiàng)目信息管理,指定此項(xiàng)目用屬于哪條業(yè)務(wù)線(xiàn),以及項(xiàng)目詳情
- 應(yīng)用信息管理,指定此應(yīng)用的開(kāi)發(fā)人員,屬于哪個(gè)項(xiàng)目,和代碼地址,部署目錄,部署集群,依賴(lài)的應(yīng)用,軟件等信息
- 集群信息管理,指定集群屬于哪個(gè)項(xiàng)目,以及集群的Level(開(kāi)發(fā),測(cè)試,生產(chǎn))
- 主機(jī)信息管理,包括云主機(jī),物理機(jī),主機(jī)屬于哪個(gè)集群,運(yùn)行著哪些軟件,主機(jī)管理員,連接哪些網(wǎng)絡(luò)設(shè)備,云主機(jī)的資源池,存儲(chǔ)等相關(guān)信息
- 主機(jī)信息變更管理,主機(jī)的一些信息變更,例如管理員,所屬集群等信息更改,連接的網(wǎng)絡(luò)變更等
- 網(wǎng)絡(luò)設(shè)備信息管理,主要記錄網(wǎng)絡(luò)設(shè)備的詳細(xì)信息,及網(wǎng)絡(luò)設(shè)備連接的上級(jí)設(shè)備
- IP信息管理,IP屬于哪個(gè)主機(jī),哪個(gè)網(wǎng)段, 是否被占用等
數(shù)據(jù)庫(kù)表如下圖所示:
3.2 基于CMDB實(shí)現(xiàn)哪些功能
基于CMDB,可以實(shí)現(xiàn)采集資源信息自動(dòng)化,軟件安裝自動(dòng)化,應(yīng)用部署自動(dòng)化,告警信息更加詳細(xì)準(zhǔn)確,應(yīng)用關(guān)系拓?fù)鋱D,網(wǎng)絡(luò)拓?fù)鋱D更加清晰,這些工具對(duì)運(yùn)維會(huì)有很高的價(jià)值
在公司業(yè)務(wù)層面上,基于CMDB我們也可以做很多事情,最直接的就是IT資源的成本控制,另外還有集群容量彈性縮擴(kuò)容,應(yīng)用平臺(tái)的穩(wěn)定性,應(yīng)用的持續(xù)交付等功能
3.3 確保CMDB數(shù)據(jù)的準(zhǔn)確性
CMDB存儲(chǔ)管理企業(yè)IT架構(gòu)中設(shè)備的配置信息,它是所有的應(yīng)用運(yùn)行和應(yīng)用交付的提供相關(guān)的資源的數(shù)據(jù)基礎(chǔ),所以保證CMDB數(shù)據(jù)的準(zhǔn)確性顯得非常重要
想要確保CMDB的準(zhǔn)確性,根據(jù)自己各個(gè)公司的業(yè)務(wù)不同,來(lái)制定CMDB數(shù)據(jù)的錄入流程必不可少
我們?nèi)绾未_保CMDB的數(shù)據(jù)準(zhǔn)確性,公司所有的IT應(yīng)用(數(shù)據(jù)庫(kù)除外)全部運(yùn)行在VMware虛擬機(jī)中
- 硬件設(shè)備的資產(chǎn)管理,在采購(gòu)服務(wù)器或者網(wǎng)絡(luò)設(shè)備后,需要將相關(guān)的設(shè)備手工錄入CMDB系統(tǒng),并且指定連接的上級(jí)網(wǎng)絡(luò)設(shè)備,負(fù)責(zé)人
- 服務(wù)器需要安裝的VMware軟件后,通過(guò)Vcenter來(lái)管理虛擬機(jī)
- 新項(xiàng)目確立,申請(qǐng)服務(wù)器資源時(shí),需要填寫(xiě)業(yè)務(wù)線(xiàn),開(kāi)發(fā)人員,git庫(kù), 測(cè)試人員,應(yīng)用依賴(lài)的相關(guān)環(huán)境等詳細(xì)信息,CMDB系統(tǒng)會(huì)關(guān)聯(lián)相關(guān)的數(shù)據(jù)
- 運(yùn)維人員在分配IP,主機(jī)名等相關(guān)信息后,將開(kāi)發(fā),測(cè)試,生產(chǎn)等服務(wù)器記錄入CMDB, 且關(guān)聯(lián)相關(guān)的數(shù)據(jù)
- 創(chuàng)建虛擬機(jī)時(shí)使用標(biāo)準(zhǔn)的模板,自動(dòng)化創(chuàng)建,初始化虛擬機(jī),包括安裝salt客戶(hù)端,監(jiān)控客戶(hù)端
- 在準(zhǔn)備開(kāi)發(fā)環(huán)境時(shí),編寫(xiě)salt SLS文件,存入git庫(kù),方便安裝測(cè)試和生產(chǎn)環(huán)境
- 創(chuàng)建jenkins job,實(shí)現(xiàn)自動(dòng)化部署及自動(dòng)化打包的相關(guān)部分的定義
我們的CMDB還有哪些不足:
- 網(wǎng)絡(luò)關(guān)系拓?fù)鋱D沒(méi)有在CMDB中顯示
- 沒(méi)有實(shí)現(xiàn)應(yīng)用關(guān)系拓?fù)鋱D,希望可以通過(guò)APM工具來(lái)完善
- 資源監(jiān)控做的不夠到位,造成資源浪費(fèi),以及Vcenter虛擬機(jī)分配不合理
- 沒(méi)有實(shí)現(xiàn)應(yīng)用集成部署流水線(xiàn)
- 系統(tǒng)告警后,沒(méi)有自動(dòng)化處理相關(guān)的事件,更多的是在用人工解決
- CMDB沒(méi)有提供API,提供給別的系統(tǒng)調(diào)用