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