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