胡曉明
(合肥職業(yè)技術學院,安徽合肥,230013)
數(shù)字化時代,需要以數(shù)據(jù)為核心進行商業(yè)邏輯的重構。這包括兩個方面,一是重構新價值,同時創(chuàng)造新模式。為顧客創(chuàng)造新價值的同時創(chuàng)造新模式,這個新價值新模式就是如何離消費者更近,如何更高效響應消費者,提供差異化的服務,提高效率,降低成本,同時有更多的資源投入新產(chǎn)品的研發(fā)。
企業(yè)數(shù)字化轉型的主要目標,是通過對企業(yè)全面、系統(tǒng)的數(shù)字化重塑,來實現(xiàn)企業(yè)的智慧化升級,將企業(yè)打造成為面向未來的智慧企業(yè),而數(shù)字化轉型,則是打造智慧企業(yè)的主要手段和核心路徑。向“數(shù)字”要“效率”,是企業(yè)業(yè)務重塑的必然選擇。數(shù)字化首先讓目標變得可度量,可度量就可不斷優(yōu)化,結果是提高生產(chǎn)制造、供需匹配、維保服務的效率,最終可以降低經(jīng)營成本,提高企業(yè)競爭力。
隨著企業(yè)信息化的不斷升級,企業(yè)面臨的IT系統(tǒng)壓力越來越大,IT運維更是成為企業(yè)一大負擔。IT業(yè)務不斷升級,對IT運維的要求也日漸提升。隨著競爭的加劇,越來越多的企業(yè)開始壓縮運營成本,降低信息化的投入也就成了重要舉措,因為市場變化快,導致企業(yè)對產(chǎn)品上線時間的要求越來越,大型企業(yè)的信息化更加滲透到企業(yè)的方方面面,由此對IT系統(tǒng)本身的精細化管理要求更高,IT運維不再是提供單一的設備維修,而要為企業(yè)帶來更加智能、高效并且安全的整個IT系統(tǒng)的優(yōu)化與維護。
信息技術運營(通常稱為IT運營或 ITOps)是成功企業(yè)最重要的組成部分之一。IT運營包括內(nèi)部和外部客戶的管理流程和硬件和軟件支持。有效的IT運營管理可確保組織流程和服務的可用性、效率和性能。IT部門面對不斷增長的異構IT 基礎設施和應用,需要借助更好的自動化工具、監(jiān)控工具及日志工具等來提升效率,保障質(zhì)量。
推動企業(yè)數(shù)字化轉型,包括業(yè)務數(shù)字化、流程工具化、數(shù)據(jù)業(yè)務化等,這就對企業(yè)IT運維提出了新需求,新挑戰(zhàn)。這其中一個重要需求和挑戰(zhàn)就是面對復雜的混合云生產(chǎn)環(huán)境如何提高企業(yè)運維的自動化水平和加強運維人員的之間的協(xié)作,這樣才能提高在企業(yè)運維中對于突發(fā)事件的響應速度,為企業(yè)的生產(chǎn)經(jīng)營更好服務。
ChatOps代表基于聊天的操作,是一種協(xié)作模型,通過聊天平臺和專業(yè)聊天機器人的廣泛使用,以無縫和透明的方式將人員、流程、工具和自動化連接起來。使用ChatOps,所有技術團隊成員可以在同一個虛擬位置一起工作,通過使用他們熟悉的聊天平臺查看和共享相同的信息。團隊成員在訪問必要的工具時,可以從使用機器人或其他集成的聊天工具中訪問這些工具,而不需要他們打開專用的應用程序窗口或控制臺。
圖1 ChatOps 運維社交平臺參與主體圖
在一個運維協(xié)作社交平臺,一般會包含四部分的參與主體。這四部分分別是運維人員,社交平臺,機器人平臺和工具平臺。
運維人員通過社交平臺進行和機器人平臺進行信息交互,機器人平臺會根據(jù)運維人員輸入的信息進行匹配和比較,然后發(fā)送相應的請求給工具平臺,同時接收來自工具平臺的返回結果,并通過社交平臺展示給運維人員。這樣所有運維人員使用同一個場所就可以獲取遠程的基礎設施信息而不需要脫離當前控制臺,這樣大大提高了IT運維對熱點事件的處理速度。
Node.js作為異步事件驅動的 JavaScript 運行時環(huán)境,是一個基于Chrome JavaScript 運行時建立的一個平臺,它旨在構建可擴展的網(wǎng)絡應用程序。Node.js 的包管理器是npm。通過npm 可以安裝、共享、分發(fā)代碼,管理項目依賴關系。
Hubot 是在 Node.js 上用 CoffeeScript 編寫的開源包,并且可以輕松部署在多種云平臺上,與多種社交平臺進行集成。更重要的是,Hubot 是一種標準化的方式,可以在每個人的機器人之間共享腳本。Hubot 是企業(yè)運維人員友好的機器人助手。將它集成到企業(yè)的運維平臺,可以顯著提高員工效率。
在Hubot中,機器人提供了多種對消息的處理方式,如圖2所示。
圖2 Hubot 消息處理功能圖
Robot.hear:監(jiān)聽任何匹配的輸入信息。即在聊天過程中,只要匹配到特定的消息,就會觸發(fā)回調(diào)函數(shù)。
Robot.respond :監(jiān)聽只針對Hubot 說的輸入信息。即在聊天過程中,只要匹配到對Hubot的特定消息,然后觸發(fā)回調(diào)函數(shù)。
Robot.listen:自由度最高的監(jiān)聽器,傳入一個匹配函數(shù)(Match Function)對消息進行匹配。該函數(shù)返回true時回調(diào)函數(shù)會被執(zhí)行。
Robot.http:Hubot 自帶一個 node-scoped-httpclient 來發(fā) http 請求。
Robot.router:Hubot提供事件路由功能,可以根據(jù)不同的信息,觸發(fā)不同的事件路由。
基于Hubot的機器人協(xié)作平臺由三層構成,分別是:工具層、控制層和交互層。
工具層主要對各種IT運維中各種基礎設施的信息獲取,包括對各種IT系統(tǒng)的日志,指標通過工具進行獲取。比如通過Shell腳本,或者Ansible的playbook對各種系統(tǒng)信息進行及時獲取。這個工具層可以根據(jù)需要進行擴展,針對不同的任務添加不同的工具。
控制層位于中間部分,包括兩個模塊,模塊一是Co mmand Controller,主要負責HUBOT機器人和工具層的通信,該模塊負責解析相關的命令和參數(shù),同時把命令調(diào)用請求傳遞給工具層,然后把工具層執(zhí)行的結果返回給Hubot。該模塊可以重用已經(jīng)有的Node.js庫來實現(xiàn),也可以根據(jù)需要直接使用NPM包。模塊二是Chattool Adapter,是Hubot同各種聊天平臺進行交互的適配器。它主要負責把社交聊天平臺的信息傳遞給Hubot機器人,然后機器人把相應的信息傳遞給模塊Command Controller. 該模塊也負責把命令執(zhí)行結果反饋到聊天協(xié)作平臺中去,以方便IT運維人員共享信息,為快速解決問題提供保證。該模塊主要使用各個聊天平臺提供的軟件開發(fā)包(SDK)來實現(xiàn)。
最上層的交互層,負責接受運維人員的信息輸入,同時展示控制層返回的命令執(zhí)行結果,起到信息共享的作用。該層需要根據(jù)企業(yè)運維業(yè)務的不同而進行自行開發(fā)定制。
圖3 系統(tǒng)總體架構圖
在我們的運維協(xié)作社交平臺中,一個完整的流程從運維人員響應系統(tǒng)事件開始,運維人員需要獲取相關系統(tǒng)事件的具體信息,這時該人員輸入獲取運行IT系統(tǒng)信息到社交平臺(比如Slack),運維社交平臺中的機器人會捕獲相關命令信息,經(jīng)過社交平臺機器人的處理,然后調(diào)用遠程系統(tǒng)的工具集,如Shell 腳本和Ansible的playbook,然后反饋遠端的系統(tǒng)信息到社交平臺,最后利用運維社交平臺對返回結果進行可視化處理,最終展示給所有事件處理參與者。如圖4所示。
圖4 運維社交平臺協(xié)作流程圖
在這樣的運維社交平臺里,運維人員可以有多種方式進行交互。最常用的交互方式通過@符號輸入命令行的方式。當每個人需要查詢遠程資源的狀態(tài)或者讓遠端系統(tǒng)執(zhí)行相應的命令時,可以采用這樣的方式。第二種方式是通過利用鼠標對返回的結果進行選擇操作,這樣可以提供響應效率。另外就是可以對返回的結果進行超級鏈接標注,這樣可以實現(xiàn)跨應用的快速切換。
我們選擇Slack作為我們的社交平臺,選擇redhat Linux8.x作為Hubot機器人平臺進行配置,另外選取多臺其他Linux平臺作為運維測試系統(tǒng)來搭建我們的環(huán)境。在Slack中集成Hubot機器人來構建我們的運維協(xié)作社交平臺,同時在協(xié)作平臺中,我們通過robot.listen實現(xiàn)了對不同命令進行監(jiān)聽和處理,并且通過使用中間件hubotscirpt-shellcmd,實現(xiàn)了對遠程運維工具集的調(diào)用和結果的返回處理。進一步我們通過在工具層集成Ansible來提供更強大的自動化能力,實現(xiàn)了我們對多種云環(huán)境信息的監(jiān)控和獲取。
下面是在Hubot中實現(xiàn)監(jiān)聽并匹配輸入信息的例子,當系統(tǒng)名稱匹配時,就調(diào)用相應的功能返回不同的信息,或者我們可以擴展該功能去執(zhí)行命令并獲取信息:
在調(diào)用命令之前,需要通過如下配置步驟,以便可以在Hubot中讓機器人可以交互式地實現(xiàn)命令的調(diào)用。為了方案驗證的方便快捷,我們直接使用了一個已有Hubot插件來進行命令行處理。在實際的項目工作中,我們需要自己實現(xiàn)該功能,比如通過Node.js提供的子進程模塊child_process,這樣可以增加我們控制的靈活性。
步驟1:安裝Hubot, 請參考Hubot安裝配置手冊
步驟2:在Slack中集成Hubot機器人,請參考我們的參考文檔[2]。Hubot機器人和Slack之間的通信通過Token來實現(xiàn)。
步驟3:配置hubot-script-shellcmd模塊
步驟4:單獨把shellcmds 模塊分割開來,以便我們把所有腳本都集中到相應的Bash目錄下cp -R node_modules/hubot-script-shellcmd/bash .
步驟5:增加模塊hubot-scirpt-shellcmd到配置文件external-scripts.json中
步驟6:安裝配置Ansible, 以便運維人員可以從社交平臺調(diào)用相關自動化命令進行系統(tǒng)監(jiān)控
步驟7:實現(xiàn)各種監(jiān)控腳本,并放到
最后我們獲得了一個IT運維人員通過社交平臺協(xié)作交互的結果。如圖5所示。
圖5 機器人運維交互圖
運維人員可以通過繼續(xù)運行相應的命令來獲得遠端機器的信息。如圖6所示。在這樣的環(huán)境里,你可以添加更多腳本來獲取遠程機器的信息。當遇到運維問題時,相關人員都可以加入這個頻道來進行問題的協(xié)作解決,從而提高了問題解決的響應時間,提高了工作效率。由于社交平臺不僅提供桌面客戶端,同時也支持移動客戶端,這樣就使得運維人員之間的協(xié)作空間和協(xié)作效率進一步擴展,為熱點事件的解決提供了快速通道。
圖6 機器人運維獲取遠端機器信息結果圖
基于Hubot開源機器人技術的IT運維交互平臺可以增強運維人員的協(xié)作性,提高IT運維人員的工作效率。平臺構建為企業(yè)數(shù)字化轉型過程中,IT運維對熱點事件的快速協(xié)作響應提供了一種可行解決方案。后續(xù)將進一步探索在Hubot平臺上如何增加更加豐富的交互方式和更強大自動化能力的結合,進一步完善運維交互協(xié)作平臺,提升企業(yè)運維對關鍵事件的響應效率,促進企業(yè)數(shù)字化轉型升級。