본문 바로가기
ElasticSearch & OpenSearch

[Docker-elk] docker-elk 세팅하고 띄우기

by yonikim 2021. 4. 20.
728x90

원래는 elk를 이용하여 로그를 수집하고 수집한 로그를 이용하여 통계 자료를 만들고 싶었다. 

대표님曰: 검색서비스 개선해야 하는데, Elasitcsearch 가 좋다더라. 

요니킴曰: 제가 진행해 보겠습니다. 🙋🏻‍♀️

 

검색서비스도 개선하고 원하는 바도 이루기 위해 도입하게 된 docker-elk. 

 


ELK 스택 + beats

 

※ ELK 스택 이란?
Elasticsearch: JSON 기반의 분산형 오픈 소스 검색 및 분석 엔진, 주로 REST API를 통해 처리한다.
Logstash: 여러 소스에서 동시에 데이터를 수집하여 변환한 후, Elasticsearch 같은 "stash"로 전송하는 서버사이드 데이터 처리 파이프라인을 말한다.
Kibana: Elasticsearch에서 색인된 데이터를 검색하고 보고 시각화하며 막대 차트, 원형 차트, 표, 히스토그램, 지도 등을 생성하여 데이터를 분석할 수 있게 해준다. 

 

(사실 블로그를 작성하기 한참 전에 세팅했던 작업들이기 때문에 기억을 되살려 가며 작성해 보도록 하겠다. 과거의 나 반성해)

아래와 같은 순서로 작업을 진행했던거 같다.

 

1. docker-elk 세팅하고 띄우기

2. docker-filebeat 세팅하고 띄우기 

3. 한글 형태소 분석기 설치하기

4. Elasticsearch Settings, Mappings 설정하기

5. logstash filter plugins 다루기


docker-elk 세팅하고 띄우기


 

1. docker-elk 다운받기

$ git clone https://github.com/deviantony/docker-elk.git
$ cd docker-elk

 

2. X-pack 관련 설정 제거

* 라이센스가 있다면 설정해 줘도 된다. 나는 무료로 사용할 것이기 때문에

1) ./elasticsearch/config/elasticsearch.yml 

cluster.name: "docker-cluster"
network.host: 0.0.0.0

## X-Pack settings
#
# xpack.license.self_generated.type: trial
# xpack.security.enabled: true
# xpack.monitoring.collection.enabled: true

 

2) ./logstash/config/logstash.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: changeme

 

3) ./logstash/pipeline/logstash.conf

input {
	tcp {
		port => 5000
	}
}

output {
	elasticsearch {
		hosts => "elasticsearch:9200"
		index => "docker-elk-%{+YYYY.MM.dd}"
		# user => "elastic"
		# password => "changeme"
		# ecs_compatibility => disabled
	}
}

 

4) ./kibana/config/kibana.yml

server.name: kibana
server.host: 0.0.0.0
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
monitoring.ui.container.elasticsearch.enabled: true

## X-Pack security credentials
#
# elasticsearch.username: elastic
# elasticsearch.password: changeme

 

5) 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: changeme
      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:

 

3. 실행하기

$ docker-compose build
$ docker-compose up -d

 

4. Kibana 접속해 보기: http://localhost:5601

 

5. 종료하기

$ docker-compose down -v

 

728x90