공개 SW 솔루션설치 & 활용가이드 시스템 SW > 데이터관리 제대로배워보자 How to Use Open Source Software Open Source Software Installation & Application Guide
CONTENTS 1. 개요 2. 기능요약 3. 실행환경 4. 설치및실행 5. 기능소개 6. 활용예제 7. FAQ 8. 용어정리
- 3-1. 개요 소개 주요기능 2012 년샤이배논 (Shay Banon) 에의해처음개발된아파치루씬 (Lucene) 기반의검색엔진 시각화도구인 Kibana, 수집도구인 Logstash, Beats 등과함께 Elastic Stack 으로구성 2017 년 7 월기준 1 억 3 천만의누적다운로드를기록중 검색 : 커머스사이트의상품검색또는위키피디아등의문서검색. 분석 : 의료, 보안등의특수데이터분석. 로그분석 : 웹로그, 머신로그등의시계열기반의데이터분석. 대분류 시스템 SW 소분류 데이터관리 라이선스형태 Apache 2.0 사전설치솔루션 Java 운영제제 Linux / MacOS / Windows 버전 5.5 특징 보안취약점 기본적으로분산시스템으로구성되며스케일아웃과데이터유실을대비한고가용성 JSON 과 REST API 를이용하여다양한클라이언트와연동되며유연한데이터모델지원 전문 (Full Text) 검색을지원하며다양한시계열데이터와수치데이터의집계및연산가능 실시간데이터검색, 분석및다양한쿼리문법지원 취약점 ID : CVE-2015-4165 심각도 : 7.5 HIGH(V3) 취약점설명 : Elasticsearch 버전 1.0.0-1.5.2 는시스템의다른응용프로그램에대한조작된공격에취약 대응방안 : 1.6.0 이상으로업그레이드 참고경로 : https://www.securityfocus.com/archive/1/535727/100/0/threaded 개발회사 / 커뮤니티 Elastic 공식홈페이지 https://www.elastic.co
- 4-2. 기능요약 Elasticsearch 는오픈소스이며전문검색기반의고가용성실시간분석시스템이다. 주요기능 지원여부 오픈소스 Apache 2.0 분산시스템고가용성문서기반 RESTFul 전문 (Full Text) 검색실시간 샤드 (Shard) 기반의데이터분산저장 복제본을통한데이터유실방지 json 도큐먼트기반 http 프로토콜을통한 REST API 지원 문서전체를 Term 기반으로색인 배치기반의사이클분석이아닌데이터를실시간으로저장 / 쿼리가능
- 5-3. 실행환경 기본적으로 Java(Oracle, OpenJDK) 가설치된환경에서는대부분실행가능하다. https://www.elastic.co/support/matrix 에서지원환경의확인이가능하다.
- 6-4. 설치및실행 세부목차 4.1 압축 / 설치파일다운로드 4.2 일반설치및실행 MacOS 4.3 서비스로설치 Redhat Linux 4.4 Windows 커맨드도구이용 4.5 Windows msi 설치 4.6 실행확인
- 7-4. 설치및실행 4.1 압축 / 설치파일다운로드 https://www.elastic.co/kr/downloads/elasticsearch 페이지에서운영체제에맞는설치파일 을다운로드한다. 이자료에서는 5.5.0 버전을기준으로설명한다.
- 8-4. 설치및실행 4.2 일반설치및실행 MacOS tar 또는 zip 파일을받아원하는경로에압축을푼다. $ tar xfz elasticsearch-5.5.0.tar.gz $ unzip elasticsearch-5.5.0.zip 압축을푼 Elasticsearch 홈디렉토리로이동한다. $ cd elasticsearch-5.5.0 홈디렉토리의 bin 아래에있는 elasticsearch 파일을실행한다. $ bin/elasticsearch [2017-07-24T17:19:53,016][INFO ][o.e.n.node ] [] initializing... [2017-07-24T17:19:53,103][INFO ][o.e.e.nodeenvironment ] [rk2wx9v] heap size [1.9gb], [2017-07-24T17:19:53,107][INFO ][o.e.n.node ] node name [rk2wx9v] [2017-07-24T17:19:54,261][INFO ][o.e.p.pluginsservice ] [rk2wx9v] loaded module [percolator] [2017-07-24T17:19:54,261][INFO ][o.e.p.pluginsservice ] [rk2wx9v] loaded module [reindex] [2017-07-24T17:19:56,258][INFO ][o.e.n.node ] initialized [2017-07-24T17:19:56,258][INFO ][o.e.n.node ] [rk2wx9v] starting... [2017-07-24T17:20:01,482][INFO ][o.e.t.transportservice ] [rk2wx9v] publish_address {127.0.0.1:9300}, [2017-07-24T17:20:04,564][INFO ][o.e.n.node ] [rk2wx9v] started 백그라운드로실행하고자하는경우에는 d 옵션을추가한다. $ bin/elasticsearch -d
- 9-4. 설치및실행 4.3 서비스로설치 Redhat Linux rpm 파일을내려받아설치한다. $ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.rpm $ sha1sum elasticsearch-5.5.0.rpm $ sudo rpm --install elasticsearch-5.5.0.rpm service 명령을이용해서서비스로 Elasticsearch 를시작, 종료한다. $ sudo -i service elasticsearch start $ sudo -i service elasticsearch stop
- 10-4. 설치및실행 4.4 Windows 커맨드도구이용 zip 파일을받아원하는경로에압축을푼다. 커맨드도구로압축을푼경로의 \bin 디렉토리아래의 elasticsearch.exe 를실행시킨다
- 11-4. 설치및실행 4.5 Windows MSI 설치 (1/2) msi 패키지프로그램을다운로드받아실행하여서비스프로그램으로설치한다.
- 12-4. 설치및실행 4.5 Windows MSI 설치 (2/2) 프로그램서비스목록에서 Elasticsearch 를찾아실행, 중지를시킬수있다. 세부설정은 Windows install 메뉴얼페이지를참고한다. https://www.elastic.co/guide/en/elasticsearch/reference/current/windows.html
- 13-4. 설치및실행 4.6 실행확인 유닉스계열에서 curl 명령을사용해서 localhost 의 9200 번포트를확인한다. 또는웹브라우저에서 http://localhost:9200 로접속해서도확인이가능하다.
- 14-5. 기능소개 세부목차 5.1 REST API 5.2 시스템구성 5.2.1 클러스터 5.2.2 노드 5.2.3 샤드 & 레플리카 5.3 검색 (_search) 5.3.1 URI 검색 5.3.2 Request Body 검색 5.4 집계 (aggregation)
- 15-5. 기능소개 5.1 REST API(2/1) Elasticsearch 는 REST API 를이용한 http 통신을통해데이터를처리한다. 데이터는인덱스와타입이라고하는논리적영역에저장되며 JSON 도큐먼트형식으로저장된다. JSON 도큐먼트의개별요소값을필드라고한다. 각도큐먼트의접근 URI 는호스트 : 포트 / 인덱스 / 타입 / 도큐먼트ID 로이루어진다. http 메소드인 PUT / POST / GET / DELETE 등을이용하여문서를입력 / 조회 / 삭제를한다. HTTP CRUD SQL GET Read Select PUT Update Update POST Create Insert DELETE Delete Delete 관계 DB 테이블 (Table) 열 (Row) 행 (Column) 스키마 (Schema) Elasticsearch 인덱스 (index) / 타입 (Type) 도큐먼트 (Document) 필드 (Field) 매핑 (Mapping)
- 16-5. 기능소개 5.1 REST API(2/2) 도큐먼트입력 $ curl -XPUT 'http://localhost:9200/books/book/1' -d { "title" : "Elasticsearch Guide", "author" : "Kim", "date" : "2014-05-01", "pages" : 250 } {"_index":"books","_type":"book","_id":"1","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"created": true} 도큐먼트조회 $ curl -XGET 'http://localhost:9200/books/book/1 {"_index":"books","_type":"book","_id":"1","_version":1,"found":true,"_source": { "title" : "Elasticsearch Guide", "author" : "Kim", "date" : "2014-05-01", "pages" : 250 }} 도큐먼트삭제 $ curl -XDELETE 'http://localhost:9200/books/book/1 {"found":true,"_index":"books","_type":"book","_id":"1","_version":2,"result":"deleted","_shards":{"total":2,"successful":1,"failed ":0}}
- 17-5. 기능소개 5.2 시스템구성 5.2.1 클러스터 (Cluster) 엘라스틱서치시스템의가장큰단위 하나의클러스터는다수의노드로구성 하나의클러스터를다수의서버로바인딩해서운영, 또는역으로하나의서버에서다수의클러스터운용가능 Elasticsearch 설치경로의 config 디렉토리아래에있는 elasticsearch.yml 파일, 또는실행시 -E 커맨드옵션으로설정가능 config/elasticsearch.yml cluster.name: elasticsearch $ bin/elasticsearch -E cluster.name=elasticsearch
- 18-5. 기능소개 5.2 시스템구성 5.5.2 노드 (Node) (1/3) 엘라스틱서치를구성하는하나의단위프로세스 다수의샤드로구성됨 같은클러스터명을가진노드들은자동으로바인딩됨 Elasticsearch 설치경로의 config 디렉토리아래에있는 elasticsearch.yml 파일, 또는실행시 -E 커맨드옵션으로설정가능 config/elasticsearch.yml node.name: "Node1" $ bin/elasticsearch -E node.name=node1
- 19-5. 기능소개 5.2 시스템구성 5.2.2 노드 (Node) (2/3) http 통신포트 : 9200~ 부터차례대로증가 노드간데이터교환포트 : 9300~ 부터차례대로증가 클러스터 : elasticsearch Node1 9300 9200 REST API 9301 Node2 9201 REST API
- 20-5. 기능소개 5.2 시스템구성 5.2.2 노드 (Node) (3/3) 같은클러스터명을가진노드들은자동으로한클러스터안에서바인딩됨 클러스터명이다르면같은서버또는네트워크내에서도다른클러스터로구성됨 $ bin/elasticsearch -E cluster.name=elasticsearch -E node.name=node1 $ bin/elasticsearch -E cluster.name=elasticsearch -E node.name=node2 $ bin/elasticsearch -E cluster.name=elasticsearch2 -E node.name=node3 클러스터 : elasticsearch Node1 9300 9200 REST API 9301 Node2 9201 클러스터 : elasticsearch2 REST API Node3 9202 9302
- 21-5. 기능소개 5.2 시스템구성 5.5.3 샤드 (Shard) & 레플리카 (Replica) (1/2) 샤드 : 데이터검색단위루씬인스턴스 레플리카 : 샤드의복사본 인덱스별로설정. 기본값은샤드-5, 레플리카-1. REST API의 PUT 메소드를이용해서인덱스안의 settings 값으로설정 $ curl -XPUT localhost:9200/books -d ' { "settings" : { "number_of_shards" : 5, "number_of_replicas" : 1 } }'
- 22-5. 기능소개 5.2 시스템구성 5.5.3 샤드 (Shard) & 레플리카 (Replica) (2/2) 각노드별로샤드가분배되어저장됨 동일한샤드와레플리카는항상서로다른노드에저장됨 일부노드가중지되더라도샤드와레플리카중최소 1개가살아있으면클러스터는정상적으로동작 0 2 3 1 4 4 0 3 1 2
- 23-5. 기능소개 5.3 검색 (1/2) 5.3.1 URI 검색 검색은 _search API 사용. 인덱스단위및 logs-* 와같은멀티테넌시검색가능. 호출 URI 에 q= 파라메터로검색쿼리삽입. $ curl 'http://localhost:9200/books/_search?q=william' { 중략 }, "hits" : { "total" : 3, "max_score" : 1.0, "hits" : [ { 중략 "_source": { "title": "Romeo and Juliet", "author": "William Shakespeare", "category":"tragedies", "written": "1562-12-01T20:40:00", "pages" : 125 } }, 중략
- 24-5. 기능소개 5.3 검색 (2/2) 5.3.2 Request Body 검색 검색쿼리를 JSON 형태의데이터로전송 $ curl 'http://localhost:9200/books/_search?pretty=true' -d ' { "query" : { "match" : { "author" : "william" } } }' { 중략 }, "hits" : { "total" : 3, "max_score" : 1.0, "hits" : [ { 중략 "_source": { "title": "Romeo and Juliet", "author": "William Shakespeare", "category":"tragedies", "written": "1562-12-01T20:40:00", "pages" : 125 } }, 중략
- 25-5. 기능소개 5.4 집계 Aggregation(1/2) Elasticsearch 는검색결과도큐먼트내용외에도각필드의값들을집계한결과를가져 올수있다. 이집계기능을 aggregation 이라고한다. 검색된도큐먼트는검색결과의 hits[ ], 집계는 aggregation[ ] 배열안에들어간다. Search aggregation hits
- 26-5. 기능소개 5.4 집계 Aggregation(2/2) Aggregation 은 _search 로검색시 query 문과함께사용한다. $ curl 'localhost:9200/_search' -d { "query" : { // query }, "aggregations" : { // or aggs aggs_name : { // a set of aggregation } } }'
- 27-6. 활용예제 세부목차 6.1 Elastic Stack 아키텍쳐 6.2 Kibana
- 28-6. 활용예제 6.1 Elastic Stack 아키텍처 (1/2) 모든데이터는 Elasticsearch 안에색인되어저장되고, 조회, 집계된다. REST API를지원하는애플리케이션이라면모두데이터수집이가능하지만, Elastic 에서는데이터수집기인 Logstash 와 Beats 를지원하고있다. Logstash 는다양한입 / 출력파이프라인및데이터변조, 필터링을지원한다. Beats 는수집한데이터를 Elasticsearch 또는 Logstash 로전송하는기능만있으며대신가볍고빠르다. 시각화툴인 Kibana 를이용해서 Elasticsearch 에저장된데이터를다양한도표로시각화가가능하다. Elasticsearch, Logstash, Beats, Kibana 를묶어 Elastic Stack 이라고부르며이스택에해당되는제품들은모두오픈소스 (Apache 2.0) 이다. 추가로 Elastic 사에서는 X-Pack 이라는상용플러그인을배포중이며 X-Pack은보안, 알람, 모니터링, 그래프, 머신러닝등의추가기능들을제공한다. ES-Hadoop 이라는제품을통해하둡시스템으로부터데이터수집이가능하다
- 29-6. 활용예제 6.1 Elastic Stack 아키텍처 (2/2) Beats 및다양한소스로부터수집된데이터가 Logstash 를거쳐 Elasticsearch 클러스터에 저장되고 Kibana 및다른애플리케이션들을통해검색및조회가된다. Beats Elasticsearch Log Files Metrics Logstash Master Nodes (3) Custom UI Wire Data your(beat) Ingest Nodes (X) Kibana Kafka Data Nodes - Hot (X) Instances (X) Datastore Web APIs Redis Messaging Queue Nodes (X) Data Nodes - Warm (X) Social Sensors X-pack X-pack ES-Hadoop LDAP AD SSO Hadoop Ecosystem Authentication Notification
- 30-6. 활용예제 6.2 Kibana(1/3) Kibana 를이용해 Elasticsearch 안에있는데이터를쉽게시각화가가능하다.
- 31-6. 활용예제 6.2 Kibana(2/3) Visualize 메뉴에서시각화모듈들을먼저만들고 Dashboard 메뉴에서모듈들을구성하여 대시보드를완성한다.
- 32-6. 활용예제 6.2 Kibana(3/3) Kibana 에있는 Dev Tools 메뉴에서 Elasticsearch 쿼리의자동완성등을지원하여 편리하게 REST API 사용이가능하다.
- 33-7. FAQ Q Elasticsearch는완전무료인가요? & A Elasticsearch 를비롯한 Kibana, Logstash, Beats 등모든 Elastic Stack 제품은 Apache 2.0 라이센스를따르는오픈소스이며기능과사용범위에아무런제한이없고비용이들지않습니다. Q Elasticsearch는주로어디에쓰이나요? & A Elasticsearch는검색엔진이지만대부분형태의데이터를모두처리할수있어로그분석, 위치정보분석등다양한용도로활용됩니다. 금융, 보안, 게임, 쇼핑, 의료등거의모든산업분야에서사용되고있으며, 자세한사례는 https://www.elastic.co/use-cases 에서확인이가능합니다.
- 34-7. FAQ Q Elasticsearch 에서한글로도검색이가능한가요? & A 한글을활용하기위해서는한글형태소분석기를별도로설치해야합니다. 아리랑, 은전한닢등의한글형태소분석기의사용이가능하며해당홈페이지또는커뮤니티를통해제공받아설치해야합니다. Q 데이터조인이가능한가요? & A Elasticsearch는데이터를역색인 (Inverted Index) 구조로저장하기때문에기본적으로조인기능은지원하지않습니다. 하지만문서를 Nested 구조로저장하거나 Parent / Child 구조를이용해서검색시다른도큐먼트를참조해서검색할수있습니다.
- 35-8. 용어정리 용어 REST API JSON Query DSL 설명 Representational safe transfer API 리소스, URI, http 메소드로이루어진시스템아키텍트 JavaScript Object Notation. 사람과기계가모두이해하기용이한경량데이터교환방식 Query Domain Specific Language Elasticsearch 의검색에사용되는질의문법
Open Source Software Installation & Application Guide 이저작물은크리에이티브커먼즈 [ 저작자표시 비영리 동일조건변경허락 2. 0 대한민국라이선스 ] 에따라이용하실수있습니다.