《從docker-ELKa談一下docker化思路》這篇文章介紹了為什么要使用docker-elk,和在使用過程中的主要思想,本篇文章就以這個(gè)項(xiàng)目為基礎(chǔ),介紹下
- 這個(gè)項(xiàng)目的構(gòu)成
- 深入了解這個(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ì)把它們稱為模塊:
- docker-compose及其啟動(dòng)項(xiàng),包括docker-compose.yml、elastalert、elasticsearch、kibana、logstash,整體由docker-compose.yml驅(qū)動(dòng)
- elastalert的docker化腳本,進(jìn)入docker-elastalert目錄,你可以構(gòu)建屬于你自己的elastalert
- 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中,它完成了以下工作
- 設(shè)置環(huán)境變量
- 設(shè)置pip源
- 安裝依賴,下載elastalert壓縮包
- 安裝elastalert
重新打包后,你還要將這個(gè)包上傳至docker hub,并用新的image遠(yuǎn)程路徑替換掉elastalert/Dockerfile
文件中的路徑
模塊3
考慮到我目前使用這個(gè)項(xiàng)目的場景是收集日志和監(jiān)控報(bào)警,所以我會(huì)對elasticsearch的空間占用做一些限制,盡可能的做到磁盤空間最大化,對elasticsearch模板的調(diào)整如下:
- 啟用數(shù)據(jù)壓縮
- 副本數(shù)設(shè)為0,單機(jī)本身也沒必要設(shè)置副本
- 字段設(shè)為not_analyzed
- 不啟用_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!