Docker安裝部署ELK (Elasticsearch+Kibana+Logstash+Filebeat)


ELK是由 Elasticsearch、Logstash和Kibana 三部分組件組成。

Elasticsearch 是個開源分布式搜索引擎,它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。

Logstash 是一個完全開源的工具,它可以對你的日志進行收集、分析,並將其存儲供以后使用

kibana 是一個開源和免費的工具,它可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以幫助您匯總、分析和搜索重要數據日志。

Filebeat 是用於單用途數據托運人的平台。它們以輕量級代理的形式安裝,並將來自成百上千台機器的數據發送到 Logstash 或 Elasticsearch。

Docker 鏡像統一從 https://hub.docker.com/ 下載 (安裝時請使用統一版本)

、Docker 安裝 Elasticsearch

官網鏡像地址:https://hub.docker.com/_/elasticsearch

找到目前最新的(Tags)是 7.8.0

# 下載鏡像 查看鏡像
docker pull elasticsearch:7.8.0
docker images

# 創建自定義的網絡(用於連接到連接到同一網絡的其他服務(例如Kibana))
docker network create my-network 

# 運行 elasticsearch
docker run -d --name elasticsearch --net my-network  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.8.0

# 查看容器狀態
docker ps

# 檢測 elasticsearch 是否啟動成功
curl 127.0.0.1:9200

{
"name": "fa352b46a6b9",
"cluster_name": "docker-cluster",
"cluster_uuid": "48E5S_HZS2yLNiZojbQD6w",
"version": {
"number": "7.8.0",
"build_flavor": "default",
"build_type": "docker",
"build_hash": "757314695644ea9a1dc2fecd26d1a43856725e65",
"build_date": "2020-06-14T19:35:50.234439Z",
"build_snapshot": false,
"lucene_version": "8.5.1",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}
{
name: "fa352b46a6b9",
cluster_name: "docker-cluster",
cluster_uuid: "48E5S_HZS2yLNiZojbQD6w",
version: {
number: "7.8.0",
build_flavor: "default",
build_type: "docker",
build_hash: "757314695644ea9a1dc2fecd26d1a43856725e65",
build_date: "2020-06-14T19:35:50.234439Z",
build_snapshot: false,
lucene_version: "8.5.1",
minimum_wire_compatibility_version: "6.8.0",
minimum_index_compatibility_version: "6.0.0-beta1"
},
tagline: "You Know, for Search"
}

Elasticsearch 安裝啟動完成

二、Docker 安裝 Logstash

官網鏡像地址:https://hub.docker.com/_/logstash

使用同版本鏡像 7.8.0

# 下載鏡像 查看鏡像
docker pull logstash:7.8.0
docker images

我在工作目錄建立一個 docker 目錄 並在里面創建了 logstash 目錄,用來存放所有配置

創建目錄 /root/docker-root/logstash/config/

創建文件 /root/docker-root/logstash/config/logstash.yml

logstash.yml 文件內容

path.config: /root/docker-root/logstash/conf.d/*.conf
path.logs: /root/docker-root/logstash/logs

創建文件 /root/docker-root/logstash/conf.d/test.conf

conf.d/test.conf (文件內容)

input {
    beats {
        port => 5044
        codec => "json"
    }
}

output {
  elasticsearch { hosts => ["192.168.0.160:9200"] }
  stdout { codec => rubydebug }
}

#########################
input {
    beats {
    port => 5044
    codec => "json"
}
}

output {
  elasticsearch { hosts => ["elasticsearch:9200"] }
  stdout { codec => rubydebug }
}

啟動 Logstash

docker run -d --restart=always --log-driver json-file --log-opt max-size=10m --log-opt max-file=2 -p 5044:5044 --name logstash -v /root/docker-root/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml -v /root/docker-root/logstash/conf.d/:/usr/share/logstash/conf.d/ logstash:7.8.0

三、Docker 安裝 Kibana

官網鏡像地址:https://hub.docker.com/_/kibana

使用和 elasticsearch 相同版本鏡像 7.8.0 (不一樣可能會出現問題)

# 下載鏡像 查看鏡像
docker pull kibana:7.8.0
docker images

##創建容器
docker run -d --name kibana --net my-network -p 5601:5601 -e ELASTICSEARCH_HOSTS=http://192.168.0.160:9200  kibana:7.8.0

Kibana 安裝啟動完成

四、Docker 安裝 Filebeat

官網鏡像地址:https://hub.docker.com/_/filebeat

使用同版本鏡像 7.8.0

# 下載鏡像 查看鏡像
docker pull store/elastic/filebeat:7.8.0
docker images
# 下載默認官方配置文件 (暫時在當前目錄創建一個 filebeat 目錄 用來放 filebeat 配置文件)
curl -L -O https://raw.githubusercontent.com/elastic/beats/7.1/deploy/docker/filebeat.docker.yml

# 打開配置文件
vim filebeat.docker.yml

img

# 增加下面的配置 (收集 .log 數據 把數據發送到當前網絡5044端口 (logstash 端口) )
# 這個地方的 .log 要保證有幾條測試數據
filebeat.inputs:
- type: log
  enabled: true
  paths:
  - /var/log/nginx/*.log

output.logstash:
  hosts: ['{ip}:5044']
 
# 運行Filebeat

# 請更改下面兩個路徑
{nginx-path} = 本地的日志文件目錄(映射到容器中 作為數據源)
{path} = Filebeat配置文件路徑 
{ip} = elasticsearch 地址
docker run --name filebeat --user=root -d --net somenetwork --volume="{nginx-path}:/var/log/nginx/" --volume="{path}/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" --volume="/var/run/docker.sock:/var/run/docker.sock:ro" store/elastic/filebeat:7.1.1
 

現在去 Kibana 查看數據,已經有數據了

Kibana 報錯解決辦法

在瀏覽器中輸入 http://192.168.0.160:5601/ 頁面報錯 Kibana server is not ready yet

啟動后報錯

Kibana server is not ready yet

打印日志,報錯:

#打印日志命令
[root@localhost ~]# docker logs kibana
{"type":"log","@timestamp":"2020-06-04T08:25:57Z","tags":["warning","elasticsearch","admin"],"pid":6,"message":"Unable to revive connection: http://172.17.0.2:9200/"}
{"type":"log","@timestamp":"2020-06-04T08:25:57Z","tags":["warning","elasticsearch","admin"],"pid":6,"message":"No living connections"}

進入kibana容器中

docker exec -it kibana /bin/bash
bash-4.2$ ping 172.17.0.2    #沒有問題,能ping通
...
bash-4.2$ curl http://120.79.43.44:9200
curl: (7) Failed connect to 120.79.43.44:9200; No route to host

問題就出在這里!容器之間無法進行通信,猜測是防火牆的問題,再單獨搜索這個問題,找到了解決的方案

解決辦法如下:

#配置docker0服務到受信任連接
[root@localhost ~]# nmcli connection modify docker0 connection.zone trusted
#停止NetworkManager(檢測網絡、自動連接網絡的程序)服務
[root@localhost ~]# systemctl stop NetworkManager.service
#修改docker網絡接口為內部區域(永久)
[root@localhost ~]# firewall-cmd --permanent --zone=trusted --change-interface=docker0
success
#啟動NetworkManager(檢測網絡、自動連接網絡的程序)服務
[root@localhost ~]# systemctl start NetworkManager.service
#配置docker0服務到受信任連接
[root@localhost ~]# nmcli connection modify docker0 connection.zone trusted
#重啟docker服務
[root@localhost ~]# systemctl restart docker.service

參考:

https://www.cnblogs.com/fbtop/p/11005469.html
https://www.cnblogs.com/hackyo/p/9951684.html
https://www.cnblogs.com/linjiqin/p/12103645.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM