Docker 搭建 ELK 讀取微服務項目的日誌文件

思路:

  在docker搭建elasticsearch與kibana來展現日誌,在微服務部署的機子上部署logstash來收集日誌傳到elasticsearch中,經過kibana來展現,logstash使用讀取本地文件的方式來獲取日誌內容

 

一、在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 來執行腳本,執行完成後能夠看見容器已經啓動

二、在192.168.1.17中部署微服務項目的機子,因爲咱們微服務部署也是在docker中,因此在啓動項目的時候,須要將日誌文件目錄共享到宿主機上。而且全部的項目的日誌存放路徑須要指向同一個目錄,docker 啓動命令

docker run --name test-springboot -p 1001:80 -f /mnt/logs:/mnt/logs -t test-springboot 

三、一樣使用 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;web

output :是輸出的方式,這裏輸出到192.168.1.18的es中;spring

path:指向讀取日誌文件的位置,*表示讀取目錄下全部後綴名爲log的日誌文件;docker

type:自定義該文件的類型,在es中爲type字段;springboot

start_position:爲從log文件中讀取文件的位置,beginning爲從頭開始讀取,只在第一次啓動有效,後面只讀取最後一行;elasticsearch

重啓logstash

四、訪問kibana,能夠查詢項目產生的日誌

相關文章
相關標籤/搜索