logstash是一个开源的日志统一处理数据收集器,属于ELK中的L,在日志收集领域应用普遍. html
docker默认的日志驱动是json-file,每个容器都会在本地生成一个/var/lib/docker/containers/containerID/containerID-json.log
,而日志驱动是支持扩展的,本章主要讲解的是使用logstash收集docker日志. node
docker是没有logstash这个驱动的,可是能够经过logstash的gelf input插件收集gelf驱动的日志.git
docker-compose.ymlgithub
version: '3.7' x-logging: &default-logging driver: gelf options: gelf-address: "udp://localhost:12201" mode: non-blocking max-buffer-size: 4m tag: "kafeidou.{{.Name}}" #配置容器的tag,以kafeidou.为前缀,容器名称为后缀,docker-compose会给容器添加副本后缀,>如 logstash_1 services: logstash: ports: - 12201:12201/udp image: docker.elastic.co/logstash/logstash:7.5.1 volumes: - ./logstash.yml:/usr/share/logstash/config/logstash.yml - /var/log/logstash:/var/log/logstash - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf logstash-worker: image: docker.elastic.co/logstash/logstash:7.5.1 depends_on: - logstash logging: driver: "gelf" options: gelf-address: "udp://localhost:12201"
logstash.ymldocker
http.host: "0.0.0.0"
logstash.confjson
input { gelf{ use_udp => true port_tcp => 12202 } } output { file { path => "/var/log/logstash/%{+yyyy-MM-dd-HH}/%{container_name}.log" } }
因为logstash须要在配置的目录中有写入的权限,因此须要先准备好存放log的目录以及给予权限.
建立目录segmentfault
mkdir /var/log/logstash
给予权限,这里用于实验演示,直接受权777app
chmod -R 777 /var/log/logstash
在docker-compose.yml,logstash.conf和logstash.yml文件的目录中执行命令:
``
docker-compose up -d
``tcp
[root@master logstash]# docker-compose up -d WARNING: The Docker Engine you're using is running in swarm mode. Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node. To deploy your application across the swarm, use `docker stack deploy`. Starting logstash_logstash_1 ... done Starting logstash_logstash-worker_1 ... done
logstash启动较慢,我实验的效果是90秒左右,因此更推荐使用fluentd收集日志ide
查看一下日志目录下,应该就有对应的容器日志文件了:
[root@master logstash]# ls /var/log/logstash/ 2020-02-16 [root@master logstash]# ls /var/log/logstash/2020-02-16/ logstash_logstash-worker_1.log
也能够直接下载个人文件:
fluentd更加轻量级而且更灵活,而且目前属于CNCF,活跃度和可靠性都更上一层楼.
在一个公司或者业务中若是已经在使用ELK技术栈,也许就没有必要再引入一个fluentd,而是继续用logstash打通docker日志这块.这里主要作一个分享,让遇到这种状况的同窗可以有多一个选择.
始发于 四颗咖啡豆 ,转载请声明出处.
关注公众号->[四颗咖啡豆] 获取最新内容
![]()