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://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 |