使用docker-compose部署ELK
docker下載下傳部署所需鏡像
kibana 7.5.0 docker pull kibana:7.5.0
elasticsearch 7.5.0 docker pull elasticsearch:7.5.0
logstash 7.5.0 docker pull logstash:7.5.0
elasticsearch-head:5 docker pull mobz/elasticsearch-head:5
filebeat 7.5.0 docker pull registry.cn-hongkong.aliyuncs.com/hyn-beats/filebeat:7.5.0
vim docker-compose.yml
version: '3'
services:
elasticsearch:
image: elasticsearch:7.5.0
container_name: elasticsearch
environment:
- "cluster.name=elasticsearch" #設定叢集名稱為elasticsearch
- "discovery.type=single-node" #以單一節點模式啟動
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" #設定使用jvm記憶體大小
- TZ=Asia/Shanghai
volumes:
- /work/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件檔案挂載
- /work/elk/elasticsearch/data:/usr/share/elasticsearch/data #資料檔案挂載
ports:
- 9200:9200
kibana:
image: kibana:7.5.0
container_name: kibana
links:
- elasticsearch:elasticsearch #可以用elasticsearch這個域名通路elasticsearch服務
depends_on:
- elasticsearch #kibana在elasticsearch啟動之後再啟動
environment:
- "elasticsearch.hosts=http://elasticsearch:9200" #設定通路elasticsearch的位址
- TZ=Asia/Shanghai
- I18N_LOCALE=zh-CN
ports:
- 5601:5601
logstash:
image: logstash:7.5.0
container_name: logstash
volumes:
- /work/elk/logstash/logstash-springboot.conf:/usr/share/logstash/pipeline/logstash.conf #挂載logstash的配置檔案
- /work/elk/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml
environment:
- TZ=Asia/Shanghai #環境設定時區
depends_on:
- elasticsearch #kibana在elasticsearch啟動之後再啟動
links:
- elasticsearch:elasticsearch #可以用es這個域名通路elasticsearch服務
ports:
- 5044:5044
建立檔案夾
/work/elk/elasticsearch/data
/work/elk/elasticsearch/plugins
設定檔案夾權限
chmod -R 777 data
chmod -R 777 plugins
vim /work/elk/logstash/logstash-springboot.conf
## logtash.conf
input {
beats {
port => "5044"
codec => "json"
}
}
output {
stdout { codec => rubydebug }
elasticsearch {
hosts => [ "{主機IP位址}:9200" ]
}
}
vim /work/elk/logstash/logstash.yml
http.host: "0.0.0.0"
# es-head連接配接es可能是連不上的,是因為es沒有開啟跨域(不安裝es-head不需要增加下面的配置)
http.cors.enabled: true
http.cors.allow-origin: "*"
執行
docker-compose up -d
檢視結果
docker ps
編寫filebeat的docker-compose.yml
version: '3'
services:
filebeat:
image: store/elastic/filebeat:7.5.0 # 你下載下傳的鏡像的版本,
container_name: filebeat
restart: always
volumes:
# 對應你要映射的日志檔案
- /work/ggfw/pw/:/work/ggfw/pw/
- /work/ggfw/cw/:/work/ggfw/cw/
- /opt/nginx/logs/:/opt/nginx/logs/
........ # 可以配置多個
# 下面的固定加的
- /work/elk/filebeat/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
network_mode: "host" # 可加可不加,由于項目中用dubbo,消費者出現了filebeat的網絡ip
編寫filebeat本地配置
vim /work/elk/filebeat/filebeat.docker.yml
#filebeat.config:
filebeat.inputs:
- type: log
enabled: true
paths:
- /work/ggfw/pw/app.log
fields:
service: pw
fields_under_root: true
- type: log
enabled: true
paths:
- /work/ggfw/cw/app.log
fields:
service: cw
fields_under_root: true
...... # 可以加多個日志檔案,如果一個檔案夾下有多個日志檔案,也可以使用*.log
#日志輸出配置(采用 logstash 收集日志,5044為logstash端口)
output.logstash:
hosts: ['{IP位址}:5044']
執行
docker-compose up -d
以上,伺服器端配置完成,檢視kabana,通路:
http://{IP位址}:5601/
在索引管理裡就可以看到将所有指定的日志檔案對應的索引了。
一頓添加操作後,可以在Discover裡看到日志内容了。然後按照自己的想看的去篩選各個微服務的日志。可以進行儲存,友善下次打開。