Cluster, Index

뚜잇·2021년 10월 10일
0

ELK stack

목록 보기
2/3

elastic 한국어 문서 https://www.elastic.co/guide/kr/index.html를 읽고 작성


  • ElasticSearch 설치

Elasticsearch 7.15 설치 가이드 (linux)
https://www.elastic.co/guide/en/elasticsearch/reference/current/targz.html

실습은 7.15 버전으로 진행

  • cluster 상태 확인

HTTP/REST 호출을 지원하는 어떤 툴도 사용 가능 (여기서는 curl 사용)

cluster 상태를 확인하기 위해 _cat API 사용

curl -XGET http://localhost:9200/_cat/health?v
epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1633840629 04:37:09  elasticsearch yellow          1         1      2   2    0    0        1             0                  -                 66.7%

cluster의 status는 green(cluster가 정상 작동중), yellow(cluster은 정상 작동중이지만 일부 replica가 배정되지 않음), red(일부 데이터 사용 불가) 중 하나로 표시

status가 red인 경우 아직 부분적으로 작동 중이지만 데이터가 계속 누락되는 상태


  • node 목록 확인

_cat API의 nodes로 cluster내 node 목록 확인

curl -XGET http://localhost:9200/_cat/nodes?v
ip        heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
127.0.0.1           26          95   0    0.00    0.00     0.00 cdfhilmrstw *      mastername

node의 이름이 mastername이며 cluster의 유일한 노드임을 확인


  • 모든 index 나열

_cat API의 indices로 모든 index 확인 가능

curl -XGET http://localhost:9200/_cat/indices?v
health status index            uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .geoip_databases 5bDnwbNMTRGA6OdRftwUfw   1   0         41           41     40.1mb         40.1mb
yellow open   classes          RpMiZlEDQlOXV-fmnhSg7w   1   1          0            0       208b           208b

2개의 index가 생성되어 있음을 확인


  • index 생성

PUT을 사용해 index 생성, _cat API의 indices로 index 확인

curl -XPUT http://localhost:9200/customer?pretty
curl -XGET http://localhost:9200/_cat/indices?v

PUT을 사용해 'customer'라는 index 생성, 끝에 ?pretty 추가하여 JSON 응답의 prerry-print를 수행

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "customer"
}

health status index            uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .geoip_databases 5bDnwbNMTRGA6OdRftwUfw   1   0         41           41     40.1mb         40.1mb
yellow open   classes          RpMiZlEDQlOXV-fmnhSg7w   1   1          0            0       208b           208b
yellow open   customer         SBxddo1RS3uITMmILhzd8g   1   1          0            0       208b           208b

'customer' index는 0개의 문서가 포함, status는 yellow(일부 replica가 배정되지 않음)인 것을 확인할 수 있음

Elasticsearch에서 기본적으로 'customer' index에 replica 1개를 생성했으므로 status는 yellow, 나중에 다른 node가 cluster에 포함되면 배정되어 status green으로 바뀜


-document indexing 및 querry

put을 사용해 'customer' inex에 document를 indexing

curl -XPUT http://localhost:9200/customer/external/1?pretty -d '{ "name" : "John Doe" }' -H 'Content-Type:
application/json'
{
  "_index" : "customer",
  "_type" : "external",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

Elasticsearch 6.0 이후 버전부터 도입된 엄격한 content-type 확인으로 인해 -H 'Content-Type: application/json' 옵션을 주지 않으면 다음의 오류 발생

{
  "error" : "Content-Type header [application/x-www-form-urlencoded] is not supported",
  "status" : 406
}

https://abc2080.tistory.com/entry/%EC%97%90%EB%9F%AC-ContentType-header-applicationxwwwformurlencoded-is-not-supported

만약, indexing 예제 실행 시 'customer' index가 없는 경우, 'customer' index가 자동 생성됨

GET으로 방금 indexing한 document를 검색

curl -XGET http://localhost:9200/customer/external/1?pretty
{
  "_index" : "customer",
  "_type" : "external",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "John Doe"
  }
}

"found" : true는 요청된 ID 1에 해당하는 document를 찾았다는 뜻

"_source"는 indexing한 전체 JSON 문서를 반환


  • index 삭제

모든 index 검색

curl -XGET http://localhost:9200/_cat/indices?v
health status index            uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .geoip_databases 5bDnwbNMTRGA6OdRftwUfw   1   0         41           41     40.1mb         40.1mb
yellow open   classes          RpMiZlEDQlOXV-fmnhSg7w   1   1          0            0       208b           208b
yellow open   customer         SBxddo1RS3uITMmILhzd8g   1   1          1            0      3.8kb          3.8kb

index 삭제 (classes, customer)

curl -XDELETE http://localhost:9200/customer?pretty
curl -XDELETE http://localhost:9200/classes?pretty
{
  "acknowledged" : true
}

"acknowledged"로 삭제 확인

삭제 후 curl -XGET http://localhost:9200/_cat/indices?v로 삭제 확인

health status index            uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .geoip_databases 5bDnwbNMTRGA6OdRftwUfw   1   0         41           41     40.1mb         40.1mb

  • Elasticsearch에서 데이터에 접근하는 방식
curl -X<REST Verb> http://localhost:9200/<Index>/<Type>/<ID>

이 REST 접근 패턴은 모든 API 명령에서 사용됨

profile
공부한 것들

0개의 댓글