1. Elastic Search
가. RDBMS vs Elastic Search
1) Indexing
키워드 중심의 ‘READ’ 관점에서 O(1) vs O(logn)
•
Elastic Search: ‘john’이라는 키워드는 text에 인덱싱되어 있고 해당 키워드를 포함한 document를 결과값으로 반환하므로 시간복잡도 O(1)
•
RDBMS: 인덱싱되어 있는 record인 doc1, doc2, doc3를 확인하고 그 안에 ‘john’이라는 텍스트의 존재여부를 확인하므로 시간복잡도 O(logn) or O(N)
image from https://www.youtube.com/watch?v=B1Aq2GQ4E78
2) Basic Terms
•
Elastic Search는 HTTP Method 기준으로 동작을 정의함
•
Index 내부에 복수의 Type이 존재하고 그 안에 Document로 구성됨
→ RDBMS의 Database - Table - Row - Column과 같이 구조적으로 계층적인 부분이 있음
나. CRUD
1) Common
•
응답값을 정돈된 형태로 확인: HTTP 요청 마지막에 ~?pretty 추가
ex) curl -XPUT http://localhost:9200/classes?pretty
2) Index
•
인덱스 생성: PUT 메소드 활용
ex) students 인덱스를 만들고 싶은 경우: curl -XPUT http://localhost:9200/students
•
인덱스 확인: GET 메소드 활용
•
인덱스 삭제: DELETE 메소드 활용
3) Document
•
인덱스 내 다큐먼트 생성: POST 메소드 활용
•
json 포맷 입력으로 직적 document 생성
•
json 포맷으로 데이터가 입력된 파일을 토대로 document 생성
•
Bulk Insert: ~/_bulk --data-binary @<file name>
다. Type
1) Type Mapping
라. Search
간단한 검색을 제외하고는 request body 형태로 검색하는 것을 권장
1) search with request param
•
GET movie_search/_search?q=prdtYear:2018
2) search with request body
GET movie_search/_search
{
"query" : {
"term" : { "prdtYear": "2018"}
}
}
JSON
복사
마. Aggregation
1) Metric
•
산술 결과
2) Bucket
•
일종의 Group By
2. Kibana
가. 기본 데이터 초기화
1) 인덱스 생성
•
curl -XPUT http://localhost:9200/basketball
2) 타입 맵핑
•
curl -XPUT 'http://localhost:9200/basketball/record/_mappin' -d @mapping.json -H "Content-Type: application/json"
3) 데이터 벌크 입력
•
curl -XPOST 'http://localhost:9200/_bulk' --data-binary @bulk.json -H "Content-Type: application/json"
나. Kibana Setting
1) Management Setting
•
Management란의 Index Patterns에서 ‘Create Index Pattern’ 작업
→ 기본 데이터 생성 시 인덱스로 설정한 ‘basketball’을 기준으로 pattern 생성
•
Index Pattern 생성 결과
2) Discover Setting
Setting
가. Elastic Search
1) 설치
•
이미지 다운로드 명령: docker pull <elasticsearch:tag>
ex) docker pull elasticsearch:7.17.5
2) 설정
•
Docker Network 설정 명령: docker network create <network name>
ex) docker network create elk_net
→ docker network 목록 확인: docker network ls
→ Docker Container 간 통신을 위해 Network 설정 필요
→ ElasticSearch Kibana Logstash
•
Docker 컨테이너 생성 및 실행
ex) docker run -d --name elasticsearch --net elk_net --publish 9200:9200 --publish 9300:9300 --env "discovery.type=single-node" elasticsearch:7.17.5
or docker run -d --name elasticsearch --net elk_net -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.17.5
•
ElasticSearch 설정 확인
ex) docker exec -i -t elasticsearch cat /usr/share/elasticsearch/config/elasticsearch.yml
나. Kibana
1) 설치
•
이미지 다운로드 명령
ex) docker pull kibana:7.17.5
2) 설정
•
Docker 컨테이너 생성 및 실행
ex) docker run -d --name kibana --net elk_net -p 5601:5601 kibana:7.17.5
→ ElasticSearch 컨테이너가 속한 도커 네트워크에 연결
•
Kibana Web Site 접속: http://127.0.0.1:5601/
다. Logstash
1) 설치
2) 설정
이슈 정리
1) Elastic Search Kibana Version 불일치
•
현상: Elastic Search 7버전에서는 등록 토큰 생성 프로세스가 없어서 Kibana 8버전에서 요구하는 등록 토큰을 입력할 수 없음
•
해결 방법
1.
Elastic Search 버전을 8 이상으로 높여서 등록 토큰 생성 후 Kibana 8 버전에 등록
2.
Kibana 버전을 7로 낮춰서 등록 토큰 등록 프로세스 생략
Reference
•
ELK 스택으로 데이터 분석, https://www.inflearn.com/course/elk-스택-데이터-분석/dashboard
•
권택한 외 5명 지음, 엘라스틱서치 실무가이드, 위키북스