写点什么

使用 logstash 作为 docker 日志驱动收集日志

用户头像
LanLiang
关注
发布于: 2021 年 02 月 05 日
使用logstash作为docker日志驱动收集日志

前言


logstash 是一个开源的日志统一处理数据收集器,属于 ELK 中的 L,在日志收集领域应用广泛.


docker 默认的日志驱动是json-file,每一个容器都会在本地生成一个/var/lib/docker/containers/containerID/containerID-json.log,而日志驱动是支持扩展的,本章主要讲解的是使用 logstash 收集 docker 日志.


docker 是没有 logstash 这个驱动的,但是可以通过 logstash 的 gelf input 插件收集 gelf 驱动的日志.


前提


  1. docker

  2. 了解logstash配置

  3. docker-compose


准备配置文件


docker-compose.yml


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.yml


http.host: "0.0.0.0"
复制代码


logstash.conf


input { gelf{  use_udp => true  port_tcp => 12202 }}
output { file { path => "/var/log/logstash/%{+yyyy-MM-dd-HH}/%{container_name}.log" } }
复制代码


由于 logstash 需要在配置的目录中有写入的权限,所以需要先准备好存放 log 的目录以及给予权限.

创建目录


mkdir /var/log/logstash
复制代码


给予权限,这里用于实验演示,直接授权 777


chmod -R 777 /var/log/logstash
复制代码


在 docker-compose.yml,logstash.conf 和 logstash.yml 文件的目录中执行命令:

``

docker-compose up -d

``


[root@master logstash]# docker-compose up -dWARNING: 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 ... doneStarting logstash_logstash-worker_1 ... done
复制代码


logstash 启动较慢,我实验的效果是 90 秒左右,所以更推荐使用fluentd收集日志


查看一下日志目录下,应该就有对应的容器日志文件了:


[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
复制代码


也可以直接下载我的文件:


  1. docker-compose.yml

  2. logstash.conf

  3. logstash.yml


总结


技术选型更推荐 fluentd,为什么?


fluentd 更加轻量级并且更灵活,并且目前属于 CNCF,活跃度和可靠性都更上一层楼.


为什么还要介绍 logstash 收集 docker 日志?


在一个公司或者业务中如果已经在使用 ELK 技术栈,也许就没有必要再引入一个 fluentd,而是继续用 logstash 打通 docker 日志这块.这里主要做一个分享,让遇到这种情况的同学能够有多一个选择.


推荐阅读:


使用fluentd作为docker日志驱动收集日志


始发于 四颗咖啡豆 ,转载请声明出处.

关注公众号->[四颗咖啡豆] 获取最新内容


四颗咖啡豆



发布于: 2021 年 02 月 05 日阅读数: 17
用户头像

LanLiang

关注

天道酬勤 2018.04.28 加入

爱好开源,追随云原生。 github.com/liangyuanpeng 公众号:四颗咖啡豆

评论

发布
暂无评论
使用logstash作为docker日志驱动收集日志