fluentd를 도커 로그 드라이버로 사용하여 로그 수집

머리말

docker의 기본 로그 드라이버는 json-file 이며 각 컨테이너는 /var/lib/docker/containers/containerID/containerID-json.log를 로컬로 생성하며 로그 드라이버는 확장을 지원합니다.이 장에서는 주로 Fluentd 드라이버 수집에 대해 설명합니다. 도커 로그.

Fluentd는 통합 로깅 계층을위한 오픈 소스 데이터 수집기입니다. Kubernetes, Prometheus, Envoy, CoreDNS 및 containerd에 이어 6 번째 CNCF 졸업 프로젝트입니다. 비교적 경량 인 Elastic logstash와 비교되는 경우가 많습니다. 유연하고 개발이 매우 뛰어납니다. 이 블로그를 쓰는 시점에서 github의 스타는 8.8k, 포크는 1k입니다.

전제

  1. 도커
  2. Fluentd 구성 이해
  3. 도커 작성

구성 파일 준비

docker-compose.yml

version: '3.7'

x-logging:
  &default-logging
  driver: fluentd
  options:
    fluentd-address: localhost:24224
    fluentd-async-connect: 'true'
    mode: non-blocking
    max-buffer-size: 4m
    tag: "kafeidou.{
   
   {.Name}}"  #配置容器的tag,以kafeidou.为前缀,容器名称为后缀,docker-compose会给容器添加副本后缀,如 fluentd_1

services:

  fluentd:
   image: fluent/fluentd:v1.3.2
   ports:
    - 24224:24224
   volumes:
    - ./:/fluentd/etc
    - /var/log/fluentd:/var/log/fluentd
   environment:
    - FLUENTD_CONF=fluentd.conf

  fluentd-worker:
   image: fluent/fluentd:v1.3.2
   depends_on:
     - fluentd
   logging: *default-logging

fluentd.conf

<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

<match kafeidou.*>
  @type              file
  path               /var/log/fluentd/kafeidou/${tag[1]}
  append             true
  <format>
    @type            single_value
    message_key      log
  </format>
  <buffer tag,time>
    @type             file
    timekey           1d
    timekey_wait      10m
    flush_mode        interval
    flush_interval    5s
  </buffer>
</match>

<match **>
  @type              file
  path               /var/log/fluentd/${tag}
  append             true
  <format>
    @type            single_value
    message_key      log
  </format>
  <buffer tag,time>
    @type             file
    timekey           1d
    timekey_wait      10m
    flush_mode        interval
    flush_interval    5s
  </buffer>
</match>

Fluentd에 필요하면 저장소 로그 디렉토리 및 사용 권한 부여에 준비 할 필요가 있으므로, 디렉토리 구성에 쓰기 권한이 있기 때문에.
디렉토리를 작성

mkdir /var/log/fluentd

실험적인 데모를 위해 여기에서 허가를 주시고 777을 직접 승인하십시오.

chmod -R 777 /var/log/fluentd

docker-compose.yml 및 fluentd.conf 디렉토리에서 명령을 실행합니다.
docker-compose up -d

[root@master log]# 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`.

Creating network "log_default" with the default driver
Creating fluentd ... done
Creating fluentd-worker ... done

로그 디렉토리를 확인하십시오. 해당 컨테이너 로그 파일이 있어야합니다.

[root@master log]# ls /var/log/fluentd/kafeidou/
fluentd-worker.20200215.log  ${tag[1]}

이것은 나의 마지막 실험의 결과입니다. $ (tag [1]) 디렉토리가 생성됩니다. 이상하게도이 디렉토리에 두 개의 파일이있을 것입니다.

[root@master log]# ls /var/log/fluentd/kafeidou/\$\{tag\[1\]\}/
buffer.b59ea0804f0c1f8b6206cf76aacf52fb0.log  buffer.b59ea0804f0c1f8b6206cf76aacf52fb0.log.meta

누구든지 이것을 이해한다면 함께 의사 소통을 환영합니다!

아키텍처 요약

Docker의 원래 로그를 사용하지 않는 이유는 무엇입니까?

먼저 원래 도커 로그의 아키텍처를 살펴 보겠습니다.

https://res.cloudinary.com/lyp/image/upload/v1581787531/hugo/blog.github.io/fluentd/docker-log-driver-local.jpg

Docker는 로컬 /var/lib/docker/containers/containerID/containerID-json.log 경로에 각 컨테이너에 대한 로그 파일을 생성하여 docker 로그를 저장합니다.

위 그림에는 총 7 개의 컨테이너가 있는데, 7 개의 마이크로 서비스라고한다면 로그를 볼 필요가있을 때 이미 매우 불편하고 최악의 경우 3 대의 머신에서 각 컨테이너의 로그를 볼 필요가 있습니다. .

fluentd를 사용한 후의 차이점은 무엇입니까?

fluentd를 사용하여 도커 로그를 수집 한 후 컨테이너를 함께 집계 할 수 있습니다.이 기사에서 fluentd 구성 파일을 구성한 후 아키텍처를 살펴 보겠습니다.

https://res.cloudinary.com/lyp/image/upload/v1581787531/hugo/blog.github.io/fluentd/docker-log-driver-fluent-local.jpg

fluentd는 fluentd가있는 머신의 로컬 디렉토리에 저장되도록 구성되어 있기 때문에 다른 머신의 컨테이너 로그를 fluentd가 위치한 머신의 로컬 디렉토리에 수집하는 효과가 있습니다.

fluentd는 로컬에서만 컨테이너 로그를 수집 할 수 있습니까?

Fluentd는 수집 된 로그를 실제로 다시 전송할 수 있습니다 (예 : elasticsearch와 같은 스토리지 소프트웨어).

https://res.cloudinary.com/lyp/image/upload/v1581787532/hugo/blog.github.io/fluentd/docker-log-driver-art.jpg

유창한 유연성

fluentd가 할 수있는 일은 많습니다. Fluentd 자체는 전송 노드와 수신 노드로 사용할 수 있습니다. 또한 특정 로그를 필터링하고 특정 콘텐츠로 로그를 포맷하고 일치하는 특정 로그를 다시 전송할 수 있습니다. Docker 컨테이너 로그 수집의 효과.

에서 발생하는 네 개의 커피 콩 , 복제, 소스를 선언하십시오.

공개 계정 팔로우-> [Four Coffee Beans] 최신 콘텐츠 받기

커피 원두 4 개

추천

출처blog.csdn.net/lypgcs/article/details/104338717