手把手教你玩轉(zhuǎn)docker-elk

《從docker-ELKa談一下docker化思路》這篇文章介紹了為什么要使用docker-elk,和在使用過程中的主要思想,本篇文章就以這個(gè)項(xiàng)目為基礎(chǔ),介紹下

  1. 這個(gè)項(xiàng)目的構(gòu)成
  2. 深入了解這個(gè)項(xiàng)目

通過這兩點(diǎn)內(nèi)容,你便可以快速成為項(xiàng)目的主人。

項(xiàng)目的構(gòu)成

我們先來看下項(xiàng)目的目錄結(jié)構(gòu)


這個(gè)目錄結(jié)構(gòu)可以分為3類,為了方便描述,后續(xù)會(huì)把它們稱為模塊:

  1. docker-compose及其啟動(dòng)項(xiàng),包括docker-compose.yml、elastalert、elasticsearch、kibana、logstash,整體由docker-compose.yml驅(qū)動(dòng)
  2. elastalert的docker化腳本,進(jìn)入docker-elastalert目錄,你可以構(gòu)建屬于你自己的elastalert
  3. elk的配置腳本,例如模板配置,參考set_template.sh

深入了解

在徹底把這個(gè)項(xiàng)目變成你自己的之前,你需要深入了解下每個(gè)模塊,這樣你才可以根據(jù)自己的需要對它做一些定制化的調(diào)整。

模塊1

首先來看第1個(gè)模塊,看上去第1個(gè)模塊的內(nèi)容很多,其實(shí)不然,因?yàn)槟阒恍枰私馄渲幸粋€(gè)(例如elasticsearch),其他的子模塊以此類推,這一點(diǎn)從docker-compose.yml文件中便可以看出來,拿elasticsearch為例,每個(gè)子模塊包括build、volume、ports、environment、networks和depends_on的設(shè)置

build - 會(huì)讓你進(jìn)入指定的目錄下,執(zhí)行其中的Dockerfile,啟動(dòng)對應(yīng)的image,我們看下Dockerfile,這個(gè)文件也特別簡單,在項(xiàng)目中指定的是我上傳到docker hub上的鏡像。這里我動(dòng)了個(gè)手腳,就是把原來的路徑給替換了,因?yàn)?code>docker.elastic.co實(shí)在是太慢了,不能用加速器加速,而docker hub是可以的,所以我的方法是先把鏡像從docker.elastic.co下載下來,再push到docker hub上去,把后者作為基本鏡像,解決了速度問題。

volumes - volume是docker項(xiàng)目的精髓,你可以通過volume把可能會(huì)變化的配置和數(shù)據(jù)放在宿主機(jī),而把不變的程序放到image中,這樣做的好處是,你隨時(shí)可以在宿主機(jī)修改配置、做數(shù)據(jù)備份,比起要進(jìn)入容器才能修改的方式高效很多。在CentOS里,elasticsearch data的volume設(shè)置有個(gè)小坑,你需要在宿主機(jī)把data目錄的user和group權(quán)限設(shè)置為1000:1000才行,否則elasticsearch沒有可寫權(quán)限,看下面這張圖你就會(huì)明白了

ports - 這個(gè)很好理解,即是程序在docker內(nèi)部的端口和宿主機(jī)導(dǎo)出的端口

environment - 通過environment可以設(shè)置一些環(huán)境變量,例如JVM占用的內(nèi)存等

networks - 指定這幾個(gè)服務(wù)通過什么方式進(jìn)行通信,這里使用的是bridge,也是docker自帶的網(wǎng)絡(luò)模式,這種網(wǎng)絡(luò)模式的特點(diǎn)是只支持單宿主,如果要在多個(gè)宿主中進(jìn)行通信,你需要了解下docker overlay

depends_on - 組件間的依賴,該項(xiàng)目中所有組件都依賴于elasticsearch

除docker-compose.yml之外,我們需要關(guān)注的只剩下volume在宿主的掛載點(diǎn)了,拿elasticsearch來說,也就是docker-elk/elasticsearch目錄下除Dockerfile以外的文件了,它們是運(yùn)行時(shí)elasticsearch的配置。特別的,elastalert中的配置相對來說較多一點(diǎn),它們在容器中的/opt目錄下,對應(yīng)于宿主機(jī)的docker-elk/elastalert/opt目錄,它包括3方面內(nèi)容

  • config:elastalert配置信息
  • logs:日志文件
  • rules:匹配規(guī)則,詳細(xì)參見文檔

模塊2

這里提供模塊2,為的是如果你想對elastalert進(jìn)行升級(jí),或者你想修改容器的時(shí)區(qū),你就得重新構(gòu)建這個(gè)image,構(gòu)建方法在Dockerfile中,它完成了以下工作

  1. 設(shè)置環(huán)境變量
  2. 設(shè)置pip源
  3. 安裝依賴,下載elastalert壓縮包
  4. 安裝elastalert

重新打包后,你還要將這個(gè)包上傳至docker hub,并用新的image遠(yuǎn)程路徑替換掉elastalert/Dockerfile文件中的路徑

模塊3

考慮到我目前使用這個(gè)項(xiàng)目的場景是收集日志和監(jiān)控報(bào)警,所以我會(huì)對elasticsearch的空間占用做一些限制,盡可能的做到磁盤空間最大化,對elasticsearch模板的調(diào)整如下:

  1. 啟用數(shù)據(jù)壓縮
  2. 副本數(shù)設(shè)為0,單機(jī)本身也沒必要設(shè)置副本
  3. 字段設(shè)為not_analyzed
  4. 不啟用_all字段,全文搜索就是靠的這個(gè)字段,如果啟用,每條記錄中的字段會(huì)被連起來存在_all字段中,沒有全文搜索需求不需要啟用該字段,節(jié)省空間

關(guān)于存儲(chǔ)空間的優(yōu)化,可以看這兩篇文章:文章1文章2

在這里,如果你和我的需求一樣,則只用在docker-elk啟動(dòng)后,執(zhí)行./set_template.sh腳本即可,而如果你有另外的需求,可以修改完./filebeat.template.json之后再執(zhí)行./set_template.sh

通過以上文字,你對這個(gè)項(xiàng)目的了解會(huì)更加深入,希望能通過它幫你快速構(gòu)建一個(gè)ELK環(huán)境,have fun!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容