一.安裝前須知
以下步驟在 VMware 中的 centos 7 中操作,ip 地址為:192.168.161.128;
注意安裝的時(shí)候最好統(tǒng)一版本,否則后面會(huì)出現(xiàn)許多問題,進(jìn)官網(wǎng)搜索對應(yīng)鏡像,查看 Tags 標(biāo)簽下的版本,目前我這最新的 Tags 是 7.12.1,所以拉取鏡像時(shí)統(tǒng)一加上該版本號。官網(wǎng)鏡像地址
Docker 搭建 ELK 之前需熟悉 Docker 的相關(guān)指令,如:拷貝容器文件docker cp、強(qiáng)制刪除容器: docker rm -f 容器id、創(chuàng)建網(wǎng)絡(luò): docker network create elk、查看日志:docker logs container 等等。
為了方便后續(xù)文件的掛載,先創(chuàng)建如下目錄 /usr/local/elk ,再執(zhí)行 mkdir /usr/local/elk/{elasticsearch,kibana,logstash} 創(chuàng)建3個(gè)對應(yīng)的目錄,所以以下操作如無特別說明,均在 /usr/local/elk下執(zhí)行。
為了容器間的通信,需要先用 docker 創(chuàng)建一個(gè)網(wǎng)絡(luò):?
docker network create --subnet=172.10.0.0/16 elk
二.安裝 Docker
安裝 docker 可以照著官網(wǎng)步驟一步一步來,挺簡單的。
Install Docker Engine on CentOS
安裝完后可以看下版本:docker -v
查看 docker 詳細(xì)信息:docker info
三.Docker 安裝 ElasticSearch
1.搜索、下載并查看鏡像
# 搜索鏡像
docker search elasticsearch
# 拉取 7.12.1 版本鏡像
docker pull elasticsearch:7.12.1
# 查看所有鏡像
docker images
2.拷貝配置文件
# 運(yùn)行 elasticsearch
docker run -d --name es --net elk -P -e "discovery.type=single-node" elasticsearch:7.12.1
# 進(jìn)入容器查看配置文件路徑
docker exec -it es /bin/bash
cd config
?在 config 中可看到 elasticsearch.yml 配置文件,再執(zhí)行?pwd
?可以看到當(dāng)前目錄為:?/usr/share/elasticsearch/config
,所以退出容器,執(zhí)行文件的拷貝:
# 將容器內(nèi)的配置文件拷貝到 /usr/local/elk/elasticsearch/ 中
docker cp es:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch/
# 修改文件權(quán)限
chmod 666 elasticsearch/elasticsearch.yml
# 在elasticsearch 目錄下再創(chuàng)建data目錄,同時(shí)修改權(quán)限
chmod -R 777 elasticsearch/data
注意:這里要修改文件的權(quán)限為可寫,否則,進(jìn)行掛載后,在外部修改配置文件,容器內(nèi)部的配置文件不會(huì)更改。同時(shí),創(chuàng)建 data 目錄進(jìn)行掛載。
3.重新運(yùn)行容器并掛載:
# 先刪除舊的容器
docker rm -f es
# 運(yùn)行新的容器
docker run -d --name es \
--net elk \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
--privileged=true \
-v $PWD/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v $PWD/elasticsearch/data/:/usr/share/elasticsearch/data \
elasticsearch:7.12.1
說明:
- -p (小寫)映射端口號,主機(jī)端口:容器端口
- -P(大寫)隨機(jī)為容器指定端口號
- -v 進(jìn)行容器的掛載
- –name 指定容器別名
- –net 連接指定網(wǎng)絡(luò)
- -e 指定啟動(dòng)容器時(shí)的環(huán)境變量
- -d 后臺(tái)運(yùn)行容器
- –privileged=true 使容器有權(quán)限掛載目錄
4.查看容器
# 查看運(yùn)行中的容器
docker ps
# 查看容器日志
docker logs es
curl localhost:9200
如果日志無誤,可以用?curl ip:9200
?查看結(jié)果,也可用瀏覽器輸入?http://ip:9200
?查看。至此,elasticsearch 安裝完成。
同時(shí),我們可以在 data 目錄下看到容器內(nèi)的數(shù)據(jù),并且在宿主機(jī)修改也會(huì)同步到容器的內(nèi)部。
如果遇到連接不上elasticsearch?
解決辦法
在elasticsearch的配置文件(config/elasticsearch.yml)里加上允許跨域的配置
http.cors.enabled:?true
http.cors.allow-origin:?"*"
重新啟動(dòng)elasticsearch
四.Docker 安裝 ElasticSearch-
head(可選)
說明:這是 ES 的可視化界面,是為了方便后面調(diào)試時(shí)看日志有沒成功輸入到 ES 用的,非必須安裝的項(xiàng)目,也可跳過此步。
1.拉取鏡像
docker pull mobz/elasticsearch-head:5
2.運(yùn)行容器
docker run -d --name es_admin --net elk -p 9100:9100 mobz/elasticsearch-head:5
注意:這里使用到了 --net elk,即我們之間創(chuàng)建的網(wǎng)絡(luò);
如果沒有創(chuàng)建,則需要進(jìn)行下一步修改配置配件,如果前面照著創(chuàng)建了,則可以直接跳過。
3.編輯配置文件(可選)
#將配置文件拷貝到當(dāng)前目錄下
docker cp es_admin:/usr/src/app/Gruntfile.js ./
?編輯該配置文件,在 connect -> server -> options 下添加:?hostname: '0.0.0.0'
#將文件拷貝回去
docker cp Gruntfile.js es_admin:/usr/src/app/
# 重啟容器
docker restart es_admin
因?yàn)樵撶R像內(nèi)部沒有安裝 vi 和 vim,所以無法直接在容器內(nèi)部編輯,需要我們拷貝出來,修改后再進(jìn)行覆蓋。
重啟容器后,通過?http://ip:9100
?訪問即可查詢 ES 中的數(shù)據(jù)。
4.頁面無數(shù)據(jù)問題
如果打開頁面之后節(jié)點(diǎn)、索引等顯示完全,但是數(shù)據(jù)瀏覽中無數(shù)據(jù)顯示,那么我們還需要改一個(gè)配置文件,這是因?yàn)?ES 6 之后增加了請求頭嚴(yán)格校驗(yàn)的原因(我們裝的是 7.12.1 版本):
docker cp es_admin:/usr/src/app/_site/vendor.js ./
vi vendor.js
docker cp vendor.js es_admin:/usr/src/app/_site/
這個(gè)配置文件內(nèi)容有點(diǎn)多,這里需要了解 vim 的部分操作:
按 ESC 進(jìn)入命令模式,接著 : set nu 顯示行號,接著 : 行號 跳轉(zhuǎn)到對應(yīng)的行。
在這里我們需要修改:(注意不是把整行替換掉)
6886 行:contentType: "application/json;charset=UTF-8"
7573 行: contentType === "application/json;charset=UTF-8"
改完后再將配置文件 copy 回容器,不需重啟,直接刷新頁面即可。
五.Docker 安裝 Kibana
步驟大致如同 elasticsearch:
1.拉取鏡像
docekr search kibana
docker pull kibana:7.12.1
# 啟動(dòng) kibana 容器并連接同一網(wǎng)絡(luò)
docker run -d --name kibana --net elk -P -e "ELASTICSEARCH_HOSTS=http://es:9200" -e "I18N_LOCALE=zh-CN" kibana:7.12.1
注意: -e "ELASTICSEARCH_HOSTS=http://es:9200" 表示連接剛才啟動(dòng)的 elasticsearch 容器,因?yàn)樵谕痪W(wǎng)絡(luò)(elk)中,地址可直接填 容器名+端口,即 es:9200, 也可以填 http://192.168.161.128:9200,即 http://ip:端口。
2.拷貝文件
docker cp kibana:/usr/share/kibana/config/kibana.yml kibana/
chmod 666 kibana/kibana.yml
拷貝完成后,修改該配置文件,主要修改 elastissearch.hosts 并新增 i18n.locale 配置:
es 地址改為剛才安裝的 es 地址,因容器的隔離性,這里最好填寫 http://ip:9200;
kibana 界面默認(rèn)是英文的,可以在配置文件中加上 i18n.locale: zh-CN(注意冒號后面有個(gè)空格)。
這樣有了配置文件,在啟動(dòng)容器時(shí)就不用通過 -e 指定環(huán)境變量了。
#
# ** THIS IS AN AUTO-GENERATED FILE **
#
# Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
# elasticsearch 地址
elasticsearch.hosts: [ "http://192.168.161.128:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
# 開啟 kibana 的漢化(經(jīng)測試沒有這項(xiàng)也沒問題)
# i18n.locale: zh-CN
注意:如果使用掛載配置文件的方式啟動(dòng)的話,elasticsearch.hosts 這需填寫?http://ip:9200
,而不能使用容器名了,否則后面 kibana 連接 es 會(huì)失敗。(ip為es容器的網(wǎng)絡(luò)地址)
3.重新開個(gè)容器
#刪除原來未掛載的容器
docker rm -f kibana
# 啟動(dòng)容器并掛載
docker run -d --name kibana \
-p 5601:5601 \
-v $PWD/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml \
--net elk \
--privileged=true \
kibana:7.12.1
4.查看結(jié)果
打開瀏覽器,輸入:http://ip:5601
?打開 kibana 控制臺(tái),如果未能成功打開,可以使用:?docker logs kibana
?查看容器日志看是否運(yùn)行有誤等。
可參考官網(wǎng):Install Kibana with Docker
六.Docker 安裝 LogStash
安裝 Logtash 繼續(xù)同上:
1.拉取鏡像并拷貝配置
docker pull logstash:7.12.1
docker run -d -P --name logstash --net elk logstash:7.12.1
# 拷貝數(shù)據(jù)
docker cp logstash:/usr/share/logstash/config logstash/
docker cp logstash:/usr/share/logstash/data logstash/
docker cp logstash:/usr/share/logstash/pipeline logstash/
#文件夾賦權(quán)
chmod -R 777 logstash/
2.修改相應(yīng)配置文件
- 修改 logstash/config 下的 logstash.yml 文件,主要修改 es 的地址:
http.host: "0.0.0.0" xpack.monitoring.elasticsearch.hosts: [ "http://192.168.161.128:9200" ]
4.查看日志
docker logs -f logstash
每次啟動(dòng)完容器最好檢查下日志,這樣方便后續(xù)的步驟,如果出了問題,可以看到是哪的問題并方便解決。
七.創(chuàng)建springboot應(yīng)用
這個(gè)比較簡單,主要就是幾個(gè)配置文件:
- pom.xml 文件,引入 logstash 的依賴:
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>6.6</version> </dependency>
- 在 resource 下創(chuàng)建 log/logback-springxml 文件,這里我們主要填寫
<destination>ip:端口</destination>
,關(guān)于?<pattern>
標(biāo)簽則看個(gè)人使用情況修改。 - 最后修改 application.yml 文件:
logging: config: classpath:log/logback-spring.xml
啟動(dòng)后在 elasticsearch-head 界面即可看到輸出的日志:
?至此,完成了用 Docker 搭建 elk 的過程。
七.后記
在搭建 ELK 時(shí)有遇到如下幾個(gè)問題,特此記錄一下:
1.Docker 拉取內(nèi)存不足
由于我是在 VMware 裝的 centos 7 上搭建的,開始裝系統(tǒng)時(shí)掛載到根目錄下的內(nèi)存較小,因此,docker 拉取鏡像時(shí),到了 Logstash 這一步就提示內(nèi)存不足了,又不想重新裝過系統(tǒng),因此,可以通過編輯 docker 的配置文件,來改變默認(rèn)的容器卷下載的目錄。
# 查看 docker 默認(rèn)下載地址
docker info | grep "Docker Root Dir"
# 創(chuàng)建目錄
mkdir /home/docker-root
# 編輯配置文件
vi /usr/lib/systemd/system/docker.service
在編輯 docker.service 配置文件時(shí),在 [Service] 節(jié)點(diǎn)下找到 ExecStart,在后面加上:?--graph=/home/docker-root
?即可,docker-root 即為剛才創(chuàng)建的目錄:
[Service]
ExecStart=/usr/bin/dockerd --graph=/home/docker-root
最后重啟 docker:
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
2.Logstash端口映射
在編輯?logstash.conf
?文件時(shí),需要注意暴露出來的端口還需要容器映射才行,否則會(huì)導(dǎo)致 springboot 連接不上 logstash,如:
input {
tcp {
mode => "server"
host => "0.0.0.0" # 允許任意主機(jī)發(fā)送日志
port => 5044
codec => json_lines # 數(shù)據(jù)格式
}
}
這里允許任意主機(jī)通過 5044 端口發(fā)送日志,則在啟動(dòng)容器的時(shí)候,同時(shí)需要?-p 5044:5044
?將端口映射出去,否則 springboot 在啟動(dòng)時(shí)會(huì)連接不到 logstash。
3.啟動(dòng)容器時(shí)內(nèi)存不足
在啟動(dòng) elasticsearch 或 logstash 容器時(shí),可能會(huì)出現(xiàn)內(nèi)存不足的情況,我們可以通過編輯修改指定文件來修改內(nèi)存分配:
# 查找 jvm.options 文件
find / -name jvm.options
找到對應(yīng)的?jvm.options
?修改文件中的?-Xms
(最小內(nèi)存)和-Xmx
(最大內(nèi)存)。文章來源:http://www.zghlxwxcb.cn/news/detail-470636.html
或者在啟動(dòng) elasticsearch 容器時(shí),可直接加入環(huán)境變量如下所示,而 logstash 的目前沒找到,可通過前面修改?jvm.options
來修改。文章來源地址http://www.zghlxwxcb.cn/news/detail-470636.html
-e "ES_JAVA_OPTS=-Xms1g -Xmx1g"
到了這里,關(guān)于實(shí)戰(zhàn)詳解Docker快速搭建部署ELK的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!