優云實踐:巧用Salt,實現CMDB配置自動發現

banner.jpg

隨著互聯網+新形勢的發展,越來越多的企業步入雙態(穩敏雙態)IT時代,信息化環境越來越復雜,既有IOE三層架構,也有VCE、Openstack等云虛擬化架構和互聯網化的分布式大數據架構。所以,企業急需建立一套合適的配置管理庫(CMDB),像人類“大腦”一樣統一存儲從基礎架構到業務應用各層面的配置信息,以便協調“身體”(運維系統)各部分完成復雜的運維工作。

CMDB如此重要,但又是運維中最難建設好的部分,就連很多IT運維界大佬都感嘆CMDB是運維人的最痛點,他們總結CMDB建設有3大難點,而保證配置數據的準確性更是難中之難。當前業界主要靠流程控制、人工維護和自動發現解決數據鮮活、準確的問題。流程控制和人工維護都脫不了人的參與,既然我們是人、不是“神”,就意味著會“偷懶”、會出錯。在這個信息爆炸的大數據時代,再依靠人肉運維,我們已經傷不起。所以,要想數據準確,關鍵還是要靠自動發現。

今天,筆者就來談一種配置信息的自動發現方案,望能解放運維人的雙手和大腦,這樣我們可以干一些更有意義的事,比如喝喝咖啡、陪陪家人。

一、采集工具的選型

要實現配置自動發現,需要有一個好用的基礎采集工具(功若善其事、必先利其器嘛)。有些大佬可能會說:容易,自己寫一個唄。但現在是互聯網分享時代,前輩們已經踩過很多坑,并貢獻出自己的心血,我們就不必要再重復造輪子了,大可以“拿來主義”,找一個最適合自己的開源工具來用。

談到開源的自動化配置管理工具,就不得不說Puppet、Chef、Ansible和SaltStack這四駕馬車?;ヂ摼W上對這四款工具有很多詳細的介紹和對比,這里不再詳談,主要說說我們選型的理由和結論。

首先,這四款工具的實現技術分兩大派別:Ruby(Puppet、Chef)和Python(Ansible、SaltStack)。很多前輩都說過,要真正應用好一項開源技術,你必須要真正掌控它。所以技術類型的選擇是至關重要的,Python號稱是運維人的語言,其簡潔統一、運行高效的特性更適合運維人使用。另外最重要的是Python有很多完善強大的OS、網絡編程方面的第三方庫,這些是Ruby無法比擬的。所以,從技術實現角度講,Ansible和SaltStack這兩個工具更適合我們運維人玩。

第二,Ansible和SaltStack兩者最大的差別是代理技術的采用,當然SaltStack也可以通過salt-ssh命令實現類似Ansible的無代理執行能力,只是SaltStack的設計理念是通過執行代理(Minion)來實現高效和可擴展的配置管理體系。

總結下來,有代理和無代理對比優勢主要有:

1)    無需保存賬戶密碼等敏感信息,避免信息泄露,也便于管理員定期更換密碼;

2)    可采集更豐富的配置信息和關聯關系,比如可通過配置文件分析獲取深層次配置信息;

3)    可快速感知配置變化,無代理模式只能定時輪詢,增加了網絡流量的消耗;

4)    可以實現快速的文件傳輸,比如可方便實現配置文件的收集。

1.jpg

通過以上分析對比,我們選擇SaltStack作為配置自動采集的基礎工具。

二、采集框架的搭建

SaltStack是一款強大的、集中化的配置自動化管理工具,它可以通過grains、pillar實現上千臺服務器的配置自動收集和管理(關于SaltStack我就不普及了,大家自行問問谷哥或者度娘吧)。不過現在它只提供了比較好的命令行工具,當然官方也提供了一個名叫halite的簡單WEB UI,只是這個WEB界面長得實在是挫了點,功能也有限,對不起SaltStack這個配置自動化管理“神器”的稱號??!

所以,我們的目標是利用SaltStack的框架和擴展能力來實現配置自動化采集,采集到數據后可以輸送到配置管理庫或者集中管理。整個采集框架邏輯設計如下圖所示:

2.jpg

SaltStack從部署上包含Master和Minion兩大部分。一個網絡域內只需要部署一個Master實現集中發現調度和管理,Minion安裝在各個被管主機上負責接收和執行腳本,并將采集結果反饋給Master。因為本文不是重點介紹SaltSatck,所以其安裝部署就不介紹了,大家還是可以去問問無所不知的谷哥和度娘。

三、自動發現的實現

框架確定了,那么我們接下來的主要任務就是編寫一個自動發現調度腳本(框架圖中的“自動發現Discovery”),定時從Master收集數據并進行集中處理。

腳本用什么寫?當然就選運維人專用語言Python了,其可與SaltStack天然集成,腳本的主要邏輯就是定時通過grains模塊從Master獲取配置信息并集中存儲或推送給其他需要的系統。在命令行下,我們可以用:

salt '*' grains.items

salt '*' grains.item {key1} {key2} …

獲取所有配置信息或者指定關鍵字名稱的配置信息,比如下圖獲取Tomcat_8080配置信息:

3.jpg

各位親可能會覺得奇怪,常規的grains.item {Key} 命令獲取到的數據只有1項,但這里得到一個多屬性的復雜對象。這是因為實際環境中在一個主機上會安裝多個服務,也就是存在多個配置項,所以我們采用Python的字典類型(dict)來存儲每個配置項的屬性信息,這樣只要通過一個Key就能獲取到配置項的所有信息。

注:如何進行配置信息的發現采集,如何讓grains按字典格式存儲配置項的采集結果會在第五節“信息采集的擴展”里細說。

我們也可以通過:salt '*' grains.ls 獲取有哪些Key:

4.jpg

既然我們用了強大的Python,在實際開發時就沒必要再通過Shell去調用SaltStack的命令行了,直接用salt.client模塊調用就可以獲得一個字典類型(dict)的返回結果,Python字典類型可直接輸出成JSON格式字符串,在對這個JSON串進行解析處理即可。

代碼示意如下:

5.jpg

四、配置采集的擴展

有了配置自動采集框架后,我們需要的便是不斷的添磚加瓦,也就是根據管理需求和配置模型不斷擴展豐富SaltStack的grains采集腳本,并將腳本文件放在Salt Master的grains目錄下(默認為/srv/salt/_grains),然后通過“salt '*' saltutil.sync_grains ”命令將腳本文件同步到所有Minion主機端就行。

我們以Tomcat服務的配置發現為例,收集安裝路徑、WEB服務端口、Tomcat版本信息、最大線程數等信息,腳本大致如下:

6.jpg

通過自定義采集腳本,某個Tomcat實例的配置信息發現如下:

7.jpg

是不是感覺如點讀機一樣so easy!其他更多配置信息的獲取就留個各位親去大展手腳了。當然,SaltStack的應用并不只是實現配置發現這么簡單,大家可以深入挖掘,發揮其最大的潛力,實現雙態IT下的自動化運維!

作者簡介:龐輝富

?優云軟件 (全棧運維服務平臺:https://uyun.cn) 資深架構師

?10多年IT運維管理軟件的研發經驗

?致力于自動化運維解決方案的研究和推廣

更多運維技術文章請關注優云官方微信(broada_ops)

原創文章,作者:uyunops,如若轉載,請注明出處:http://www.www58058.com/25995

(0)
uyunopsuyunops
上一篇 2016-07-26
下一篇 2016-07-26

相關推薦

  • linux系統從windows xp上同步時間

    最近公司客戶的調度系統GPS天文時鐘出現故障,導致整個調度系統失去時間源,時間積累誤差達十幾分鐘。去現場更換時鐘很不方便,所有就想用現場的一臺win xp(可上網)的遠程機器做NTPserver,然后給linux系統對時。上網查了好多資料,終于找到了一個有效的解決方案,具體內容和步驟如下:首先下載一個Windows下的NTP服務軟件。這個軟件可以搭建wind…

    Linux干貨 2015-03-27
  • 互聯網安全之sudo使用指南

    一、前言 sudo是什么? sudo是系統管理指令;由于root用戶權限過大,在實際生產過程中很少使用root用戶直接登錄系統,而是使用普通用戶登錄系統;但是如果普通用戶要對系統進行日常維護操作時需要su到root用戶,為了提高安全性,可以使用sudo授權某一用戶在某一主機以某一用戶身份運行某些命令;從而減少root用戶密碼知曉人,提高系統安全性。 &nbs…

    2015-06-23
  • bash代碼注入的安全漏洞

           很多人或許對上半年發生的安全問題“心臟流血”(Heartbleed Bug)事件記憶頗深,這兩天,又出現了另外一個“毀滅級”的漏洞——Bash軟件安全漏洞。這個漏洞由法國GNU/Linux愛好者Stéphane Chazelas所發現。隨后,美國電腦緊急應變中心(US-CERT)、紅帽以及多家從事安全的公…

    Linux干貨 2015-03-30
  • Nginx+resin調優文檔[原創]

    為什么不選擇Apache/mod+resin?       前面一直使用該模式,mod_caucho暴露源碼的bug一直未得到徹底的解決。因此切換到Nginx+resin平臺。硬件上要求除了內存一定要足夠大(建議>4G),無其它要求(當然也不能太破,呵呵)。操作系統強烈要求安裝64位,32位操…

    Linux干貨 2015-03-27
  • 日志分析工具Awstats實戰之Nginx篇-分析結果動態化

    上一篇博文“分析工具Awstats實戰之Nginx篇-分析結果靜態化”介紹了如何將awstats的日志分析信息用靜態頁面來進行顯示,不過顯示效果肯定沒有動態的好啦。本篇博文將帶大家一起來部署動態的分析結果查閱。 環境: CentOS 6.4 ip:192.168.1.113 域名:www.sunsky.com(server和client都通過hos…

    Linux干貨 2016-08-15
  • linux網絡管理

    Linux網絡配置 摘要:Linux 對網絡的管理分為 靜態指定和動態管理。 靜態指定 靜態指定ip一般有命令              ifconfig       &…

    Linux干貨 2016-04-05
欧美性久久久久