해당 글은 엘라스틱 스택 개발부터 운영까지라는 책 중 3장을 정리하여 쓴 글입니다.
ElasticSearch Request / Response
ElasitcSearch의 Request와 Response는 모두 REST API 형태로 제공한다.
REST API란? Representational State Transfer 약자로써 웹상의 모든 리소스에 URL를 부여하고 활용하는 아키텍처이다.
시스템 상태 확인 - cat (compact and aligned text)
- cat를 통해 제공하는 기능들은 시스템의 상태를 확인하는 용도이다.
- cat API를 통해서 Node / Shard / Templat 등의 상태 정보를 확인 할 수 있다.
- 현재 클러스터 상태를 빠르게 확인할 수 있다. 즉, 시스템 운영할 때 클러스터 상태를 확인하고 조치할 수 있음.
인덱스와 도큐먼트
- 인덱스 : 도큐먼트를 저장하는 논리적 구분자
- 도큐먼트 : 실제 데이터 저장하는 단위
Document(도큐먼트)
엘라스틱서치에서 데이터가 저장되는 기본 단위로 JSOn 형태며, 하나의 도큐먼트는 여러 필드와 값을 갖는다.
도큐먼트 또한 JSON으로 되어있다.
PUT member/_doc/1
{
"name" : "mike",
"age" : 25,
"gender" : "male"
}
member는 Index
json의 전체가 document
name, age, gender이 field
그리고 필드에 대한 값들의 타입이 mapping이 된다.
기존의 RDB를 사용하던 분들은 MYSQL과 ElasticSearch를 비교해서 보면 도큐먼트의 구조에 대해 훨씬 이해하기가 쉽다.
MYSQL | ElasticSearch |
Table | Index |
record | document |
column | field |
schema | mapping |
Index(인덱스)
인덱스는 도큐먼트를 저장하는 논리적 단위로, RDB에서는 Table과 유사한 개념이다.
인덱스 하나에 수많은 도큐먼트가 존재하며, 모든 도큐먼트는 하나의 인덱스에 포함되어야만 한다.
인덱스는 영어 소문자를 비롯해 몇몇 특수기호 (/,*,?,"...) 를 포함하여 255바이트를 넘을 수 없다.
인덱스 그룹핑 방법은 아래와 같다.
- 스키마에 따른 그룹핑
- 스키마에 따라 인덱스를 구분한다. ex ) 회원 도메인 인덱스 / 장바구니 도메인 인덱스
- 즉, 서로 다른 성격의 스키마를 저장하지 않는다.
- 관리 목적의 그룹핑
- 용량이나 숫자 제한 없이 무한대의 도큐먼트를 포함할 수 있기 때문에, 용량 제한을 둬야한다.
- 왜냐하면 인덱스가 커지면 검색 시 많은 도큐먼트를 참조해야하기 때문에 성능이 나빠진다.
- 용량 제한은 특정 도큐먼트 개수에 도달하거나 특정 용량을 넘어서면 인덱스를 분리한다.
- 일/주/월/년 단위 같은 날짜/시간 단위로 인덱스를 구분한다.
Document CRUD
Dcoument의 CRUD 또한 API 요청을 통하여 한다. API 요청 정보는 아래와 같다.
Create | PUT |
Read | GET |
Update | PUT or _update |
Delete | DELETE |
Create
PUT my_index/_doc/1
{
"name":"HyungJun Kim",
"message":"안녕하세요 Elasticsearch"
}
elasticSearch에서 document를 index에 포함시키는 것을 indexing이라고 한다.
my_index는 index 이름, _doc은 엔드포인트 구분을 위한 예약어, 1은 인덱싱할 도큐먼트의 고유 아이디이다.
하나 주위해야할 점은 PUT으로 바로 만들 경우 값들의 타입이 모두 자동적으로 정해진다. 이것을 dynamic mapping이라고 한다.
엘라스틱 서치는 숫자형이면 문자열로 써도 숫자형으로 바꿔준다. ex ) "20" -> 20으로 저장
Read
-- ID로 조회하는 방법
GET my_index/_doc/1
-- DSL 쿼리로 조회하는 방법, 예시의 _search는 모든 도큐먼트를 가지고 온다.
GET my_index/_search
도큐먼트를 조회하는 방법은 아이디로 조회하는 방법과 쿼리 DSL (Domain Specific Language)이라는 엘라스틱 서치가 제공하는 쿼리문을 이용해 검색하는 방법이 있다.
Update
POST my_index/_update/1
{
"doc": {
"message":"안녕하세요 Kibana"
}
}
-- or
GET /my_index/_doc/1
-- or
PUT my_index/_doc/1
{
"doc": {
"message":"안녕하세요 Kibana"
}
}
도큐먼트를 업데이트를 할 수 있다. 하지만 도큐먼트 업데이트는 도큐먼트 자체를 덮어쓰는 것이기 때문에 도큐먼트를 삭제하고 다시 생성한다.
이러한 도큐먼트 수정작업은 비용이 많이 들기 때문에 권장하지 않는다.
그리고 개별 도큐먼트 수정이 많은 작업이라면 엘라스틱서치가 아닌 다른 데이터베이스를 이용하는 것이 좋다.
Delete
DELETE my_index/_doc/1
도큐먼트를 삭제하기 위해서는 아이디를 알고 있어야 한다. 단, 아이디를 빼고 DELETE를 누를시 모든 도큐먼트가 삭제되는 것을 볼 수 있다.
그리고 도큐먼트 삭제는 수정과 더불어 비용이 많이 들어가는 작업인 만큼 사용 시에 주의해야 한다.
응답 메시지
엘라스틱 서치는 REST API를 통하여 결과를 보내주기 때문에 응답 메시지와 응답 메시지의 해결 방법을 알아야한다.
정보는 아래와 같다.
코드 | 상태 | 해결 방법 |
200, 201 | 정상적으로 수행함 | |
4xx | 클라이언트 오류 | 클라이언트에서 문제점 수정 |
404 | 요청한 리소스가 없음 | 인덱스나 도큐먼트가 존재하는지 체크 |
405 | 요청 메소드(GET, POST 등)을 지원하지 않음 | API 사용법 다시 확인 |
429 | 요청 과부화 | 재전송, 노드 추가 같은 조치 |
5xx | 서버 오류 | 엘라스틱서치 로그 확인 후 조치 |
일단, 중간까지의 정리 내용이다. 다음은 Bulk Data부터 진행을 하겠다.
'ELK > ELK 개발부터 운영까지' 카테고리의 다른 글
엘라스틱서치(elasticsearch) 집계 (0) | 2022.03.09 |
---|---|
엘라스틱서치(elasticSearch) 검색 - 2부 (0) | 2022.03.02 |
엘라스틱서치(elasticSearch) 검색 - 1부 (0) | 2022.03.01 |
엘라스틱서치(elasticSearch) 기본 - 2부 (0) | 2022.02.23 |
엘라스틱스택(ELK Stack) 이란? (0) | 2022.02.14 |