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"]
原文地址:https://www.cnblogs.com/fanzou/p/13793963.html