從這篇文章瞭解到ELK的基本信息:https://www.cnblogs.com/kevingrace/p/5919021.html
自己做的一些事:
1、使用docker搭建ELK,https://github.com/deviantony/docker-elk#how-can-i-persist-elasticsearch-data
從github上clone該倉庫,在倉庫目錄下使用docker-compose命令即可一鍵搭建ELK三個軟件
docker-compose up
ELK的docker-compose文件:
version: '2'
services:
elasticsearch:
build:
context: elasticsearch/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
- /home/elk/elk-storage:/usr/share/elasticsearch/data #新增的一行,用於掛載數據文件
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
networks:
- elk
logstash:
build:
context: logstash/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro
- ./logstash/pipeline:/usr/share/logstash/pipeline:ro
ports:
- "8888:8888"
- "5000:5000"
- "9600:9600"
environment:
LS_JAVA_OPTS: "-Xmx256m -Xms256m"
networks:
- elk
depends_on:
- elasticsearch
kibana:
build:
context: kibana/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- ./kibana/config/:/usr/share/kibana/config:ro
ports:
- "5601:5601"
networks:
- elk
depends_on:
- elasticsearch
networks:
elk:
driver: bridge
可以通過文件看出,將多個端口從容器中映射了出來,所以你需要保證這些端口沒有被其他服務所佔用:9200、9300、5000、9600、5601,至於8888端口那是我認爲添加的多暴露出來的一個端口,詳情請見第二節。
2、logstash使用syslog協議作爲input
通過上面的docker-compose文件可以看出,將logstash的yml配置文件掛載到了宿主機,所以可以通過該文件來修改針對logstash的配置:
input {
tcp {
port => 5000
}
}
input{
syslog{
port => 8888
}
}
## Add your filters / logstash plugins configuration here
output {
elasticsearch {
hosts => "elasticsearch:9200"
}
}
第一個INPUT爲監聽tcp 5000端口作爲日誌輸入,第二個INPUT爲使用syslog協議監聽8888端口作爲日誌輸入,OUTPUT爲將日誌輸出到elasticsearch。
3、將elasticsearch數據持久化存儲
根據github文檔描述及我自己測試結果發現,elasticsearch的docker-compose配置默認沒有將數據持久化存儲,如果容器elasticsearch的容器關閉未刪除,那麼數據仍然存在,但如果刪除了容器,數據就沒了,所以需要將數據持久化存儲:
- /home/elk/elk-storage:/usr/share/elasticsearch/data #新增的一行,用於掛載數據文件
也就是這一行,將容器內的/usr/share/elasticsearch/data掛載到宿主機的/home/elk/elk-storage
存在的問題:由於elasticsearch容器內使用的用戶uid爲1000,而宿主機大概率都是用的root用戶把!?而你剛纔手動創建的用於掛載數據的文件夾也會屬於root用戶,這將導致elasticsearch沒有權限對文件進行寫入。
解決方法:
groupadd -g 1001 elk # 創建一個用戶組,名字爲elk,用戶組ID爲1001,這個ID隨意
useradd -g 1001 -u 1000 elaticsearch # 創建一個用戶,屬於elk組,用戶ID爲1000,這個ID必須爲1000,與elasticsearch容器內的uid保持一致
chgrp elk elk-storage/ # 將目錄所屬權劃爲elk組
chown elaticsearch elk-storage # 將目錄所屬權劃給elaticsearch用戶
創建完畢後,使用docker-compose down命令銷燬容器,再使用docker-compose up命令重新創建即可