思路:
在docker搭建elasticsearch與kibana來展示日志,在微服務部署的機子上部署logstash來收集日志傳到elasticsearch中,通過kibana來展示,logstash使用讀取本地文件的方式來獲取日志內容
1、在192.168.1.18機子中使用 docker-compose 在docker中部署 elasticsearch與kibana
docker-compose.yml腳本如下:
version: '3'
services:
elasticsearch:
image: elasticsearch:latest
container_name: elasticsearch
restart: always
networks:
- elk
ports:
- '9200:9200'
- '9300:9300'
volumes:
- /mnt/elk/elasticsearch/data:/usr/share/elasticsearch/data
kibana:
image: kibana:latest
container_name: kibana
restart: always
networks:
- elk
ports:
- "5601:5601"
depends_on:
- elasticsearch
networks:
elk:
使用 docker-compose up -d 來執行腳本,執行完成后可以看見容器已經啟動
2、在192.168.1.17中部署微服務項目的機子,由於我們微服務部署也是在docker中,所以在啟動項目的時候,需要將日志文件目錄共享到宿主機上。並且所有的項目的日志存放路徑需要指向同一個目錄,docker 啟動命令
docker run --name test-springboot -p 1001:80 -f /mnt/logs:/mnt/logs -t test-springboot
3、同樣使用 docker-compose 在192.168.1.17機子的docker中部署
docker-compose.yml腳本如下:
logstash:
image: logstash:latest
container_name: logstash
restart: always
ports:
- "9601:9601"
volumes:
- /mnt/elk/logstash/config-dir:/config-dir
- /mnt/logs:/mnt/logs
command: logstash -f /config-dir
在/mnt/elk/logstash/config-dir目錄下新建logstash的配置文件logstash.conf。
input{
file{
path => "/mnt/logs/*.log"
type => "web_log"
start_position => "beginning"
}
}
output{
elasticsearch{
hosts => ["192.168.1.18:9200"]
index => "log-%{+YYYY.MM.dd}"
}
}
input:為輸入的方式,這里使用file;
output :是輸出的方式,這里輸出到192.168.1.18的es中;
path:指向讀取日志文件的位置,*表示讀取目錄下所有后綴名為log的日志文件;
type:自定義該文件的類型,在es中為type字段;
start_position:為從log文件中讀取文件的位置,beginning為從頭開始讀取,只在第一次啟動有效,后面只讀取最后一行;
重啟logstash
4、訪問kibana,可以查詢項目產生的日志