본문 바로가기
Engineering/ELK

ELK : Filebeat + ES(ElasticSearch) + Kibana 로그 수집 시스템 구축하기(with Docker)

by 알탱2 2021. 5. 7.
반응형

구축 배경

SW QA Engineer로 업무를 하다보면 검증 대상 SW와의 연동 시험 환경 구축을 위해 오픈 소스를 활용하는 경우가 종종 있다. 이번에 로그 모니터링 솔루션을 신규 도입하기로 하였는데, 모니터링 서버와 GUI Admin은 자체 솔루션으로 개발하고 로그 수집은 ELK를 활용하기로 결정되어 미리 사용법을 익혀 볼겸 간단히 구성해 보기로 하였다.

예전에 LogStash(input: mysql) + ES + Grafana 조합으로 서비스 모니터(Counter, Graph) 시스템을 구성해 본 적은 있었는데, 그 당시에는 주변에서 Kibana 보다는 Grafana를 많이 사용하는 추세였다. 이번에도 frontend는 직접 개발하기로 하여 Kibana를 사용하지는 않게 되었으나 frontend가 개발되려면 한달 이상을 기다려야 했고(GUI 기획 단계였기에..), Filebeat를 도입해 보자는 의견이 있어 빠르게 Filebeat + ES + Kibana 조합으로 실시간 로그 수집 환경을 구성해 보았다.

 

 

참고 사이트

kibana configurations : https://www.elastic.co/guide/en/kibana/7.x/settings.html

ES configurations : https://www.elastic.co/guide/en/elasticsearch/reference/7.x/docker.html

filebeat configurations : https://www.elastic.co/guide/en/beats/filebeat/7.x/running-on-docker.html

 

 

 

설치하기

 

시스템 구성도

host에 직접 설치해도 되지만, 최근에는 대부분의 설치를 docker 기반에서 작업을 하다 보니 docker-compose.yml 를 생성해서 설정을 백업해 두기 위해docker 를 활용하여 환경 구성을 진행 하였다.

구성도에 IP를 그대로 노출한 이유는 아래 설정 파일에 IP가 포함되는 항목이 있어 연관성을 파악하기 쉽도록 하였다.

 


(1) ES + kibana 설치

설치 파일 구성

docker-compose.yml

version: '3'

services:

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.11.1
    container_name: elasticsearch
    hostname: elasticsearch
    environment:
      - bootstrap.memory_lock=true
      - http.host=0.0.0.0
      - discovery.type=single-node
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    volumes:
      - ./conf/elasticsearch.yml:/usr/share/elasticsearch/elasticsearch.yml:ro
      - esdata:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
      - 9300:9300
    restart: always

  kibana:
    image: docker.elastic.co/kibana/kibana:7.11.1
    container_name: kibana
    hostname: kibana
    volumes:
      - ./conf/kibana.yml:/usr/share/kibana/config/kibana.yml:ro
    ports:
      - 5601:5601
    restart: always
    depends_on:
      - elasticsearch


volumes:
  esdata:
    driver: local

 

 

conf/elasticsearch.yml

elasticsearch.password: espassword
cluster.name: docker-elk-cluster
node.name: node-1
path.data: /usr/share/elasticsearch/data
http.port: 9200

 

 

conf/kibana.yml

server.host: 0.0.0.0
server.port: 5601

elasticsearch:
  hosts: ["http://10.220.150.66:9200"]
  username: elastic
  password: espassword

status.allowAnonymous: true

 

 


(2) filebeat 설치

설치 파일 구성

docker-compose.yml

version: '3'

services:

  filebeat:
    image: docker.elastic.co/beats/filebeat:7.11.1
    container_name: filebeat
    hostname: filebeat-log1
    user: root
    volumes: 
      - ./conf/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
      - fbdata:/usr/share/filebeat/data/
      - /var/log/:/logs/host/
    restart: always

volumes:
  fbdata:
    driver: local

 

 

conf/filebeat.yml

# input
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /logs/host/messages*
#  multiline.pattern: ^\[

# for kibana dashboard
setup.kibana:
  host: "10.220.150.66:5601"
  protocol: "http"
setup.dashboards.enabled: true

# output
output.elasticsearch:
  hosts: ["10.220.150.66:9200"]
  username: "elastic"
  password: "espassword"

 

 


(3) kibana 에 로그 모니터링 Dashboard 추가

- kibana 접속 URL : http://10.220.150.66:5601/

 

위 URL(설치된 환경의 IP:5601)로 접속하여 “Logs” 메뉴를 선택하여 Filter에 filebeat-* 를 선택해주면 실시간 으로 수집되고 있는 로그를 볼 수 있다.

메뉴 > Observability > Logs
“Stream live”를 선택하면 5초마다 최신 로그로 재로딩 하여 출력

 

반응형

댓글