參考視頻(ElasticStack)https://www.bilibili.com/video/av53652729
(Docker) https://www.bilibili.com/video/av27122140
Docker官網 docker.com
ElasticStack官網 elastic.co -- 有中文
整套跑下來大概需要使用2G以上內存,內存不足的服務器不用試了
整套部署下來需要很清晰的思路,否則極易失敗,建議把ElasticStack瞭解一遍再開始
整個過程爲
Filebeat 收集文件 --解析並傳輸給 -- Logstash --解析並傳輸給 -- Elasticsearch 建立完整文件模式 -- Kibana關聯展示
所需安裝包
JDK1.8+ Filebeat7.5.1 + Logstash7.5.1 + ElasticStack7.5.1 + Kibana7.5.1
ElasticStack各組件需要版本統一
首先下載安裝Docker.如果不使用docker記得給elasticsearch新建用戶後,將新建用戶禁止登陸服務器ssh
Docker 安裝文檔地址 https://docs.docker.com 根據操作系統選擇文檔
這裏選擇Linux-Centos,需要先刪除已安裝Docker,未安裝則忽略,刪除時可以使用以下命令,按步驟安裝即可
apt-get remove docker*
Docker安裝好後最好配置一下鏡像加速不然很多東西下不動,註冊登錄阿里雲,搜索容器鏡像服務-鏡像加速器,裏面有詳細介紹
常規下載方法估計一天也下載不完,在Linux中使用命令下載稍快一些
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.1-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.5.1.tar.gz
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.5.1-linux-x86_64.tar.gz
Docker準備工作,宿主機上安裝JDK 上面4個gz安裝包,提前編寫好的組件配置文件,安裝好再改也行,將這些東西放在同一文件夾
構建鏡像 下面爲Dockerfile 文件內容
FROM ubuntu
MAINTAINER author
EXPOSE 5601
ENV MYPATH=/usr/local
ENV JAVA_HOME=/usr/local/jdk1.8.0_191
ENV JRE_HOME=${JAVA_HOME}/jre
ENV CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
ENV JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
ENV PATH=$PATH:${JAVA_PATH}
WORKDIR $MYPATH
ADD *.gz $MYPATH
COPY ./conf/* $MYPATH
CMD /bin/bash
docker create | docker run 都可以 末尾接上面構建好的鏡像名:版本號,最少映射JDK安裝路徑與目標日誌路徑
docker run -it --name mydocker -p 5601:5601 -p 9200:9200 -v /var/local/logs/docker/:/var/local/logs/ -v /usr/local/environment/jdk1.8.0_191/:/usr/local/jdk1.8.0_191/ myesimg:1.0.0
一切順利的情況下會進入容器/usr/local目錄下
Docker容器爲最低配linux系統,所以如果需要vi或者其他功能需要安裝
下面開始 ElasticStack部分
順序最好是 Elasticsearch -> Kibana -> Logstash -> Filebeat (此爲組件啓動順序)
Elasticsearch
進入ES的目錄,修改配置文件,一般單機版而且不需要外圍訪問的時候不需要修改配置文件
少數改動爲cluster.name-node.name-discovery.seed_hosts-cluster.initial_master_nodes 將這些註釋放開
啓動ES,ES嚴格控制啓動的用戶,不允許root用戶使用,低版本可以加參數 -Des.insecure.allow.root=true 啓動,
(Kibana啓動會使用--allow-root)這個參數不知道在ES啓動時是否有用
新建用戶和組 將ES整個文件夾權限更新爲新用戶 使用新用戶啓動 ./elasticsearch -d
啓動完成 使用curl localhost:9200查看是否成功
Kibana
Kibana配置文件修改
server.port: 5601 server.host: "0.0.0.0" -表示本機
elasticsearch.hosts: ["http://localhost:9200"] --關聯ES
啓動 nohup ./kibana --allow-root & 啓動完成後在瀏覽器中訪問5601端口查看是否正常
Logstash (重點)
新建java-logstash.conf
input {
beats {
port => 5044
}
}
filter {
# 此處會自動按匹配規則解析message,當然需要符合日誌文件的規範以下爲 "a : b c d"
grok {
match => { "message" => "%{GREEDYDATA:Timestamp}\ : %{WORD:LogLevel}\ %{GREEDYDATA:ClassName}\ %{GREEDYDATA:TextInformation}" }
}
date {
match => [ "Timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ]
}
}
output {
#根據filebeat傳輸過來的數據分索引 傳遞給Elasticsearch
if [log_source] == "aaa" {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "java-aaa-%{+YYYY.MM.dd}"
}
}
if [log_source] == "bbb" {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "java-bbb-%{+YYYY.MM.dd}"
}
}
}
啓動: nohup ./filebeat -f java-logstash.conf --config.reload.automatic &
Filebeat (重點)
編輯filebeat.yml
filebeat.inputs:
- type: log
enable: true
paths:
- /var/local/logs/aaa/*.log
fields:
log_source: aaa #自定義字段用於logstash區分來源建索引
fields_under_root: true
multiline: # 將非日期開頭的日誌向上合併爲一條message
pattern: '^(\d{4}-\d{2}-\d{2})'
negate: true
match: after
max_lines: 500
timeout: 5s
- type: log
enable: true
paths:
- /var/local/logs/bbb/*.log
fields:
log_source: bbb
fields_under_root: true
multiline:
pattern: '^(\d{4}-\d{2}-\d{2})'
negate: true
match: after
max_lines: 500
timeout: 5s
output.logstash:
hosts: ["127.0.0.1:5044"]
啓動: nohup ./filebeat -e -c ../filebeat.yml &
可以適當調整elasticsearch以及logstash的 jvm.options中的Xms/Xmx屬性調整內存值
最後訪問kibana
剩下的就是docker commit && docker push了,以後使用的話只需在倉庫中pull docker 鏡像,進入鏡像啓動相關組件就可以使用了,也可以從上面鏡像爲模板再添加RUN 保留字 重新build一個鏡像,這樣就不需要進入鏡像一個一個啓動了