ELK日志分析系统(2)-logspout收集容器日志

 

1. 概述

  安装了ELK之后,就是要考虑怎么获取log数据了。

  收集log数据的方式有很多种:

  1). beats采集数据发布到logstash

  2). Filebeat采集数据发布到logstash

  3). logspout, 自动把docker下的所有容器的所有日志发布到logstash

  4). python logstash库直接发布日志到logstash

  5). 原始容器日志记录的目录作为一个卷(volume),并且让其他容器使用--volumes-from选项来继承这个卷

  6). 容器日志docker run --log-driver=syslog --log-opt syslog-address=tcp://:5000

  考虑到4-6多多少少都要修改业务代码,不够逻辑分离,暂时不考虑;1-2研究了下安装比3麻烦,所以最后采用3的方式来收集容器日志

2. 服务管理

  2.1. github地址

  https://github.com/gliderlabs/logspout

  2.1. docker部署

sudo docker run -d --name="logspout" --volume=/var/run/docker.sock:/var/run/docker.sock --volume=/etc/hostname:/etc/host_hostname:ro --publish=192.168.1.165:8000:80 -e LOGSPOUT=ignore  gliderlabs/logspout syslog+tcp://192.168.1.165:5001

  本身的日志是没有意义的,所以这边会禁止logspout, -e LOGSPOUT=ignore

  收集到的日志会转发到logstash的5001端口:syslog+tcp://192.168.1.165:5001

  logspout支持查看所有收集到的日志,地址是:http://192.168.1.165:8000/logs

  查看容器:

b929e22ee74c   gliderlabs/logspout   "/bin/logspout syslo…"    2 days ago     Up 31 hours       192.168.1.165:8000->80/tcp          logspout

  查看容器日志:

 

ELK日志分析系统(2)-logspout收集容器日志_第1张图片

 

3. logspout忽略设置

  只要安装了logspout,那么这个主机上面的所有容器的日志都会被收集,如果想日志不被收集给容器设置环境变量LOGSPOUT=ignore

  3.1. docker部署

sudo docker run -d -e LOGSPOUT=ignore  xxxxxx

  

  3.2. docker-compose部署

  

services:
  elasticsearch:
    build:
      context: elasticsearch/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - type: bind
        source: ./elasticsearch/config/elasticsearch.yml
        target: /usr/share/elasticsearch/config/elasticsearch.yml
        read_only: true
      - type: volume
        source: elasticsearch
        target: /usr/share/elasticsearch/data
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      ES_JAVA_OPTS: "-Xms1g -Xmx3g"
      ELASTIC_PASSWORD: changeme
      LOGSPOUT: ignore
    networks:
      - elk

  

 

你可能感兴趣的:(ELK日志分析系统(2)-logspout收集容器日志)