안녕하세요! Plitche(플리체)입니다.
이번 포스팅은 [ELK] Docker를 이용한 엘라스틱서치 스텍(ELK) 구축_Window입니다.
Intro
최근 프로젝트 내에서 ElasticSearch를 이용한 토이 프로젝트를 구상 중에 있다.
하지만 나는 ElasticSearch는 커녕 Docker가 무엇인지도 몰랐다.
나 같이 고생하지 말라는 의미로 몇 일간 고생하며 Window에 구축한 ELK 대해서 소개하려 한다.
Docker 준비
도커(Docker)란?
- 도커(Docker)는 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
Java, Python, dbms 각종 OS에 상관없이 실행되며, 심지어 빠른 실행 속도를 제공하고 있어 뛰어 나다고 볼 수 있다.
- 빠르고 가벼운 가상화 솔루션
- 개발언어에 종속되지 않는다.
- 뛰어난 보안성
도커(Docker) 설치하기_Window10
- 도커를 설치하는 전반적인 과정은 갓!대희님의 블로그에 정말 자세하게 설명되어 있으니 똑같이 진행 하도록 하자.
정말 구세주세요ㅠㅠ 감사합니다.
ELK스택 구축하기
1. 먼저 Docker가 제대로 설치되었는지 확인해보자.
(window+r => cmd) 커맨트 창을 열어 docker -v
명령어를 입력하여 버전 확인 및 제대로 설치되었는지 확인하자.
2. Github Repository clone
Elk Github Repository를 클론하여 Elastic Search(엘라스틱 서치), Kibana(키바나), Logstash(로그스테시) 3가지 전부 통합으로 구축할 예정이다. (당연히 Git은 설치되어 있어야 겠죠?)
2-1. Simple Version(간단 버전)
- 간단 버전은 혹시 시간이 없거나 굳이 하나하나 전부 따라 진행 하기 어려운 분들이 사용했으면 한다.
- 먼저 내려받을 폴더를 생성하고 Gitbash를 통하여 클론할 준비를 한다.
git clone https://github.com/deviantony/docker-elk-kor.git
명령어를 통하여 clone해온다.- 아래와 같이 정상적으로 내려받아 졌다면, 끝!! (진짜다..^^)
간단 버전은 Repository 이름에서도 알 수 있듯이
kor
버전 인 것이다.
이미 유료로 사용되는 X-pack 설정은 주석처리 되어있고 바로 사용이 가능하다.
X-Pack은 ELk의 확장팩이라고 간단히 생각하면 된다.
2-2. Original Version(일반 버전)
- 이번에는 직접 설정을 해보도록 하자. 마찬가지로 폴더를 생성하고 Gitbash를 실행해주자.
git clone https://github.com/deviantony/docker-elk.git
명령어를 통해 Clone해온다.- 마찬가지로 아래와 같이 클론이 완료된 모습이 나오면 성공이다.
이제부터 설정을 직접 할 차례이다.
각자 메모장 혹은 다른 프로그램을 통해서 아래 경로의 파일을 열어 준 뒤 아래 내용을 붙여 넣는다.
2-3 setting(설정)
1. docker-elk > elasticsearch > config > elasticsearch.yml 파일
---
## Default Elasticsearch configuration from Elasticsearch base image.
## https://github.com/elastic/elasticsearch/blob/master/distribution/docker/src/docker/config/el asticsearch.yml
#
cluster.name: "docker-cluster"
network.host: 0.0.0.0
2. docker-elk > elasticsearch > Dockerfile 파일
ARG ELK_VERSION
# https://www.docker.elastic.co/
FROM docker.elastic.co/elasticsearch/elasticsearch:${ELK_VERSION}
# Add your elasticsearch plugins setup here
# Example: RUN elasticsearch-plugin install analysis-icu
RUN elasticsearch-plugin install analysis-nori
3. docker-elk > kibana > config > kibana.yml 파일
- 한글 분석기 nori를 설치합니다.
---
## Default Kibana configuration from kibana-docker.
## https://github.com/elastic/kibana-docker/blob/master/.tedi/template/kibana.yml.j2
#
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
4. docker-elk > logstash > config > logstash.yml 파일
---
## Default Logstash configuration from logstash-docker.
## from https://github.com/elastic/logstash-docker/blob/master/build/logstash/config/logstash-full.yml
#
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]
5. docker-elk > logstash > pipeline > logstash.conf 파일
input {
tcp {
port => 5000
}
}
## Add your filters / logstash plugins configuration here
output {
elasticsearch {
hosts => "elasticsearch:9200"
index => "logstash-20200803"
user => "username"
password => "password"
}
}
6. docker-elk > 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: 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:
- "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:
7. docker-elk > docker-stack.yml 파일
version: '3.3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0
ports:
- "9200:9200"
- "9300:9300"
configs:
- source: elastic_config
target: /usr/share/elasticsearch/config/elasticsearch.yml
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
ELASTIC_PASSWORD: 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
deploy:
mode: replicated
replicas: 1
logstash:
image: docker.elastic.co/logstash/logstash:7.8.0
ports:
- "5000:5000"
- "9600:9600"
configs:
- source: logstash_config
target: /usr/share/logstash/config/logstash.yml
- source: logstash_pipeline
target: /usr/share/logstash/pipeline/logstash.conf
environment:
LS_JAVA_OPTS: "-Xmx256m -Xms256m"
networks:
- elk
deploy:
mode: replicated
replicas: 1
kibana:
image: docker.elastic.co/kibana/kibana:7.8.0
ports:
- "5601:5601"
configs:
- source: kibana_config
target: /usr/share/kibana/config/kibana.yml
networks:
- elk
deploy:
mode: replicated
replicas: 1
configs:
elastic_config:
file: ./elasticsearch/config/elasticsearch.yml
logstash_config:
file: ./logstash/config/logstash.yml
logstash_pipeline:
file: ./logstash/pipeline/logstash.conf
kibana_config:
file: ./kibana/config/kibana.yml
networks:
elk:
driver: overlay
Docker로 실행하기
이제 우리가 클론 받은 폴더로 이동해 Gitbash
를 다시 켜주고 아래 명령어를 입력해보자.
docker-compose build && docker-compose up -d
종료하기
docker-compose down -v
Port & connact
- 기본적으로 설정되어있는 ELK port(포트)는 아래와 같다.
ElasticSerach = 9200 / 9300
Logstash = 5000 / 9600
Kibana = 5601
- Local(로컬)에서 url에 위의 포트번호를 입력하면 아래 사진과 같이 접속이 되면 최종 성공!^^
Review
- 하나하나 따라해 보고 있긴 한데 아직 저에게는 조금 어려운 개념인 것같아요. ㅠㅠ 열심히 공부해보고 실제 프로젝트에도 적용할 수 있었음 좋겠네요!!^^ 감사합니다.