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
查看容器日志:
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