千家信息网

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

发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,这篇文章主要介绍"怎么使用logstash作为docker日志驱动收集日志",在日常操作中,相信很多人在怎么使用logstash作为docker日志驱动收集日志问题上存在疑惑,小编查阅了各式资料,整理
千家信息网最后更新 2024年11月20日怎么使用logstash作为docker日志驱动收集日志

这篇文章主要介绍"怎么使用logstash作为docker日志驱动收集日志",在日常操作中,相信很多人在怎么使用logstash作为docker日志驱动收集日志问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么使用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_1services:  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日志这块.这里主要做一个分享,让遇到这种情况的同学能够有多一个选择.

到此,关于"怎么使用logstash作为docker日志驱动收集日志"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0