Logspout+ELK 集中收集docker日志


一、解決的問題

  • 業務中存在多台服務器。每台服務器也有多個docker容器服務,每一個容器一份日志,這導致日志十分分散。
  • ELK很好得解決了這個問題,部署一套ELk(elasticsearch,logstash,kibana)系統,elasticsearch負責存儲日志,logstash負責接收處理日志,並將日志存至elasticsearch,
    kibana連接elasticsearch,可視化日志。每台服務器部署logspout,logspout則會收集這台服務器上的每一個容器日志,同時將日志傳輸到遠程的logstash上。

基本思路通過logstash獲取docker中的日志,然后,將日志轉發給elasticsearch進行索引,kibana分析和可視化。
獲取docker中的日志文件可以有多種方式:

  • 1、添加一個MQ或者Redis作為docker容器和logstash的中間層,docker中的服務將日志傳輸到中間層,然后,logstash從中間獲取
  • 2、使用工具獲取docker中的日志,例如:filebeat,logspout,log-pilot;但是不建議在每個服務器上安裝logstash,因為logstash運行會占有大量的服務器資源,增加服務器壓力。
  • filebeat的配置好像相對比較復雜,沒有具體了解;
  • logspout 可以獲取docker的stdout日志
  • log-pilot 是阿里開源的日志工具,可以處理stdout和日志文件

二、Docker安裝ELK

1、 編輯文件 config/logstash.conf(配置輸入輸出)

input { 
   udp {
    port => 5000
    type => json
  }
}
output {
	elasticsearch {
             hosts => "elasticsearch:9200"  #將logstash的輸出到 elasticsearch ,修改成你部署的elasticsearch服務
	}
}

1.1 編輯/config/logstash.yml

path.config: /usr/share/logstash/conf.d/*.conf
path.logs: /var/log/logstash

2、編寫一下 Docker-compose.yml 方便構建

version: '3'
services:
 elasticsearch:
  image: elasticsearch:7.1.1
  environment:
   - discovery.type=single-node
  ports:
   - "9200:9200"   
   - "9300:9300"   

 logstash:
  image: logstash:7.1.1
  volumes:
   - /data/ELK/config:/usr/share/logstash/conf.d/
   - /data/ELK/config/logstash.yml:/usr/share/logstash/config/logstash.yml
  ports:
   - "5001:5000"
  links:
    - elasticsearch
 kibana:
  image: kibana:7.1.1
  environment:
   - ELASTICSEARCH_URL=http://elasticsearch:9200  //注意修改成你部署的elasticsearch服務
  ports:
   - "5601:5601"
  links:
    - elasticsearch

3、docker-compose up --build -d 命令開啟部署

三、訪問kibana http://ip:5601(kibana服務ip)

1、Create index pattern

創建index后,即可查看日志

Docker啟動elasticsearch閃退,無法創建的問題解決

由於官方的elasticsearch 鏡像缺少配置,需要配置兩處地方

  • 修改max_map_count大小 sysctl -w vm.max_map_count=262144
  • 修改elasticsearch.yml配置文件
//找到文件
cd /var/lib/docker/overlay2/
find . -name "elasticsearch.yml"

//在文件中添加
bootstrap.system_call_filter: false
cluster.initial_master_nodes: ["node-1"]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM