從docker-ELKa談一下docker化的思路

題圖

去年10月,我開(kāi)始對(duì)兩項(xiàng)技術(shù)充滿著好奇,一個(gè)是ELK,另一個(gè)是docker。

ELK的核心是一個(gè)“分布式實(shí)時(shí)搜索引擎”,光聽(tīng)名字就會(huì)被吸引住,因?yàn)榧幢阌袑iT(mén)的團(tuán)隊(duì),要做一個(gè)這樣的搜索引擎也不是件容易的事情;對(duì)于小團(tuán)隊(duì),或創(chuàng)業(yè)公司,能有ELK使用是一種福音,所以我們花時(shí)間來(lái)學(xué)習(xí)這項(xiàng)技術(shù)是非常值得的,說(shuō)不定哪天就可以派上用場(chǎng)。ELK的使用場(chǎng)景一般有兩個(gè):

  1. 作為全局日志收集中心,將非結(jié)構(gòu)化的日志轉(zhuǎn)化為結(jié)構(gòu)化的信息進(jìn)行存儲(chǔ),存儲(chǔ)后,你可以做很多事情,例如監(jiān)控服務(wù)是否正常,排查某個(gè)用戶反饋的問(wèn)題等,同時(shí),ELK還可以幫你把結(jié)果進(jìn)行可視化展示
  2. 把它作為公司網(wǎng)站的搜索引擎,搜索引擎是互聯(lián)網(wǎng)行業(yè)中的明星技術(shù),有了它,老板們?cè)僖膊挥脼樗阉饕娴拈_(kāi)發(fā)成本發(fā)愁了。

簡(jiǎn)單介紹完ELK,下面說(shuō)下docker,docker是近幾年來(lái)的一個(gè)革命化產(chǎn)品,通俗點(diǎn)說(shuō),它是一個(gè)輕量級(jí)的虛擬機(jī),運(yùn)行時(shí)額外消耗的資源少,使用它可以統(tǒng)一公司的開(kāi)發(fā)環(huán)境,規(guī)范化部署,更重要的是,它可以把一個(gè)服務(wù)依賴的所有組件一起打包,通過(guò)操作一個(gè)包來(lái)管理所有的組件,這不是革命是什么,沒(méi)有比這更好的解放程序員重復(fù)勞動(dòng)的工具了,所以,你可以看到的是,基本上所有互聯(lián)網(wǎng)公司都在使用它,在2016年的《ThoughtWorks技術(shù)雷達(dá)》里,你甚至可以看到

docker, docker, docker!

這樣簡(jiǎn)單粗暴的標(biāo)題,不止是重要的事情說(shuō)三遍,還有一種終于等到你的感覺(jué)。

總的來(lái)說(shuō)這兩項(xiàng)技術(shù)可以極大的節(jié)省開(kāi)發(fā)成本,提升工作效率,讓工程師們專注于提升自己的價(jià)值、為公司創(chuàng)造財(cái)富的事情上,正因?yàn)榇?,才有了我今天想說(shuō)的docker-elka,從名字上,可以把它理解為ELK的docker化產(chǎn)物,即把ELK打包成一個(gè)服務(wù),那么最后面的a是什么,a是elastalert,它是專門(mén)為ELK量身打造的監(jiān)控報(bào)警軟件,當(dāng)你想監(jiān)控某個(gè)值是否異常,例如超出閾值、波動(dòng)非常大等,當(dāng)這些條件發(fā)生時(shí),你還可以通過(guò)郵件等多種方式報(bào)警,讓我們可以更為主動(dòng)的處理異常事件。所以,docker-elka打包了4個(gè)軟件,分別是elasticsearch、logstash、kibana和elastalert,你可以在我的github上查看并使用它:http://t.cn/RaBICBl

這個(gè)項(xiàng)目并不是從零開(kāi)始的,它基于github上的兩個(gè)獨(dú)立的項(xiàng)目,一個(gè)是docker-elk,一個(gè)是elastalert-docker,我只是把它們整合起來(lái),同時(shí)對(duì)國(guó)內(nèi)用戶更為友好。

最終這個(gè)項(xiàng)目呈現(xiàn)出來(lái)的內(nèi)容是非常簡(jiǎn)單的,但由于也是初學(xué)docker,讓我走了不少?gòu)澛?,下面我主要結(jié)合docker化的思路,和國(guó)內(nèi)用戶使用docker的正確方式這兩點(diǎn)來(lái)做下總結(jié)

docker化的思路

知道了docker這項(xiàng)技術(shù)后,便產(chǎn)生了馬上把它用起來(lái)的想法,雖然我不知道它的全部細(xì)節(jié),但我知道“那個(gè)地方”是一個(gè)“更好的世界”,先來(lái)看看在docker化之前我設(shè)計(jì)的ELK拓?fù)鋱D:

第一眼的映像應(yīng)該是相當(dāng)復(fù)雜的,但它的可用性、可擴(kuò)展性和吞吐量卻可以令人滿意,唯一的缺點(diǎn)是,每次部署需要花費(fèi)比較多的時(shí)間,因?yàn)樵诿颗_(tái)機(jī)器上,都需要做以下事情:

  1. 拷貝必要的軟件
  2. 安裝軟件
  3. 配置、啟動(dòng)軟件

當(dāng)然你可以用一些自動(dòng)化工具(例如saltstack)來(lái)提高效率,但如果你的規(guī)模很小,自動(dòng)化工具對(duì)你的幫助會(huì)比較有限,這時(shí)docker化的ELK優(yōu)勢(shì)就非常明顯了,它能讓你在任何有需要的地方,一鍵啟動(dòng)最基本的組件,對(duì)比起來(lái),如果用四兩撥千斤來(lái)形容這種工作方式,我認(rèn)為再適合不過(guò)了。

docker化一般思路是先把每個(gè)服務(wù)build成docker image,然后把它們push到docker hub,創(chuàng)建docker-compose文件,通過(guò)這個(gè)文件把所有的images組合到一起,同時(shí)將配置文件和數(shù)據(jù)通過(guò)docker volume的方式,把宿主的文件夾掛載到docker容器中,從而達(dá)到容器和宿主間數(shù)據(jù)共享的效果(在這里需要注意權(quán)限問(wèn)題,尤其是elasticsearch的數(shù)據(jù)權(quán)限),在新的環(huán)境運(yùn)行應(yīng)用前,只需要調(diào)整配置,然后執(zhí)行docker-compose up命令,它會(huì)從docker hub上下載對(duì)應(yīng)的images,并且運(yùn)行它們。

之前走的彎路是,省去了上傳docker hub這一步,導(dǎo)致了每次切換環(huán)境都要build所有的images,而build時(shí)間往往比較長(zhǎng),這在后續(xù)的使用中是不能忍受的,github上還有另外一個(gè)elk的docker化項(xiàng)目:http://t.cn/RMyq7pl,就是按照這樣的方式實(shí)現(xiàn)的,感興趣的同學(xué)可以對(duì)比下差異。

國(guó)內(nèi)用戶使用docker的正確方式

國(guó)內(nèi)使用docker的首要問(wèn)題是速度太慢,直接使用別人的項(xiàng)目往往會(huì)進(jìn)行不下去,所以第一個(gè)需要解決的問(wèn)題就是提速,docker提速需要注意兩個(gè)方面:

  1. docker hub的加速,加快鏡像下載的速度
  2. container內(nèi)部安裝軟件的加速

docker hub的加速非常直接,也很簡(jiǎn)單,推薦使用阿里云加速器,以Linux為例,只需要配置/etc/docker/daemon.json即可

container內(nèi)部軟件的加速要區(qū)別對(duì)待,假設(shè)你使用ubuntu基本鏡像,你不能直接修改apt源——我就犯過(guò)這樣的錯(cuò),導(dǎo)致完全沒(méi)有速度——而要找到自帶國(guó)內(nèi)apt源的基本鏡像,中科大的基本鏡像比較全;除此之外的軟件加速,則需要手動(dòng)配置了,例如pip源,則需要修改/root/.pip/pip.conf和/root/.pydistutils.cfg這兩個(gè)文件。

這兩類(lèi)源設(shè)置后,再操作docker,會(huì)讓你事半功倍。

總結(jié)一下,本文主要是docker和elk的簡(jiǎn)要介紹,希望能幫你能清晰的認(rèn)識(shí)到它們是什么,能對(duì)在工作中是否有機(jī)會(huì)應(yīng)用它們做出判斷,同時(shí)結(jié)合自己在使用過(guò)程中遇到的問(wèn)題,讓你在使用時(shí)少走彎路,最后再附上docker-elka這個(gè)項(xiàng)目的github地址:http://t.cn/RaBICBl,有任何問(wèn)題可以直接和我交流

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Docker — 云時(shí)代的程序分發(fā)方式 要說(shuō)最近一年云計(jì)算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,850評(píng)論 15 147
  • 從“集裝箱”思考Docker風(fēng)潮 - 推酷 http://www.tuicool.com/articles/A7R...
    葡萄喃喃囈語(yǔ)閱讀 1,329評(píng)論 0 2
  • 2年前的蘇州游,其實(shí)畫(huà)畫(huà)作為一種記錄方式, 真的很好 我估計(jì)等我老了,旅行的繪本都堆成小山山了,也是種財(cái)富呀
    艾米札記閱讀 169評(píng)論 0 1
  • 工作中的斷舍離 前段時(shí)間讀山下英子的《斷舍離》,感觸頗深。書(shū)中斷,是指斷絕想要但是不需要的東西;舍,是指舍棄已有但...
    蔡泊閱讀 1,518評(píng)論 0 0

友情鏈接更多精彩內(nèi)容