Software/Elasticsearch

Elasticsearch 사용해 보기

juhpark 2022. 5. 7. 21:37

kibana의 개발 툴을 사용하여 쿼리를 실행해 볼수 있다. 물론 curl을 사용하여 elasticsearch로 직접 요청을 할 수도 있지만 편리한 학습을 위해 kibana에서 제공하는 방법을 사용하여 설명하고자 한다. docker를 사용한 elasticsearch 와 kibana 서버 구성은 다음의 링크의 설명에서 보고 설치하고 환경구성을 한다.

 

6.도커(Docker) - Elasticsearch, Kibana 구성하기

elasticsearch, kibana를 설치한 이미지를 내려받기만 하면 관련 서버를 손쉽게 구성할 수 있다. docker network create elastic docker pull docker.elastic.co/elasticsearch/elasticsearch:8.1.3 docker run --..

juhpark.tistory.com

 

elasticsearch, kibana 구성이 완료 되었으면 kibana 화면을 웹브라우져에서 오픈한다. 접속 주소는 http://localhost:5601/ 이다.

먼저 로그인을 한다. 패스워드는 처음 설치할 때의 패스워드를 기억하고 있어야 한다. 만일 잊어버린 경우 다음과 같이 패스워드를 초기화 할수 있다.

docker exec -it es-node01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

 

로그인을 하고 나면, 먼저 샘플데이터를 올려서 테스트를 해 볼수 있다. 아래 화면의 Try Sample data 메뉴를 클릭한다.

 

아래에 보이는 Add data버튼을 클릭하여 3개의 샘플데이터를 모두 등록한다.

 

상단의  두번째줄의 첫번째 아이콘[햄버거 버튼]을 클릭하면 왼쪽에 메뉴리스트가 조회되고 Management항목에 Dev Tools 를 클릭하면 elasticsearch 쿼리를 사용하여 데이터 내용을 조회해 볼수 있다.

 

아래와 같은 창이 열리고 왼쪽 창에는 쿼리를 입력할 수 있고, 오른쪽 창에는 실행된 결과를 볼수 있다. Elasticsearch 의  쿼리와 결과는 JSON형태의 데이터로 처리 된다. 왼쪽 창에 쿼리를 입력하고 삼각형 버튼을 클릭하여 실행을 하거나 Contro+Enter 키를 클릭하여 실행이 가능하다. 

History링크를 클릭하면 과거에 실행했던 쿼리 목록을 볼수 있고, 오른쪽에는 실행결과와 실행시간을 보여준다. 역시나 빠른 응답속도를 확인할 수 있다. 

 

1. 클러스터(cluster) 상태 조회

클러스터의 상태를 조회하는 명령어이다. 클러스터의 상태와 노드갯수 등등 다양한 정보를 조회할 수 있다. 

# 조회명령
GET _cat/health?v   # v옵션을 입력하는 경우 제목이 같이 표시된다.

# 결과
epoch      timestamp cluster        status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1651926239 12:23:59  docker-cluster green           1         1     16  16    0    0        1             0                  -                 94.1%

 

 

2. 인덱스(indices) 상태 조회

Elasticsearch의 데이터의 묶음, RDBMS의 경우 테이블에 해당하는 것이 인덱스(indices)라고 불리우는데, 다음과 같이 조회한다. 조회된 결과를 보면 위에서 추가한 샘플데이터 3개가 잘 등록되어져 있는 것을 볼수 있다. 각 indices의 상태, 사이즈 등을 확인 할수 있다.

# 조회명령
GET _cat/indices?v

# 결과
health status index                                     uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   kibana_sample_data_ecommerce              SelvO6UnTTOu9V2MOIZGRA   1   0       4675            0      4.1mb          4.1mb
green  open   kibana_sample_data_logs                   mFnZBfRVQ7y_KW9EzkUoRg   1   0      14074            0      7.5mb          7.5mb
green  open   kibana_sample_data_flights                bNlmwK4xRu64rgnCVw0CXQ   1   0      13059            0      5.8mb          5.8mb

 

3. 인덱스(indices) 등록과 삭제

# 인덱스생성
PUT test_index

# 실행결과
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "test_index"
}

# 인덱스 삭제
DELETE test_index

# 실행결과
{
  "acknowledged" : true
}

 

4. 샘플데이터 조회해 보기

인덱스 구조를 다음과 같이 조회를 할수 있는데 문서들이 저장되는 형식을 지정한다고 보면 된다. 각 필드의 타입 등등 구조를 조회해 볼수 있다.

# 인덱스구조 조회하기
GET kibana_sample_data_logs

# 실행결과
{
  "kibana_sample_data_logs" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "@timestamp" : {
          "type" : "alias",
          "path" : "timestamp"
        },

        ... 중략 ...

        "utc_time" : {
          "type" : "date"
        }
      }
    },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "1",
        "auto_expand_replicas" : "0-1",
        "provided_name" : "kibana_sample_data_logs",
        "creation_date" : "1651925004586",
        "number_of_replicas" : "0",
        "uuid" : "mFnZBfRVQ7y_KW9EzkUoRg",
        "version" : {
          "created" : "8010399"
        }
      }
    }
  }
}

 

5. 데이터 내용 조회해 보기

인덱스 상관없이 전체 문서를 검색할 경우, 인덱스를 표시하지 않고 그냥 _search 구분을 사용하여 조회하면 전체 문서가 아래와 같이 조회된다. 결과에는 took: 실행에 걸린시간, shards 정보를 보여주고, hits 는 실제 검색된 문서가 배열로 포함되어 있다. default로는 10개의 데이터만 먼저 보여주기 때문에 정말 빠르게 검색결과를 확인 할 수 있다. 아래 1은 밀리세컨드 단위이니 정말 빠르다.

# 전체 검색하기 - 모든 인덱스(indices)의 문서를 나열한다.
GET _search
{
  "query": {
    "match_all": {}
  }
}

# 결과
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 4,
    "successful" : 4,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 10000,
      "relation" : "gte"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : ".ds-logs-my_app-default-2022.05.06-000001",
        "_id" : "Ks9DmYABp_DGFCAy9hN7",
        "_score" : 1.0,
        "_source" : {
          "@timestamp" : "2099-05-06T16:21:15.000Z",
          "event" : {
            "original" : """192.0.2.42 - - [06/May/2099:16:21:15 +0000] "GET /images/bg.jpg HTTP/1.0" 200 24736"""
          }
        }
      },
      {
        "_index" : "kibana_sample_data_ecommerce",
        "_id" : "GuNnnoABhLECi67BGAKf",
        "_score" : 1.0,
        "_source" : {
          "category" : [
            "Men's Clothing"
          ],
          "currency" : "EUR",
          "customer_first_name" : "Eddie",
          "customer_full_name" : "Eddie Underwood",
          ''' 후략 '''

 

특정 인덱스의 문서를 조회하기

# 특정 인덱스의 문서 전제 조회하기
GET {index}/_search
{
  "query": {
    "match_all": {}
  }
}

# 특정 인덱스의 특정 ID 문서 조회하기
GET {index}/_doc/{_id 값}

# 특정 인덱스의 특정 ID 문서의 내용만 조회하기
GET {index}/_search/{_id 값}

# HEAD 명령을 사용하면 문서가 존재하는지 여부를 확인할 수 있다. 결과로 200-OK이면 검색 성공
HEAD {index}/_doc/{_id 값}
HEAD {index}/_search/{_id 값}

# 위 {index}에 kibana_sample_data_logs 인덱스를 입력하여 테스트 해볼 수 있다.