ELK安裝筆記

1. Elasticsearch安裝

下載elasticsearch7.6.0的docker鏡像:
docker停止啟動(dòng)重啟的時(shí)候不用復(fù)制,只要輸入幾個(gè)字母就行了。

docker pull elasticsearch:7.6.0

修改虛擬內(nèi)存區(qū)域大小,否則會(huì)因?yàn)檫^小而無法啟動(dòng):

#切換到root用戶
#執(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文件最后添加一行,通過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目錄沒有訪問權(quán)限,只需要修改/mydata/elasticsearch/data目錄的權(quán)限,再重新啟動(dòng)。
(以及這里面有一個(gè)重坑,如果把之前docker裝的elasticsearch刪掉了,然后重裝,一定要把掛載目錄里面的東西清理干凈,不然換一個(gè)版本適配不了。)

這里面有好幾點(diǎn)要注意的,首先是
mkdir -p xxxx/xxxx/xxxx來創(chuàng)建一系列目錄
然后是/開頭就是絕對(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í)在太慢了,沒法跑啊,于是自己去github上面下載了zip,解壓之后拖到了plugin文件夾里面。

  • elasticsearch沒提供界面管理,所以要自己安裝一個(gè)。
    planA:
    最好的planA+是直接chrome商店下載一個(gè)。
    https://github.com/mobz/elasticsearch-head下載這個(gè)網(wǎng)頁里面項(xiàng)目,然后解壓完了之后找到elasticsearch-head-master\elasticsearch-head-master\crx也就是找到crx這個(gè)文件夾,里面有個(gè)es-head.crx,這個(gè)就是擴(kuò)展程序,不過不能直接這樣拖進(jìn)去,要把這個(gè)文件的后綴改成rar,解壓出來。

然后解壓出來的這個(gè)文件夾就能變成插件安裝上去。

planB:
(這么裝出來,有數(shù)據(jù)不顯示的問題)

#拉取鏡像
docker pull mobz/elasticsearch-head:5
#運(yùn)行容器
docker run -d --name es-head -p 9100:9100 mobz/elasticsearch-head:5

瀏覽器打開: http://39.100.144.125:9100

嘗試連接elaseticsearch會(huì)發(fā)現(xiàn)無法連接上,由于是前后端分離開發(fā),所以會(huì)存在跨域問題,需要在服務(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
#打開yml
vi /usr/share/kibana/config/kibana.yml

在末尾加上一行
i18n.locale: zh-CN

然后exit退出docker容器

容器重啟使配置生效
docker restart kibana

時(shí)間相差八個(gè)小時(shí)的問題,可以直接在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è)大坑!??!enable是一個(gè)坑,multi是一個(gè)坑)

filebeat.inputs:
- type: log
  enabled: true
  paths:
    # 上面也就這一個(gè)值得改的,就改這個(gè)位置,上面的enable可以在寫了多組設(shè)置之后快速更改哪個(gè)生效
    - /var/log/gateway.log
 tags: ["hospital"]

  #帶井號(hào)的在粘貼的時(shí)候有問題,就是會(huì)把縮進(jìn)搞亂,這個(gè)粘貼的時(shí)候不能帶井號(hào)一起粘

  #multiline這個(gè)是為了把一行日志打不下來的日志合并起來,不然filebeat收集到的就已經(jīng)是文件流了,每一行算一條。
  # 這是個(gè)正則表達(dá)式,^是以這個(gè)開頭,也就是匹配以 "[" 開頭的行
  multiline.pattern: '^\['
  # 否定模式,這個(gè)默認(rèn)是false,跟上面設(shè)置的反向
  multiline.negate: true
  # 這個(gè)after結(jié)合上面的否定模式以及匹配字符,發(fā)揮出來的作用就是,把首行之后不是以 "[" 開頭的行接到上一行上湊成多行模式
  multiline.match: "after"


#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
#  hosts: ["39.100.144.125:9200"]

#-------------------------- Logstash ------------------------------------------
output.logstash:
  hosts: ["39.100.144.125:5044"]

# 刪除各個(gè)沒用的標(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è)位置,都映射過去,這里似乎這幾個(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),說實(shí)話第二個(gè)yml有沒有用我還不確定。
第一個(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

跑起來logstash之后,讓filebeat往這里面輸入日志,然后進(jìn)入docker鏡像去看日志輸出。

 docker logs -ft logstash

5. docker的安裝經(jīng)驗(yàn)

(1) ELK有一個(gè)大問題,就是這些東西要保持版本的高度一致。所以如果不清楚自己拉的是哪個(gè)版本就很麻煩。

docker inspect elasticsearch

也試過使用這個(gè)命令來看一下版本,結(jié)果標(biāo)簽上面寫的就是latest,沒查到版本。

(2) 善用docker logs filebeat這種命令,每一次都帶著監(jiān)控看
(3) 39服務(wù)器空間不夠

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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