본문 바로가기
Server

Docker - EFK 환경구축 과정

by 오늘도 깨달았다 2022. 8. 4.
반응형

Docker log를 fluentd로 수집한 후 ElasticSearch에 적재해 Kibana를 활용하기 위한 환경구축 과정 

 

사용 서버 

 

OS: Ubuntu 20.04

1. EFK를 운용할 새로운 서버 - 서버 1대에 ELK를 전부 설치해 관리할 계획

2. Dokcer로 운영되고 있는 API서버

 

서버 아키텍처

 

 

EFK(Elasticsearch, Fluentd, Kibana) 부분 서버 1번 

Docker Containers 부분 서버 2번

 


먼저 로그를 쌓을 Docker container는 이미 활용되고 있다고 가정하고 EFK 를 설치할 서버에 Docker를 설치한다. 

 

 

- EFK를 운용할 새로운 서버

$ sudo apt-get update

$ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
   
$ sudo mkdir -p /etc/apt/keyrings

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

$  echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

https://docs.docker.com/engine/install/ubuntu/

해당 글 참고

 

Docker가 설치가 잘 되었는지 확인하는 명령어

 sudo docker run hello-world

 

설치가 잘 되었다면 자신이 관리하기 편한 폴더에 파일을 생성한다. 

 

vi docker-compose.yml

 

해당 파일에 밑의 내용을 복사한 후 저장

version: "3"
services:
  fluentd:
    build: ./fluentd
    volumes:
      - ./fluentd/conf:/fluentd/etc
    links:
      - "elasticsearch"
    ports:
      - "24224:24224"
      - "24224:24224/udp"

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.13.1
    container_name: elasticsearch
    environment:
      - "discovery.type=single-node"
    expose:
      - "9200"
    ports:
      - "9200:9200"

  kibana:
    image: docker.elastic.co/kibana/kibana:7.13.1
    links:
      - "elasticsearch"
    ports:
      - "5601:5601"

 

당연히 docker-compose.yml 파일에 적혀있는 포트들에는 포트포워딩을 해줘야한다.

 

해당 위치에서 폴더를 생성한다. 

mkdir fluentd
cd fluentd
mkdir conf

fluentd 도커 이미지를 받아올 파일을 생성하고 저장하자

vi Dockerfile

FROM fluent/fluentd:v1.12.0-debian-1.0
USER root
RUN gem uninstall -I elasticsearch && gem install elasticsearch -v 7.17.0
RUN ["gem", "install", "fluent-plugin-elasticsearch", "--no-document", "--version", "5.0.3"]
USER fluent

아까 만들어둔 conf 파일 안에 fluent.conf 파일을 생성해 설정을 해준다.

vi conf/fluent.conf

<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

<match *.**>
  @type copy

  <store>
    @type elasticsearch
    host elasticsearch
    port 9200
    logstash_format true
    logstash_prefix fluentd
    logstash_dateformat %Y%m%d
    include_tag_key true
    type_name access_log
    tag_key @log_name
    flush_interval 1s
  </store>

  <store>
    @type stdout
  </store>
</match>

 

그 후 docker-compose.yml 파일이 있는 폴더로 이동해서

docker-compose up --detach

후 세개 다 잘 켜졌는지 확인하는 명령어로 확인해준다.

docker ps

해당 명령어를 입력했을 때 세개의 컨테이너가 모두 보여야한다.

 

 


그리고 본인이 원래 운영하던 docker 컨테이너가 있는 서버의 docker-compose.yml파일을 수정해줘야한다. 

 

우리 서비스같은 경우에는 해당 코드를 yml 파일 안의 Dokcer로 운영되고 있는 API서버 이미지 밑에 추가해줬다.

    logging:
      driver: "fluentd"
      options:
        fluentd-address: '방금 EFK 설정한 서버 ip':24224
        tag: logging

 

docker-compose.yml 파일을 수정했으면 docker를 restart 시켜줘야해서 해당 명령어를 입력해준다.

docker-compose up --build -d

 

 

그러면 이제 설정이 완료되었다. 

 

docker의 log가 쌓이는지 확인하려면

 

해당 주소로 접속하면 ui가 나온다.

http://EFK를 운용할 새로운 서버ip:5601

 

홈 화면에서 동그라미쳐져있는 부분을 누르면 

 

해당 화면이 나오는데 

 

맨 밑으로 내려서 Stack Management -> Kibana(Index Patterns) -> Create index pattern 클릭

 

 

index-name 이라고 되어있는 부분에 이글을 따라왔다면 

 

fluentd-*

 

라고 입력하고 next step 후 생성해준다. 

 

그리고 메뉴에서 Analytics -> Discover에 들어가면 로그가 쌓인 화면을 볼 수 있다. 

 

 

다음 글은 이제 로그가 쌓이는걸 확인했으니, 우리 서비스에서 필요한 로그만 필터링해서 쌓고, 쿼리까지 구현해봐야겠다

반응형

댓글