본문 바로가기

모니터링

[Elastic Stack #1] Docker로 Elastic Stack 구축해서 Filebeat로 로그 수집하기 - 1

728x90

 

안녕하세요 오랜만입니다. 올해도 벌써 한 달 밖에 안남았네요 참 속상합니다.

 

아무튼 오늘은 좀 유명하다고 할 수 있는 Elastic Stack 에 대해 구축 및 로그 수집을 해보려고합니다.

 

이게 조금 공부를 해보니까 기존에 ELK Stack 에다가 beat 를 추가해서 Elastic stack 이라고 하더라구요

 

이번 글에선 Elastic search, Log stash, Kibana, Filebeat 요 4가지를 묶어서 사용한다고 보시면될 거 같습니다.

 

각각 기능을 찾아보면 Elastic Search는 검색도구 / log stash 는 로그 수집 및 집계 / kibana 는 데이터 시각화 및 모니터링인데요 

 

저도 헷갈리는데 이게 사용해보면 조금 DB같다고 느껴집니다. 근데 찾아보니 DB로 사용하기엔 조금 무리가 있다고하네요 궁금하신 분들은 딥하게 찾아보시면 될거같습니다.

 

 

공식 홈페이지에서 그려놓은 그림

 

이 그림을 보시면 아시겠지만 stack 이 이렇게 쌓여있습니다. Beats와 Logstash를 통해 로그를 수집하고 이를 Elasticsearch에 전달하면 사용자는 kibana 대시보드를 통해 이를 모니터링할 수 있습니다.

 

이번 글에선 Logstash 구축을 하지만 사용하지 않을 예정입니다. 

 

 

 

 

대략적으로 보면 이렇습니다. 도커컴포즈를 통해서 ELK 컨테이너를 만들고 여기에 Beats(File beat와 metric beat)를 로컬로 설치하여 나오는 데이터들을 Elastic search에 보내면 kibana에서 모니터링 합니다.

 

 

순서대로 한 번 해보면

 

우선 https://github.com/ksundong/docker-elk-kor 깃허브 다운해 줍시다.

 

git clone https://github.com/ksundong/docker-elk-kor.git
cd docker-elk

 

이제 좀 수정이 필요합니다. 일단 포트포워딩이나 이런것들은 굉장히 사소하기때문에 설명은 제껴두고 알아야할 부분이 있습니다. 바로 X-Pack 의 보안 부분인데 요거를 설정안해두면 그냥 로그인 없이 바로 들어가지기때문에 만약 보안부분을 사용하시려면 X-Pack 부분을 설정해야합니다. 깃허브 안쪽에 elasticsearch/config/elasticsearch.yml 이런곳에 수정을 해주어야합니다.

 

/docker-elk/elasticsearch/config/elasticsearch.yml 를 다음처럼 수정해 주십쇼 만약 Xpack 세팅 필요없으면 밑에 xpack. 부분을 주석처리 해주시면됩니다.

## Default Elasticsearch configuration from Elasticsearch base image.
## https://github.com/elastic/elasticsearch/blob/master/distribution/docker/src/docker/config/elasticsearch.yml
#
cluster.name: "docker-cluster"
network.host: 0.0.0.0

## X-Pack settings
## see https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-xpack.html
#
discovery.type: single-node

xpack.license.self_generated.type: trial
xpack.security.enabled: true
xpack.monitoring.collection.enabled: true

 

 

docker-elk/kibana/config/kibana.yml

## Default Kibana configuration from Kibana base image.
## https://github.com/elastic/kibana/blob/master/src/dev/build/tasks/os_packages/docker_generator/templates/kibana_yml.template.ts
#
server.name: kibana
#server.host: "0"
server.host: 0.0.0.0
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
#monitoring.ui.container.elasticsearch.enabled: true
xpack.monitoring.ui.container.elasticsearch.enabled: true


## X-Pack security credentials
#
elasticsearch.username: elastic
elasticsearch.password: 비밀번호쓰기

자 키바나입니다. 마찬가지로 저 밑에 xpack security 부분쓸지 말지 정해주시면됩니다. 포트같은건 말할것도 없구요

 

로그 스태쉬는 두 부분을 봐야하는데

docker-elk/logstash/config/logstash.yml

docker-elk/logstash/pipeline/logstash.conf

---
## Default Logstash configuration from Logstash base image.
## https://github.com/elastic/logstash/blob/master/docker/data/logstash/config/logstash-full.yml
#
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]

## X-Pack security credentials
#

xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.username: elastic
xpack.monitoring.elasticsearch.password: 비밀번호쓰기

 

input {
        tcp {
                port => 5000
        }
}

## Add your filters / logstash plugins configuration here

output {
        elasticsearch {
                hosts => "elasticsearch:9200"
                user => "elastic"
                password => "비밀번호쓰기"
        }
}

 

자 이렇게 써주신 후에 처음으로 돌아가서 docker-compose.yml 파일을 봅시다.

 

version: '3.2'

services:
  elasticsearch:
    build:
      context: elasticsearch/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - type: bind
        source: ./elasticsearch/config/elasticsearch.yml
        target: /usr/share/elasticsearch/config/elasticsearch.yml
        read_only: true
      - type: volume
        source: elasticsearch
        target: /usr/share/elasticsearch/data
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      ES_JAVA_OPTS: "-Xmx256m -Xms256m"
      ELASTIC_PASSWORD: <비밀번호>
      # Use single node discovery in order to disable production mode and avoid bootstrap checks
      # see https://www.elastic.co/guide/en/elasticsearch/reference/current/bootstrap-checks.html
      discovery.type: single-node
    networks:
      - elk

  logstash:
    build:
      context: logstash/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - type: bind
        source: ./logstash/config/logstash.yml
        target: /usr/share/logstash/config/logstash.yml
        read_only: true
      - type: bind
        source: ./logstash/pipeline
        target: /usr/share/logstash/pipeline
        read_only: true
    ports:
      - "5044:5044"
      - "5000:5000/tcp"
      - "5000:5000/udp"
      - "9600:9600"
    environment:
      LS_JAVA_OPTS: "-Xmx256m -Xms256m"
    networks:
      - elk
    depends_on:
      - elasticsearch

  kibana:
    build:
      context: kibana/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - type: bind
        source: ./kibana/config/kibana.yml
        target: /usr/share/kibana/config/kibana.yml
        read_only: true
    ports:
      - "5601:5601"
    networks:
      - elk
    depends_on:
      - elasticsearch

networks:
  elk:
    driver: bridge

volumes:
  elasticsearch:

 

여기서 바꿀 부분은 거의 없는데 일단 ELASTIC_PASSWORD 부분을 위에 컨피그에서 바꾼 값으로 바꿔주시구요

 

ES_JAVA_OPTS 부분을 좀 고쳐줄 필요가있습니다. 이거 때문에 ELastic이 자꾸 죽더라구요 아웃오브 메모리에러로  요게 최초메모리 최대 메모리 지정하는 부분인데 넉넉하게 1g로 잡아줍시다 -Xmx1g -Xms1g 

 

 

자 이제 build 해주시고 docker-compose up -d 해줍시다. 그럼 슥슥슥슥 혼자 진행되면서 설치가 됩니다.

 

설치가 몇분정도 시간이 걸리니 조금 기다리시면 키바나로 접근이 가능합니다. ip:5601 로 들어가시고 login 창이 뜬다면 성공입니다. id는 elastic입니다.

 

다음 시간에는 filebeat와 metricbeat를 통해 로그 수집을 이용해서 대시보드 확인까지 해보겠습니다.

 

여러분 모두 안녕~

 

반응형