참고 강의 : 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
< 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 자료를 기반으로 작성하였습니다.
'프로그래밍' 카테고리의 다른 글
객체지향 클래스 개념 및 JQuery 기본 문법 (0) | 2018.10.14 |
---|---|
오토핫키 매뉴얼 (0) | 2018.05.10 |
함수 호출 규약 (0) | 2017.12.03 |
Visual Studio 관리자 권한으로 프로그램 실행 (0) | 2017.06.24 |
Visual Studio 유용한 기능 (0) | 2017.06.06 |