위 2개의 이미지 중 윗쪽의 이미지는 삽입을 요청한 원본 document이다.
아래는 ES에서 저장한 방식이다.
위 이미지처럼 ES에서는 각종 메타데이터를 붙여서 저장한다.
_source 하위가 실제 저장을 요청한 데이터이다.
Document는 특정 index에 포함되어야하며, ES의 검색 기능 또한 특정 인덱스 내부에서의 검색만 가능하다.
REST API에 대한 이해가 없다면, 생활코딩님의 REST API 강의를 보고 오면, 이해가 쉬울 것이다.
Cluster의 상태는 아래 API를 통해 확인할 수 있다.
GET /_cluster/health
_cluster
는 ES의 어떤 API인지를 나타내며, 모든 ES의 API 이름은 _
으로 시작한다.
health
는 해당 API의 커맨드를 나타낸다.
해당 명령어를 실행하면
{
"cluster_name" : "elasticsearch_jb",
"status" : "yellow",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 9,
"active_shards" : 9,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 1,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 90.0
}
위와 비슷한 결과가 나올 것이다.
그 중 눈여겨볼 점은 status가 yellow라는 점이다.
기본적으로 ES에서는 2개 이상의 노드로 구성을 해야한다.
그래야 앞서 살펴본 레플리카 샤드를 다른 노드에 배치할 수 있기 때문이다.
따라서, 노드를 하나 더 추가하면 status는 green으로 변한다.
(단순히 같은 머신에서 프로세스 하나 더 띄워도 된다)
GET /_cat/nodes/?v
위 명령어를 통해서는 현재 클러스터에 있는 노드의 상태를 확인할 수 있다.
마지막의 ?v는 REST API의 Query String으로 사람이 읽기 편한 형태로 출력해준다.
출력 결과는 아래와 같다.
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1 14 99 12 2.91 cdfhilmrstw * MacBook-Pro.local
현재 단일 노드 상태이기 때문에, 한 개의 노드가 표시된다.
master 노드가 무엇인지에 대해서는 추후에 알아보자.
GET /_cat/indices/?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .geoip_databases jomTjVsrR2qdZ1JM7Nww1w 1 0 42 7 43.1mb 43.1mb
green open .apm-custom-link pEN6TUV4R-GU2l8QAq8UOg 1 0 0 0 208b 208b
green open .kibana-event-log-7.15.2-000002 yhgI3G4PTlifL2PzggUhVQ 1 0 0 0 208b 208b
green open .kibana-event-log-7.15.2-000001 _QvSvFvsSBygWKNrsO5n6g 1 0 2 0 11.9kb 11.9kb
green open .apm-agent-configuration E1u9Y5uRQCGsl7aS39mcFQ 1 0 0 0 208b 208b
green open .kibana_7.15.2_001 A7YWF0mHRdeNDif4NS94lA 1 0 48 10 4.7mb 4.7mb
green open .kibana_task_manager_7.15.2_001 g-XGa7c4SxKfeusWyWNzJA 1 0 14 648 4.3mb 4.3mb
yellow open daum-news Xrh5yo2tSbKhQaAcXvfaWw 1 1 11479 0 4.6mb 4.6mb
green open .tasks mI64usOnQjucG0BbqxvGTQ 1 0 2 0 13.7kb 13.7kb
위의 인덱스 목록은, 내가 지난번 작업을 하며 만들었던 인덱스 리스트들이다.
ES를 처음 설치하고 키바나로 명령을 수행한다면, 몇가지 인덱스만 볼 수 있을 것이다.
.kibana_*
형태로 이루어진 인덱스는 키바나가 자체적으로 퍼시스턴스 데이터를 위해 생성한 인덱스들이다.
키바나에서 대시보드를 생성하고, 설정을 저장하기 위해 이용되는 인덱스이기 때문에, 대부분 직접 건드리지 않아도 된다.
이쯤되면 샤드의 상태를 확인하는 방법은 알 것이다.
GET /_cat/shards?v
index shard prirep state docs store ip node
.kibana-event-log-7.16.3-000001 0 p STARTED 127.0.0.1 MacPro.local
.geoip_databases 0 p STARTED 42 40.4mb 127.0.0.1 MacPro.local
.kibana_7.16.3_001 0 p STARTED 37 2.3mb 127.0.0.1 MacPro.local
.apm-agent-configuration 0 p STARTED 0 226b 127.0.0.1 MacPro.local
my_index 0 p STARTED 1 4.4kb 127.0.0.1 MacPro.local
my_index 0 r UNASSIGNED
.ds-ilm-history-5-2022.01.24-000001 0 p STARTED 127.0.0.1 MacPro.local
.kibana_task_manager_7.16.3_001 0 p STARTED 17 2.4mb 127.0.0.1 MacPro.local
.ds-.logs-deprecation.elasticsearch-default-2022.01.24-000001 0 p STARTED 127.0.0.1 MacPro.local
.apm-custom-link 0 p STARTED 0 226b 127.0.0.1 MacPro.local
기본적으로 샤드의 수는 1개이며, 만들때에 지정하여 만드는 편이 나중의 성능 하락 방지를 위해 유리하다.
샤드의 수는 ES 7.0버전 이상이라면, shrink, split API를 통해 조정이 가능하다.(조정 시에는 성능 하락이 발생할 수 있다)
shrink, split API의 자세한 내용은 아래 문서를 참조하자.
Shrink API document
Split API document