본문 바로가기
  • 클라우드야 나랑 친해지자!
서버/Docker&Kubernetes

Docker Container Logging - fluentd

by 정민규 2021. 4. 14.
반응형

수업을 듣고 배운 내용과 연습한 내용을 정리하였습니다

개인 공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.

 

잘못된 부분이 있거나 질문사항은 댓글로 남겨주시면 성심성의껏 답변해드리겠습니다. 감사합니다!


 

교재 <시작하세요! 도커/쿠버네티스 - 용찬호 지음>를 토대로 실습을 진행하였습니다.

 

 

 

* fluentd

 

Fluentd는 트레저 데이터(Treaure Data)에서 개발된 크로스 플랫폼 오픈 소스 데이터 수집 소프트웨어 프로젝트이다. 주로 루비 프로그래밍 언어로 작성되어 있다.

Fluentd는 반-비정형 데이터 집합을 위한 빅 데이터 도구이다. 아파치 카프카처럼 이벤트 로그, 애플리케이션 로그, 클릭스트림을 분석한다.

 

- 출처 : 위키백과 -

 

한마디로 말해서 각종 로그를 수집하고 저장할 수 있는 기능을 제공하는 오픈소스 도구입니다!

 

 

 

 

시나리오는 다음과 같습니다.

특정 호스트에 생성되는 컨테이너는 fluentd에 접근하고, fluentd는 몽고DB에 데이터를 저장하는 구조입니다.

 

 

 

로그 수집 시나리오

 

 

 

*실습 요약

1) 몽고DB 컨테이너 생성

2) fluentd.conf 파일을 생성

3) fluentd 컨테이너 생성

4) 로그 수집을 위한 컨테이너 생성

5) 테스트

 

 

 

 

 

1) 몽고DB 컨테이너 생성

#docker run --name mongoDB -d \
> --net host \
> -p 27017:27017 \
mongo

 

 

 

 

2) fluentd.conf 파일을 생성하고 아래 내용을 저장합니다.

 

fluentd.conf 파일의 주 내용은 들어오는 로그 데이터를 몽고DB에 전송하고, access라는 이름의 컬렉션에 로그를 저장하며, 몽고DB 컨테이너의 호스트 주소와 포트를 지정한 것입니다.

<match docker.**>는 로그의 태그가 docker로 시작하면 이를 몽고DB에 전달하는 것을 의미합니다.

 

<source>
  @type forward
</source>
 
<match docker.**>
  @type mongo
  database nginx
  collection access
  host mongoDB
  port 27017
  flush_interval 10s
</match>

 

 

 

 

 

3) fluentd 컨테이너 생성

 

도커 허브의 fluentd 이미지에는 몽고DB에 연결하는 플러그인이 내장돼 있지 않습니다.

alicek106/fluentd:mongo 이미지는 공식 fluentd 이미지에 몽고DB 플러그인을 설치한 것입니다.

 

#docker run -d --name luentd -p 24224:24224 \
> --net host \
> -v $(pwd)\fluent.conf:/fluentd/etc/fluent.conf \
> -e FLUENTD_CONF=fluent.conf \
alicek106/fluentd:mongo

 

 

 

 

4) 로그 수집을 위한 컨테이너 생성

 

--log-driver 을 fluentd 로 설정하고 --log-opt의 fluent-address 값에 fluentd 서버 주소를 지정합니다.

fluentd의 설정 파일 중 <match docker.**>에 맞으므로 몽고DB에 로그로서 저장됩니다.

#docker run -p 80:80 -d \
> --net host \
> --log-driver=fluentd \
> --log-opt fluentd-address=127.0.0.1:24224 \
> --log-opt tag=docker.nginx.webserver \
nginx

 

 

 

 

5) 테스트

 

호스트의 80번 포트 웹으로 접속하면 로그가 출력됩니다.

 

#docker exec -it mongoDB mongo
MongoDB shell version v3.4.0
....
>show dbs
admin 0.000GB
local 0.000GB
nginx 0.000GB

>use nginx
switched to db nginx

>show collections
access

>db['access'].find()
{ "_id" : Objectid("~~~~~~"), "container_name" : ~~

 

 

 

 

실습 완료 후, 실습 시나리오를 다시 한 번 확인하여 fluentd 로깅의 저장 과정을 떠올려보기 바랍니다!

 

 

반응형

'서버 > Docker&Kubernetes' 카테고리의 다른 글

Docker Swarm  (0) 2021.04.20
Dockerfile 작성 및 빌드  (0) 2021.04.16
Docker 이미지 추출 및 저장소 생성(2/2)  (0) 2021.04.15
Docker 이미지 생성하기- Docker Hub(1/2)  (0) 2021.04.15
Docker Container Logging - awslogs  (0) 2021.04.14

댓글