본문 바로가기
DevOps

ELK 구성하기

by 마운틴케이 2023. 9. 28.

회사에서 프로젝트에 처음으로 ELK 를 도입하여 로그 모니터링을 하기로 했었다.

그때 구성했던 내용을 바탕으로 가이드를 적어본다.

 


목차

0. 구성

1. Filebeat

2. ELK

   a. LogStash
   b. Elastic Search
   c. Kibana

 

 

0. 구성

  • 로그 파일이 저장되는 서버에서 로그 수집을 위한 Filebeat 를 도커 컨테이너로 구성
  • 로그를 수집, 변환, 시각화(Kibana) 하기 위한 서버의 도커 컨테이너

1. Filebeat

  • 개요
    • 로그 파일 수집 및 전송하는 역할
    • 로그가 생성되는 서버에 도커 컨테이너로 올라감
  • 구성
    • Dockerfile
      • filebeat 이미지를 가져와 만듦

  • docker-compose.yml
    • 위 Dockerfile 을 통해 filebeat 컨테이너 구성하도록 함
    • volumes : 서버에서 수집 중인 로그 파일 디렉토리들을 시스템 별로 각각 가리키도록 함
    • type, source, target : 컨테이너 올렸다 내릴때마다 filebeat도 재실행 되도록 함
    • networks : Logstash가 같은 서버에 있기 때문에 Logstash 측으로 데이터를 전송하기 위해 동일 network 설정

  • filebeat.yml
    • filebeat 설정
    • filebeat.inputs : filebeat가 바라보는 경로의 파일 변경 감지
      • multiline : 기본적으로 데이터를 한 줄 단위로 끊어서 전송하게 되어 있지만, 이 설정을 통해 정규식이 일치한다면 여러줄을 한번에 보내도록 함
    • output.logstash : inputs에서 변경 감지한 데이터를 logstash로 전송

 

2. ELK

 

GitHub - deviantony/docker-elk: The Elastic stack (ELK) powered by Docker and Compose.

The Elastic stack (ELK) powered by Docker and Compose. - GitHub - deviantony/docker-elk: The Elastic stack (ELK) powered by Docker and Compose.

github.com

  • 기본적인 Elastic Search, LogStash, Kibana에 대한 구성이 되어있고, 가장 상위의 docker-compose를 빌드하면 세개의 컨테이너가 올라가게 됨
  • http://localhost:5601 로 kibana 접속하여 화면 확인

LogStash

  • 데이터 수집, 변환, 전송하는 역할
  • Filebeat에서 로그 파일을 수집하고 있으므로, LogStash에선 로그 데이터를 전달받아 변환 및 Elastic Search에 전송하는 역할을 수행하도록 함.
  • logstash.conf : Logstash 설정 파일
    • input : Logstash 로 들어오는 데이터에 대한 설정
      • beats : 각종 beats 로 부터 어떤 port로 데이터를 전송받을지 설정 host : “0.0.0.0” 적용 시 모든 호스트로부터 전송 받겠다는 의미 위에서 설정한 Filebeat로부터 로그 데이터를 전송받기 위함

 

  • filter (옵션) : 들어온 데이터를 가공하기 위한 설정
    • grok : filter 플러그인 중 하나로, 문자열 패턴을 grok 규칙을 통해 가공 가능
      • match : 특정 필드를 검사해 정규패턴에 해당되는 부분을 잘라 필드로 등록
      • ${정규 패턴명:사용자정의 필드}
      • overwrite : 기존의 필드에 가공된 내용을 덮어씌움
    • date : 기본 date 필드를 원하는 포맷으로 가공

 

  • output : input 으로 들어온 데이터를 filter에서 가공하여 최종적으로 어디로 어떻게 내보낼지에 대한 설정
    • 현재 설정은 여러 어플리케이션으로 부터 수집된 로그 데이터들을 각각 별도의 index 로 저장하고자 하기 위함
    • LogStash에서 수집된 데이터 기본 필드인 log.file.path(파일 경로)를 통해 index를 구분해주었음
    • 최종적으로 가공된 데이터가 ELK 컨테이너가 올라간 서버의 Elastic Search 로 전송되어 저장

 

Elastic Search

  • Logstash에서 가공된 데이터가 document 형식으로 Elastic Search로 저장
  • index는 하나의 테이블과 비슷한 개념

Kibana

  • Elastic Search의 데이터 시각화 하는 역할
  • Discover
    • 연동된 Elastic Search의 모든 데이터를 확인 가능
    • 기본적으로 Elastic Search에 생성된 index 별로 조회가 가능하며 filter 를 걸어 새로운 view를 생성 가능

  • 각각의 시스템 별 index 구성
  • filter를 걸어 모든 어플리케이션을 조회할 수 있는 view 생성

 

  • Dashboard
    • Discover의 데이터를 바라보며 기본 제공되는 테이블, 차트 등 플러그인을 통해 대시보드에 들어갈 앱을 생성, 이 앱들을 통해 대시보드를 구성

 

 

 


댓글 피드백은 언제나 환영합니다!