ELKB日誌流:Docker版安裝部署

0、引言

學習記錄 :Docker搭建 Elasticsearch + Logstash + Kibana + Filebeat
ELKB :7.7.0
服務器 : Centos 7.7.1908

本次主要介紹簡單安裝和收集配置,之後會整理從Redis,Mysql收集數據的思路及實測可用的配置。
每一項安裝時我碰到的問題,我都會總結在最下面了。>>問題整理<<

1、流程

日誌流規劃
Filebeat(收集日誌)    >>    Logstash(日誌處理)  >>   Elasticsearch(日誌存儲)  >>    Kibana(查詢分析)

2、安裝

拉取鏡像就不囉嗦了,直接docker pull xxx;
在這裏插入圖片描述

2.1 創建bridge網絡

# 創建網絡,設置子網,網關
docker network create --driver bridge --subnet=172.28.0.0/16 --gateway=172.28.0.1 elkb 
# 查看網絡列表,可以看到剛剛創建的 名稱爲elkb的網絡
docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
43d968dd5106        bridge              bridge              local
ed78d4b05185        elkb                bridge              local
27d34658c92c        host                host                local
8aabc48398e4        none                null                local

2.2 創建Elasticsearch容器

  • 容器創建命令
    指定容器網絡,指定網絡ip,綁定主機端口9200,9300
docker run -d --name elasticsearch --net elkb --ip 172.28.0.2 \
-p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" \
docker.elastic.co/elasticsearch/elasticsearch:7.7.0
  • 結果展示,瀏覽器直接訪問 ip:9200
    在這裏插入圖片描述

2.3 創建Kibana容器

  • 容器創建命令
    指定容器網絡,指定網絡ip,綁定主機端口5601
docker run -d --name kibana --net elkb --ip 172.28.0.3 \
-p 5601:5601  \
docker.elastic.co/kibana/kibana:7.7.0
  • 結果展示,直接瀏覽器訪問 ip:5601
    在這裏插入圖片描述

2.3 創建Logstash容器

  • 容器創建命令
    指定容器網絡,指定網絡ip,綁定主機端口5044
    這個容器需要綁定目錄,到服務器目錄,因爲需要修改配置文件
docker run -it -d  --name logstash \
-p 5044:5044 --net elkb --ip 172.28.0.4  \
-v /mnt-docker/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml \
-v /mnt-docker/logstash/conf.d/:/usr/share/logstash/conf.d/ \
docker.elastic.co/logstash/logstash:7.7.0
  • 結果展示 : 因爲logstash沒有界面,而且啓動很慢,所以需要等一下,查看容器的狀態。

在這裏插入圖片描述

  • 編輯配置文件
    配置文件編輯完成,重啓容器 docker restart logstash(名稱/id)
# ===============logstash.yml logstash配置主文件=====
vim /mnt-docker/logstash/logstash.yml
# 寫入下面的內容
# 加載目錄下的所有以.conf結尾的規則文件
path.config: /usr/share/logstash/conf.d/*.conf  
path.logs: /var/log/logstash

# ===============test.conf  第一個規則文件============
vim /mnt-docker/logstash/conf.d/test.conf
# 寫入下面的內容
# 從beats接收數據,並輸出到elasticsearch
input {
    beats {
    	port => 5044
    	codec => "json"
	}
}
output {
  elasticsearch { 
  	  hosts => ["elasticsearch:9200"]
  	  index => "test-%{+YYYY.MM.dd}"
  }
  stdout { codec => rubydebug }
}

2.4 創建Filebeat容器

  • 容器創建命令
    指定容器網絡,指定網絡ip,
    這個容器需要綁定目錄,到服務器目錄,因爲需要修改配置文件
    還多綁定了一個nginx目錄方便收集日誌測試
docker run --name filebeat --user=root -d --net elkb --ip 172.28.0.5  \
-v /var/log/nginx/:/var/log/nginx \
-v /mnt-docker/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml \
-v /var/lib/docker/containers:/var/lib/docker/containers \
-v /var/run/docker.sock:/var/run/docker.sock \
docker.elastic.co/beats/filebeat:7.7.0
  • 編輯配置文件
    配置文件編輯完成,重啓容器 docker restart filebeat(名稱/id)

# ===============filebeat.yml filebeat收集日誌============
vim /mnt-docker/filebeat/filebeat.yml 
# 寫入下面的內容 收集nginx運行日誌,並寫入logstash 172.18.0.4對應容器的ip
filebeat.inputs:
- type: log
  enabled: true
  paths:
  - /var/log/nginx/access.log

output.logstash:
  hosts: ['172.18.0.4:5044']

好了,基礎安裝已經結束。

3、流程測試

軟件已經安裝好了,正常到這裏,有訪問日誌,我們的Elasticsearch就已經收到數據了,可以通過Kibana創建Index patterns去分析檢索了。

3.1 問題排查:docker logs

通過docker logs 命令查看容器啓動和運行的輸出日誌。
使用logstash將收集的日誌輸出到控制檯,通過logs 我們也可以查看數據格式。

# 查看某個容器的log輸出  xxx替換成對應的 容器名稱/容器id
docker logs -f -t xxx --tail 100
# 查看elasticsearch輸出
docker logs -f -t elasticsearch --tail 100

通過logs,大多數運行中的問題都可以發現,我遇到的問題回憶整理下:

  • 端口開放問題(我用的是阿里雲的服務器,需要在防火牆和ECS控制檯都操作下)
  • 對應docker服務,ip寫入錯誤(filebeat output配置,寫錯了logstash的ip)

4、問題整理

4.1 內存問題

因爲我使用的阿里雲2G內存的服務器,對。。。嗯。。。。

Exception in thread "main" java.lang.RuntimeException: starting java failed with [1]
output:
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 1073741824 bytes for committing reserved memory.
# An error report file with more information is saved as:
# logs/hs_err_pid132.log
error:
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1073741824, 0) failed; error='Not enough space' (errno=12)
	at org.elasticsearch.tools.launchers.JvmErgonomics.flagsFinal(JvmErgonomics.java:126)
	at org.elasticsearch.tools.launchers.JvmErgonomics.finalJvmOptions(JvmErgonomics.java:88)
	at org.elasticsearch.tools.launchers.JvmErgonomics.choose(JvmErgonomics.java:59)
	at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:139)
	at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:95)

解決方法

# 搜索找到下面的文件,修改配置信息
find /var/lib/docker/overlay2/ -name jvm.options
# 結果
/var/lib/docker/overlay2/ee28c4597cf0691e769deb1b1e3d2a6e8192ec2127ee352eae9e838b875bbc02/diff/usr/share/logstash/config/jvm.options
/var/lib/docker/overlay2/91c5c75d5317968f899078644cf47bb98a8f2ff6428c4a57be4d40b8b9917abe/diff/usr/share/logstash/config/jvm.options
/var/lib/docker/overlay2/85e6a8ce14bbb386c13b82963c2fdb5527fa1227fbbe8e9854f09be9b4f848a0/diff/usr/share/elasticsearch/config/jvm.options

# 怎麼操作,改什麼
# vim 對應的路徑
vim /var/lib/docker/overlay2/ee28c4597cf0691e769deb1b1e3d2a6e8192ec2127ee352eae9e838b875bbc02/diff/usr/share/logstash/config/jvm.options
# 找到到配置
-Xms2g  
-Xmx2g
# 修改爲 512m 或者更小的 256m
-Xms512m  
-Xmx512m

4.2 容器衝突問題

報錯如下


/usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint

問題原因
實際上並沒有衝突的容器存在。
Docker服務啓動時定義的自定義鏈Docker由於某種原因被清掉。
重啓Docker服務即可重新生成自定義鏈Docker。

解決方法

# 相關命令
systemctl restart  docker			重啓docker服務            
systemctl stop docker				關閉docker  
systemctl start docker				啓動docker     
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章