본문 바로가기

파이프라인

fluentd example(docker-compose)

fluentd 공식 홈페이지에 게시된 실습 코드로 docker-compose 예제를 수행해 볼 수 있다.

https://docs.fluentd.org/container-deployment/docker-compose 

 

Docker Compose - Fluentd

60a8c3c8fcab httpd "httpd-foreground" 6 minutes ago Up 6 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp fluentd-elastic-kibana_web_1 43df4d266636 fluentd-elastic-kibana_fluentd "tini -- /bin/entryp…" 6 minutes ago Up 6 minutes 5140/tcp, 0.0.0.0:24224->24224/t

docs.fluentd.org

 

실습 환경

Windows 11 Home

실습 수행 과정

1. C:\dev\sample 생성

2. C:\dev\sample\docker-compose.yml 파일 생성

3. C:\dev\sample\fluentd\Dockerfile 파일 생성

4. C:\dev\sample\fluentd\conf\fluent.conf 파일 생성

5. cmd 창에서 C:\dev\sample 이동 후 wsl 실행

6. docker-compose up -d

7. 새로운 cmd 창에서 wsl 실행 후 docker logs fluentd

8 .curl localhost:80 명령어 실행

9. 두번째 cmd 창의 docker logs fluentd에 web 컨테이너 로그 유입 확인

10. http://localhost:5601/app/management/kibana/indexPatterns 접속

11. index name pattern에 fluentd-* 입력 후 @timestamp 선택

12. discover 접속하여 docker logs fluentd 에 찍힌 web 컨테이너 로그가 노출되는지 확인

 

 

fluentd 공식 문서대로 수행하는 경우 여러 에러가 발생하기 때문에 과정별로 아래 내용을 수정하였다.

Step 0. Create docker-compose.yml

  • 컨테이너 별 역할
    • web: logging driver을 fluentd로 지정하여 로그 발생 역할
    • fluentd: web 컨테이너의 로그를 수집하여 elasticsearch로 전송
    • elasticsearch: fluentd로 로그를 받아 저장
    • kibana: elasticsearch로 접속하여 시각화
  • 변경사항
    • 컨테이너 별로 container_name을 지정. docker-compose.wsl에 links로 지정하였기 때문에 임의의 이름이 지정되면 컨테이너 간 통신이 안되는 경우가 발생. container_name을 지정하지 않으면 임의의 이름으로 지정
    • web 컨테이너의 logging 옵션에 fluentd-async: 'true' 명시. 명시하지 않는 경우 "Error response from daemon: failed to initialize logging driver: dial tcp [::1]:24224: connect: connection refused" 에러 발
    • elasticsearch, kibana 버전을 7.10.2 로 명시. 최신 버전의 elasticsearch는 구조가 변경되어 코드가 정상 수행되지 않음
version: "3"
services:
  web:
    '''
    logging:
      driver: "fluentd"
      options:
        fluentd-address: localhost:24224
        tag: httpd.access
        fluentd-async: 'true'

  fluentd:
    build: ./fluentd
    container_name: fluentd
    '''

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
    '''

  kibana:
    image: docker.elastic.co/kibana/kibana:7.10.2
    '''

 

Setp 1. Create Fluentd Image with your Config + Plugin

  • docker-compose.yml에서 fluentd는 build를 직접하기 때문에 Dockerfile로 이미지를 별도로 빌드
  • 별도로 빌드하는 이유는 elasticsearch 플러그인을 설치하기 위함
  • 변경사항
    • fluentd 버전을 v1.91-debian-1.0으로 진행
    • elasticsearch 플러그인 버전을 변
FROM fluent/fluentd:v1.9.1-debian-1.0
USER root
RUN ["gem", "install", "elasticsearch", "--no-document", "--version", "< 8"]
RUN ["gem", "install", "fluent-plugin-elasticsearch", "--no-document", "--version", "5.2.2"]
USER fluent

 

 

참고

https://github.com/docker/compose/issues/6764

https://smoh.tistory.com/415

https://github.com/fluent/fluentd-docs-gitbook/issues/391

 

 

'파이프라인' 카테고리의 다른 글

nginx 로그 - fluent - pubsub - apache-beam 샘플 코드  (0) 2023.06.06
fluentd-pubsub 예제  (0) 2023.01.01
fluentd example(docker logging driver)  (0) 2022.12.16
td-agent 설정  (0) 2022.12.11
카프카 기본 개념 정리  (0) 2021.05.31