1. Elasticsearch安裝
下載elasticsearch7.6.0的docker鏡像:
docker停止啟動(dòng)重啟的時(shí)候不用復(fù)制,只要輸入幾個(gè)字母就行了。
docker pull elasticsearch:7.6.0
修改虛擬內(nèi)存區(qū)域大小殿雪,否則會(huì)因?yàn)檫^(guò)小而無(wú)法啟動(dòng):
#切換到root用戶(hù)
#執(zhí)行命令:
sysctl -w vm.max_map_count=262144
# 使之立即生效
sysctl -p
#查看結(jié)果:
sysctl -a|grep vm.max_map_count
#顯示:
vm.max_map_count = 262144
#上述方法修改之后歌粥,如果重啟虛擬機(jī)將失效陨溅,所以:
#解決辦法:
#在 /etc/sysctl.conf文件最后添加一行针余,通過(guò)vim,輸入shift + g快速跳到最后一行
vm.max_map_count=262144
#即可永久修改
使用docker命令啟動(dòng):
docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
-e "discovery.type=single-node" \
-e "cluster.name=elasticsearch" \
-v /root/hospital-test-0703/yang/mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /root/hospital-test-0703/yang/mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-d elasticsearch:7.6.0
啟動(dòng)時(shí)會(huì)發(fā)現(xiàn)/usr/share/elasticsearch/data目錄沒(méi)有訪(fǎng)問(wèn)權(quán)限谬以,只需要修改/mydata/elasticsearch/data目錄的權(quán)限强饮,再重新啟動(dòng)。
(以及這里面有一個(gè)重坑为黎,如果把之前docker裝的elasticsearch刪掉了邮丰,然后重裝,一定要把掛載目錄里面的東西清理干凈铭乾,不然換一個(gè)版本適配不了剪廉。)
這里面有好幾點(diǎn)要注意的,首先是
mkdir -p xxxx/xxxx/xxxx來(lái)創(chuàng)建一系列目錄
然后是/開(kāi)頭就是絕對(duì)目錄炕檩,而docker -v必須要用絕對(duì)目錄
這里的chmod也有重坑斗蒋,必須要精確到data這一級(jí)目錄,在父目錄上面加權(quán)限不行
chmod 777 /mydata/elasticsearch/data/
chmod 777 /mydata/elasticsearch/plugins
(ll
可以看權(quán)限等級(jí))
- 安裝中文分詞器IKAnalyzer,并重新啟動(dòng):
planA:
#進(jìn)入容器
docker exec -it elasticsearch /bin/bash
#此命令需要在容器中運(yùn)行
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.0/elasticsearch-analysis-ik-7.6.0.zip
docker restart elasticsearch
plabB:
由于在容器里面運(yùn)行install實(shí)在太慢了泉沾,沒(méi)法跑啊骤星,于是自己去github上面下載了zip,解壓之后拖到了plugin文件夾里面爆哑。
- elasticsearch沒(méi)提供界面管理,所以要自己安裝一個(gè)舆吮。
planA:
最好的planA+是直接chrome商店下載一個(gè)揭朝。
https://github.com/mobz/elasticsearch-head下載這個(gè)網(wǎng)頁(yè)里面項(xiàng)目,然后解壓完了之后找到elasticsearch-head-master\elasticsearch-head-master\crx
也就是找到crx這個(gè)文件夾色冀,里面有個(gè)es-head.crx潭袱,這個(gè)就是擴(kuò)展程序,不過(guò)不能直接這樣拖進(jìn)去锋恬,要把這個(gè)文件的后綴改成rar屯换,解壓出來(lái)。
然后解壓出來(lái)的這個(gè)文件夾就能變成插件安裝上去与学。
planB:
(這么裝出來(lái)彤悔,有數(shù)據(jù)不顯示的問(wèn)題)
#拉取鏡像
docker pull mobz/elasticsearch-head:5
#運(yùn)行容器
docker run -d --name es-head -p 9100:9100 mobz/elasticsearch-head:5
瀏覽器打開(kāi): http://39.100.144.125:9100
嘗試連接elaseticsearch會(huì)發(fā)現(xiàn)無(wú)法連接上,由于是前后端分離開(kāi)發(fā)索守,所以會(huì)存在跨域問(wèn)題晕窑,需要在服務(wù)端做CORS的配置,如下
修改docker中elasticsearch的elasticsearch.yml文件
docker exec -it elasticsearch /bin/bash
vim config/elasticsearch.yml
在最下面添加2行
#kua yu
http.cors.enabled: true
http.cors.allow-origin: "*"
退出并重啟服務(wù)
exit
docker restart elasticsearch
2. kibana安裝
- 下載kibana6.4.0的docker鏡像:
docker pull kibana:7.6.0
- 使用docker命令啟動(dòng):
docker run --name kibana -p 5601:5601 \
--link elasticsearch:es \
-e "elasticsearch.hosts=http://es:9200" \
-d kibana:7.6.0
Kibana設(shè)置中文:
#進(jìn)入kibana容器
docker exec -it kibana /bin/bash
#打開(kāi)yml
vi /usr/share/kibana/config/kibana.yml
在末尾加上一行
i18n.locale: zh-CN
然后exit退出docker容器
容器重啟使配置生效
docker restart kibana
- 訪(fǎng)問(wèn)地址進(jìn)行測(cè)試:[http://http://39.100.144.125:5601/
時(shí)間相差八個(gè)小時(shí)的問(wèn)題卵佛,可以直接在Kibana的設(shè)置里面把時(shí)區(qū)設(shè)置成Asia的時(shí)區(qū)杨赤,直接就解決了,filebeat和logstash什么也不用設(shè)置
3. FileBeat安裝
#拉鏡像
docker pull docker.elastic.co/beats/filebeat:7.6.0
然后在運(yùn)行docker容器之前截汪,先整一個(gè)yml疾牲。先創(chuàng)建好目錄,然后vim yml編輯一個(gè)yml衙解。
#創(chuàng)建一個(gè)目錄阳柔,這次用的是/root/hospital-test-0703/yang/mydata/filebeat/filebeat.yml
vim /root/hospital-test-0703/yang/mydata/filebeat/filebeat.yml
(這個(gè)yml是個(gè)大坑!r韭汀盔沫!enable是一個(gè)坑,multi是一個(gè)坑)
filebeat.inputs:
- type: log
enabled: true
paths:
# 上面也就這一個(gè)值得改的枫匾,就改這個(gè)位置架诞,上面的enable可以在寫(xiě)了多組設(shè)置之后快速更改哪個(gè)生效
- /var/log/gateway.log
tags: ["hospital"]
#帶井號(hào)的在粘貼的時(shí)候有問(wèn)題,就是會(huì)把縮進(jìn)搞亂干茉,這個(gè)粘貼的時(shí)候不能帶井號(hào)一起粘
#multiline這個(gè)是為了把一行日志打不下來(lái)的日志合并起來(lái)谴忧,不然filebeat收集到的就已經(jīng)是文件流了,每一行算一條。
# 這是個(gè)正則表達(dá)式沾谓,^是以這個(gè)開(kāi)頭委造,也就是匹配以 "[" 開(kāi)頭的行
multiline.pattern: '^\['
# 否定模式,這個(gè)默認(rèn)是false均驶,跟上面設(shè)置的反向
multiline.negate: true
# 這個(gè)after結(jié)合上面的否定模式以及匹配字符昏兆,發(fā)揮出來(lái)的作用就是,把首行之后不是以 "[" 開(kāi)頭的行接到上一行上湊成多行模式
multiline.match: "after"
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
# hosts: ["39.100.144.125:9200"]
#-------------------------- Logstash ------------------------------------------
output.logstash:
hosts: ["39.100.144.125:5044"]
# 刪除各個(gè)沒(méi)用的標(biāo)簽
processors:
- drop_fields:
fields: ["input_type", "log.offset", "host.name", "input.type", "agent.hostname", "agent.type", "ecs.version", "agent.ephemeral_id", "agent.id", "agent.version", "fields.ics", "log.flags" ]
yml編輯完了之后妇穴,在下面注意幾個(gè)位置爬虱,都映射過(guò)去,這里似乎這幾個(gè)文件夾都不要什么權(quán)限的腾它。
#跑鏡像
docker run -d --name=filebeat \
-v /root/hospital-test-0703/yang/mydata/logs:/var/log \
-v /root/hospital-test-0703/yang/mydata/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml \
-v /root/hospital-test-0703/yang/mydata/filebeat/registry/:/usr/share/filebeat/data/registry/ docker.elastic.co/beats/filebeat:7.6.0
4. logstash 安裝
#拉鏡像
docker.elastic.co/logstash/logstash:7.6.0
建立這樣的目錄
/root/hospital-test-0703/yang/mydata/logstash/conf.d/logstash.conf
/root/hospital-test-0703/yang/mydata/logstash/logstash.yml
第一個(gè)conf是重點(diǎn)跑筝,說(shuō)實(shí)話(huà)第二個(gè)yml有沒(méi)有用我還不確定。
第一個(gè)conf內(nèi)容
input {
beats {
port => 5044
#codec => json
client_inactivity_timeout => 360000
}
}
output {
elasticsearch {
hosts=>["39.100.144.125:9200"]
index => "logstash-%{+YYYY.MM.dd}" #對(duì)日志進(jìn)行索引歸檔
}
#stdout {codec => rubydebug}
}
filter {
mutate {
remove_field => ["tags", "@version"]
}
}
第二個(gè)yml內(nèi)容
path.config: /usr/share/logstash/conf.d/*.conf
path.logs: /var/log/logstash
兩個(gè)文件都建好了之后瞒滴,跑鏡像
docker run -d -it -p 5044:5044 --name logstash \
-v /root/hospital-test-0703/yang/mydata/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml \
-v /root/hospital-test-0703/yang/mydata/logstash/conf.d/:/usr/share/logstash/conf.d/ \
docker.elastic.co/logstash/logstash:7.6.0
跑起來(lái)logstash之后曲梗,讓filebeat往這里面輸入日志,然后進(jìn)入docker鏡像去看日志輸出妓忍。
docker logs -ft logstash
5. docker的安裝經(jīng)驗(yàn)
(1) ELK有一個(gè)大問(wèn)題虏两,就是這些東西要保持版本的高度一致。所以如果不清楚自己拉的是哪個(gè)版本就很麻煩世剖。
docker inspect elasticsearch
也試過(guò)使用這個(gè)命令來(lái)看一下版本碘举,結(jié)果標(biāo)簽上面寫(xiě)的就是latest,沒(méi)查到版本搁廓。
(2) 善用docker logs filebeat這種命令引颈,每一次都帶著監(jiān)控看
(3) 39服務(wù)器空間不夠