본문 바로가기

Web/Kafka

[kafka] Elastic Stack과 Kafka 실습해보자! - (3)(elk 설치)

<1편>

marrrang.tistory.com/40?category=927204

 

[kafka] Elastic Stack과 Kafka 실습해보자! - (1)(설치 및 구성)

카프카만 하기엔 아쉬운데? ES도 한번 도전해보자 카프카만 하기엔 시간이 아깝기에 ES도 함께 적용시켜보는 아주아주 간단한 실습을 진행해보려합니다. 우선은 카프카부터 시작해봅시다. 모든

marrrang.tistory.com

<2편>

marrrang.tistory.com/42

 

[kafka] Elastic Stack과 Kafka 실습해보자! - (2)(produce and consume)

https://marrrang.tistory.com/40?category=927204 [kafka] Elastic Stack과 Kafka 실습해보자! - (1)(설치 및 구성) 카프카만 하기엔 아쉬운데? ES도 한번 도전해보자 카프카만 하기엔 시간이 아깝기에 ES도 함께..

marrrang.tistory.com

이제 Elastic Stack을 설치해보자!
ELK : Elasticsearch, LogStash, Kibana 의 앞글자를 따서 지은 명칭, Elastic Stack은 앞의 3개 + Beats로 구성된다

시대가 시대인만큼 저희는 Docker에 ELK를 설치해볼까 합니다.

설치를 해보는것도 매우 중요한 일이지만 저희는 사용법에 좀 더 중점을 두고 간단한 방법으로 설치해보겠습니다.

 

1. Docker, Docker-compose 설치

 

2. Docker에 ELK 설치

Elasticsearch, LogStash, Kibana를 간단하게 설치할 수 있는 deviantony/docker-elk 프로젝트에서 Clone을 받겠습니다.

그럴려면 아무래도 리눅스 서버에 Git이 깔려있어야 합니다.

1. 우분투 기준
	1) sudo apt-get install git
	2) sudo apt install git
	3) git --version (설치됐는지 확인용) 
    
2. CentOs 기준
	1) yum install git
    
    
3. 공통
    *) 사용자 설정 -> git config --global user.name "사용자명"
    		-> git config --global user.email "이메일명"
> git clone https://github.com/deviantony/docker-elk.git

링크 : github.com/deviantony/docker-elk

 

deviantony/docker-elk

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

github.com

 

그럼 docker-elk 폴더에 깔끔한 ELK docker 설정들이 들어있습니다. 설정들을 살펴 본 후 docker에 띄워보겠습니다.

 

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/elasticsearch.yml
#
cluster.name: "docker-cluster"
#네트워크 접근 호스트 설정 기본은 모두 허용
network.host: 0.0.0.0

# X-Pack 확장 프로그램에 대한 설정 이 실습에서는 사용 안함
## X-Pack settings
## see https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-xpack.html
#
#xpack.license.self_generated.type: trial
#xpack.security.enabled: true
#xpack.monitoring.collection.enabled: true



2. docker-elk/logstash/config/logstash.yml

---
## 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: changeme


3. docker-elk/logstash/pipeline/logstash.conf

input {
	=> 카프로부터 읽어들일 때
	kafka {
 		bootstrap_servers => "0.0.0.0:9092,1.1.1.1:9092"
		topics => ["읽을 토픽 이름"]
		codec => "json"
		group_id => "카프카 그룹"
	}
	=> 직접 tcp 통신을 통해 받아들일 때
	tcp {
		port => 5000
		codec => json_lines
	}
	=> beats와 연동해서 받을 때
	beats {
		port => 5044
	}
}

## Add your filters / logstash plugins configuration here

output {
	elasticsearch {
    	hosts => "elasticsearch:9200"
        index => "인덱스"
        user => "elastic"
        password => "changeme"
    }
}


4. 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.0.0.0
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
monitoring.ui.container.elasticsearch.enabled: true

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

 

위에 정리한 내용 중에서 /pipeline/logstash.conf 말고는 거의 수정할 것이 없습니다.

logstash.conf 에 실습에 사용할 kafka, tcp, beats의 input을 설정해주고 docker-compose 설정으로 넘어가 보겠습니다.

 

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
      # 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"
      - "5044:5044/tcp" => 추가
    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:

 

사용자에 대한 설정을 추가하거나 다른 설정 파일들을 이동하지 않았다면 수정할 것이 거의 없습니다.

단 Beats와 연동해보기 위해 logstash 쪽에 5044 port만 추가해줍니다.

 

3. Docker로 ELK 실행

> docker-compose up -d

위의 명령어로 실행하면 docker에 실행되게 됩니다.

 

4. 다음으로

설정들에 대한 자세한 설명없이 빠르게 정리하는 방향으로 진행했습니다. 나중에 설정에 대한 부분을 자세히 다루는 게시글을 준비하겠습니다. 이제 실행된 ELK에 데이터를 보내보겠습니다.

반응형