웹서버 로깅 파이프라인(Centralized Logging Pipeline)을 구축
목표
- nginx access log data를 fluentd를 통하여 kinesis로 1분 단위로 전송
- kinesis stream을 lambda가 받아 json 형태로 변환하여 S3에 업로드
- 모든 것을 localstack으로 확인
사전 준비 - localstack, nginx, fluentd
1. kinesis-stream 처리를 위한 fluend docker image 생성
$ docker build -t custom-fluentd:latest .
Dockerfile 참고
2. Docker compose 파일 준비 - localstack, nginx, fluentd
version: '3'
services:
localstack:
container_name: "localstack"
image: localstack/localstack
ports:
- "4566-4599:4566-4599"
- "${PORT_WEB_UI-4566}:${PORT_WEB_UI-8080}"
environment:
- SERVICES=${SERVICES-lambda,kinesis,s3 }
- DEBUG=${DEBUG-1 }
- DATA_DIR=${DATA_DIR- }
- PORT_WEB_UI=${PORT_WEB_UI- }
- LAMBDA_EXECUTOR=${LAMBDA_EXECUTOR-docker-reuse }
- KINESIS_ERROR_PROBABILITY=${KINESIS_ERROR_PROBABILITY- }
- DOCKER_HOST=unix:///var/run/docker.sock
volumes:
- "./localstack:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
nginx:
container_name: nginx
image: nginx:latest
ports:
- "80:80"
volumes:
- "./nginx/conf/nginx.conf:/etc/nginx/nginx.conf"
- "./nginx/log:/var/log/nginx"
fluentd:
container_name: fluentd
image: custom-fluentd:latest
ports:
- "24224:24224"
volumes:
- "./fluentd/fluent.conf:/fluentd/etc/fluent.conf"
- "./nginx/log:/var/log/nginx"
3. docker compose up으로 docker 구동
MacOS : $ TMPDIR=/private$TMPDIR docker-compose up -d
Others : $ docker-compose up -d
4. localstack 로그 확인 또는 health check 를 통해 서비스 상태 확인
http://localhost:8080/health
(Option) install LocalStack AWS CLI
$ pip install awscli-local
5. terraform 적용 - terraform 으로 localstack에 인프라 구성
- 적용하기 위한 명령 :
$ terraform init
$ terraform plan
$ terraform apply
- 테스트 후 destory :
$ terraform destroy
6. nginx log 생성 시 처리 내용 확인
$ docker logs -f localstack