저번에 docker로 로컬 개발 환경을 만들었는데, 이번엔 모니터링과 로깅을 위한 EFK 스택을 구축해보려 한다.
docker-compose.yaml에 아래 코드를 추가해서 elasticsearch, fluentd, kibana 컨테이너를 정의한다.
# docker-compose.yaml
version: '3.9'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.13.0
ports:
- "9200:9200"
- "9300:9300"
environment:
- discovery.type=single-node
fluentd:
image: fluent/fluentd:latest
volumes:
- ./fluentd/conf:/fluentd/etc
ports:
- "24224:24224"
- "24224:24224/udp"
kibana:
image: docker.elastic.co/kibana/kibana:8.13.0
ports:
- "5601:5601"
environment:
ELASTICSEARCH_HOSTS: "http://elasticsearch:9200"
그리고 fluent.conf를 정의한다
# fluent.conf
<source>
@type forward
port 24224
bind 0.0.0.0
</source>
<match *.**>
@type elasticsearch
hosts elasticsearch
port 9200
index_name fluentd
type_name fluentd
</match>
엄청 간단하게 표현한 상태이다. 이렇게 정의를 하고 docker-compose build로 이미지 생성 후 실행하면
kibana가 실행되는 포트에 접속해 대쉬보드를 확인할 수 있다.
추가적으로 아직 결과값은 얻지 못했지만 nestjs를 사용해서 winston 로거 모듈을 이용해 fluentd에 로그를 전달하는 방식으로 사용해보려 한다.