본문 바로가기

프로그래밍

ELK 스택 (Elasticsearch,Logstash,kibana) 구축

반응형

참고 강의 : https://www.inflearn.com/course/elk-%ec%8a%a4%ed%83%9d-%eb%8d%b0%ec%9d%b4%ed%84%b0-%eb%b6%84%ec%84%9d/  강사 : Minsuk Heo

 

 

※ ELK (Elasticsearch,Logstash,kibana)

  ELK는 엘라스틱 서치 , 로그 스태시 , 키바나의 합친 말로써

  실시간 데이터 분석을 위한 오픈 소스다.

 

 

 

로그스태시(logstash)여러 종류들의 로그들을 수집,분석하고 , 
입력된 로그들은 변환되어 엘라스틱 서치로 전송된다.
그 후 엘라스틱 서치에서 로그데이터를 분석하고 정제한 뒤 키바나로 보내고
키바나는 그 데이터들을 시각화해서 보여준다.

 

 

 

 

< ELK 설치 환경 구성 >

 

※ 환경 

Ubuntu Release 16.04

ELK 버전 : 5.4.3

VirtualBox와 같은 가상머신에서 ELK를 작동시키려면 최소 메모리가 2G이상이여야 됨.

 

엘라스틱서치는 자바가상머신(jvm)에 의해서 돌아가기 때문에 
jdk를 설치해야한다.

 

 

※ INSTALL JAVA 8 

# sudo add-apt-repository -y ppa:webupd8team/java

# sudo apt-get update

# sudo apt-get -y install oracle-java8-installer

# java-version

apt-get repository에 webupd8team/java를 등록 한 후 oracle java8을 install한다.

 


 

 

< ElasticSearch 설치(java 8이상) >

 

Elasticsearch 5.4.3 tar 다운로드

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.3.tar.

 

압축해제 

tar -xvf elasticsearch-5.4.3.tar.gz

 

ES 실행파일이 있는 bin으로 이동 

cd elasticsearch-5.4.3/bin

 

실행

./elasticsearch &> /dev/null &

현재터미널에서 계속 작업할 수 있도록

백그라운드(&)로 실행시키고 , 출력되는 결과는

보여주지 않도록 설정하였다. 

 


< Kibana 설치 >

 

kibana Install

curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-5.4.3-darwin-x86_64.tar.gz shasum kibana-5.4.3-darwin-x86_64.tar.gz tar -xzf kibana-5.4.3-darwin-x86_64.tar.gz

 

설정

gedit /kibana-5.4.3-linux-x86_64/config/kibana.yml

 

gedit

#server.host = "localhost"
#elasticsearch.url = "http://localhost:9200"

 

cd /kibana-5.4.3-linux-x86_64/bin

./kibana

 

 

< Logstash 설치 >

 

Logstash Install

curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.4.3.tar.gz

tar -xzf logstash-5.4.3.tar.gz

 

설치 후 작동 확인

gedit logstash-simple.conf

 

키보드 입출력 파일

gedit

input {
 stdin { }
}
output {
 stdout { }
}

 

→ logstash에 -f 옵션을 줘서 위 파일을 실행

Logstash input output을 입력한 결과 logstash 화면에 그대로 로그로 찍힌다. (작동확인)


 

< 접속 테스트 >

 

Elasticsearch  port : 9200

curl -XGET 'http://localhost:9200'

※ 다음과 같은 Error 발생시

connection refused - 연결 안됨. Elasticsearch가 실행중인지 확인(ps -ef | grep elasticsearch)

 

 

 

Kibana  port : 5601

http://localhost:5601 접속

 

 

 

 

 < Elasticsearch 검색 방식 >

 

 

 

만약 John이라는 키워드를 서로 다른 검색엔진에서 검색한다고 했을 때

 

엘라스틱서치같은 경우

Document doc1,doc2에 john이 있다는것을 바로 보여준다.

 

하지만 Relational DB인 경우

모든 doc에 가서 Context에 class{ "professor" } 가 john인지 일일이 확인하고

보여준다.

 

 

Elasticsearch의 내부 구조는 다음사진과 같다.

 

 구조를 큰 개념순으로 나열했을때의 순서다. 

 Index -> Type -> Document -> properties 

 

 

< Elasticsearch 데이터 처리  >

 

RESTFUL API를 이용해서 데이터 조작을 하게 된다.

RESTFUL API : 자원을 정확하고 인식하기 편하게 표현한 API

 

 

PUT은 INDEX를 만들고 , POST는 Document를 추가한다.

 

 

* 인덱스 생성 

curl-XPUT http://localhost:9200/index_name

 

* 조회

curl -XGET http://localhost:9200/index_name?pretty

맨 마지막 인자값에 ?pretty를 추가시키면

json 포맷으로 더 깔끔하게 나온다.

 

* 인덱스 제거

curl -XDELETE http://localhost:9200/index_name


* document 생성1

curl -XPOST http://localhost:9200/index_name/type/id/ -d 
{"name":"jkb" , "age":21 , "submit_date" : "2017-12-12" ,

 "school_location" : {"lat" : 36.00, "lon" : -120.00} } 

type뒤에 오는 id는자를 써야한다.

 

* document 생성2 (파일불러오기) 

 

file_name.json

{"name":"jkb" , "age":21 , "submit_date" : "2017-12-12" , "school_location" :

{"lat" : 36.00, "lon" : -120.00}  }


 

curl -XPOST http://localhost:9200/index_name/type/id/ -d 
@file_name.json

 

* 업데이트

curl -XPOST http://localhost:9200/index_name/type/id/_update?pretty @file_name.json

 

bulk 

(여러개의 document를 한번에 삽입)

curl -XPOST http://localhost:9200/_bulk?pretty --data-binary @file_name.json

 

* mapping  (

스키마와 같은개념으로 데이터를 관리할 때는 필수적으로 해야한다)

매핑은 인덱스를 생성하고 나서 해줘야 한다.

curl -XPUT http://localhost:9200/index_name

curl -XPUT http://localhost:9200/index_name/type/_mapping -d @mapping_file.json

 

mapping_file.json

 

 

* search

(특정 데이터 조회)

 

▷ 나이가 21인 사람만 조회

curl -XGET 'http://localhost:9200/index_name/type/_search?
q=age:21&pretty'

 

 

* aggregation 개념 (갖고 있는 문서중에 어떤 조합을 통해 어떤 값을 도출해낼 때 쓰인다.)

 

▷ Metric aggregation =  산술 어그리게이션으로써 평균 , 최솟,최댓값을 구할 때 쓰인다.

▷ Bucket aggregation = 그룹 어그리게이션으로써 팀별로 그룹핑할 때 쓰인다.

 

 


위의 사진들은 인프런에서 ELK 강의를 하신 Minsuk Heo님의 PPT 자료를 기반으로 작성하였습니다.


반응형