Elasticsearch의 검색 엔진을 이용하여 데이터를 CURL 하는 다양한 방법에 대해 정리해 보겠습니다.
ES에 생성되어 있는 모든 index를 출력해 보겠습니다.
curl -XGET 'localhost:9200/_cat/indices?pretty&v'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open logstash 961W116OTqeuihFKVsbfVw 1 1 51 0 122.5kb 122.5kb
green open .kibana_task_manager_1 3_qkg0zPQoKZ-Q_vT9HPDQ 1 0 2 0 32.6kb 32.6kb
green open .apm-agent-configuration KVDr8cy2Th6xm8y5nWH5Kw 1 0 0 0 283b 283b
green open .kibana_1 7NwZy05jTNCinTw3TxaTeA 1 0 1062 62 536.1kb 536.1kb
green, yellow의 상태에 대해서는 링크를 참조해 보시길 바랍니다.
INDEX 생성
우선 간단하게 테스트용 index를 생성해 보도록 하겠습니다.
index의 이름은 test10으로 만들어 보겠습니다.
[root@localhost itsme]# curl -XPUT localhost:9200/test10?pretty
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "test10"
}
[root@localhost itsme]# curl -XGET localhost:9200/_cat/indices?pretty
yellow open logstash 961W116OTqeuihFKVsbfVw 1 1 51 0 122.5kb 122.5kb
green open .kibana_task_manager_1 3_qkg0zPQoKZ-Q_vT9HPDQ 1 0 2 0 32.6kb 32.6kb
yellow open test10 GftKkuJzRF6A49qT_8w9iw 1 1 0 0 230b 230b
green open .apm-agent-configuration KVDr8cy2Th6xm8y5nWH5Kw 1 0 0 0 283b 283b
green open .kibana_1 7NwZy05jTNCinTw3TxaTeA 1 0 1062 62 536.1kb 536.1kb
PUT 메서드를 이용해서 test10 index를 생성해 보았습니다.
모든 index를 출력해보면 test10이 생성된 것을 확인할 수 있습니다.
Document 추가
이번에는 생성한 index에 document를 추가해 보도록 하겠습니다.
document를 추가할 때는 POST 메서드를 사용하고 데이터를 body에 담아서 전달하게 됩니다.
curl의 -d옵션을 이용해서 데이터를 추가하면 됩니다.
헤더에는 json타입임을 명시하면 됩니다.
curl -XPOST localhost:9200/test10/info/1?pretty -d'{"name":"apple"}' -H 'Content-Type: application/json'
{
"_index" : "test10",
"_type" : "info",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
curl -XPOST 'localhost:9200/test10/info/2/?pretty' -d '{"name":"kiwi", "color":"green"}' -H 'Content-Type: application/json'
{
"_index" : "test10",
"_type" : "info",
"_id" : "2",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1
}
test10 index의 info type에 id:1로 데이터가 생성된 것을 확인할 수 있습니다.
아래와 같이 id값을 지정하지 않으면 임의의 문자열로 id값을 자동으로 할당합니다.
curl -XPOST localhost:9200/test10/info/?pretty -d'{"name":"banana"}' -H 'Content-Type: application/json'
{
"_index" : "test10",
"_type" : "info",
"_id" : "BO4_vW8B8vrcA1Y8ZBCd",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
id값에 'BO4_vW8B8vrcA1Y8ZBCd' 값이 자동으로 할당된 것을 확인할 수 있습니다.
Document 조회
이번에는 위에서 추가한 document를 조회해 보도록 하겠습니다.
먼저 모든 index의 document를 조회해 보도록 하겠습니다.
기존의 등록된 데이터의 양이 있어 조회 결과는 생략하겠습니다.
curl -XGET localhost:9200/_all/_search?pretty
이번엔 test10 index의 모든 document를 조회해 보도록 하겠습니다.
위에서 등록한 apple, banana를 찾을 수 있습니다.
curl -XGET localhost:9200/test10/_search?pretty
{
"took" : 295,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "test10",
"_type" : "info",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"name" : "apple"
}
},
{
"_index" : "test10",
"_type" : "info",
"_id" : "BO4_vW8B8vrcA1Y8ZBCd",
"_score" : 1.0,
"_source" : {
"name" : "banana"
}
},
{
"_index" : "test10",
"_type" : "info",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"name" : "kiwi",
"color" : "green"
}
}
]
}
}
이번엔 id를 이용하여 조회해 보겠습니다.
banana를 등록할 때 임의로 생선 된 id인 'BO4_vW8B8vrcA1Y8ZBCd'를 이용하여 조회하도록 해보겠습니다.
_source 프로버티에 등록한 데이터가 있습니다.
curl -XGET localhost:9200/test10/info/BO4_vW8B8vrcA1Y8ZBCd?pretty
{
"_index" : "test10",
"_type" : "info",
"_id" : "BO4_vW8B8vrcA1Y8ZBCd",
"_version" : 1,
"_seq_no" : 1,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "banana"
}
}
위에 방식으로 조회하면 불필요한 항목까지 조회가 됩니다.
filter_path를 이용하여 필요로 하는 _source의 값만 조회해보도록 하겠습니다.
curl -XGET 'localhost:9200/test10/info/2?pretty&filter_path=_source'
{
"_source" : {
"name" : "kiwi",
"color" : "green"
}
}
curl -XGET 'localhost:9200/test10/info/2?pretty&filter_path=_source.color'
{
"_source" : {
"color" : "green"
}
}
Document 수정
등록 조회를 해보았으니 이번엔 document를 수정해 보겠습니다.
수정은 PUT 메서드를 이용합니다.
curl -XPUT 'localhost:9200/test10/info/1?pretty' -d '{"name":"apple","color":"red"}' -H 'Content-Type:application/json'
{
"_index" : "test10",
"_type" : "info",
"_id" : "1",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 3,
"_primary_term" : 1
}
curl -XGET 'localhost:9200/test10/info/1?pretty'
{
"_index" : "test10",
"_type" : "info",
"_id" : "1",
"_version" : 2,
"_seq_no" : 3,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "apple",
"color" : "red"
}
}
1번 id를 가진 apple에 color를 추가해 보았습니다.
응답 결과로 _version이 2로 변경된 것을 확인할 수 있습니다.
Document 삭제
이번엔 마지막으로 document를 삭제해 보도록 하겠습니다.
예상하셨겠지만 DELETE 메서드를 사용하여 document를 삭제할 수 있습니다.
curl -XDELETE 'localhost:9200/test10/info/2?pretty'
{
"_index" : "test10",
"_type" : "info",
"_id" : "2",
"_version" : 2,
"result" : "deleted",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 4,
"_primary_term" : 1
}
curl -XGET 'localhost:9200/test10/info/2?pretty'
{
"_index" : "test10",
"_type" : "info",
"_id" : "2",
"found" : false
}
Index 삭제
index와 type도 삭제해 봐야겠죠? 라고 작성하려고 했는데 type는 삭제가 안되더라구요.
2.0 버전부터는 type를 삭제할 때 query를 이용해야 하는 것 같습니다.
test10 index를 삭제해 보겠습니다.
test10을 조회해보니 아래와 같이 not_found와 함께 404 status를 확인할 수 있었습니다.
curl -XDELETE 'localhost:9200/test10?pretty'
{
"acknowledged" : true
}
curl -XGET 'localhost:9200/test10?pretty'
{
"error" : {
"root_cause" : [
{
"type" : "index_not_found_exception",
"reason" : "no such index [test10]",
"resource.type" : "index_or_alias",
"resource.id" : "test10",
"index_uuid" : "_na_",
"index" : "test10"
}
],
"type" : "index_not_found_exception",
"reason" : "no such index [test10]",
"resource.type" : "index_or_alias",
"resource.id" : "test10",
"index_uuid" : "_na_",
"index" : "test10"
},
"status" : 404
}
'infra > ELK' 카테고리의 다른 글
[ELK] Elasticsearch의 데이터 검색 - Query DSL (0) | 2020.01.19 |
---|---|
[ELK] Elasticsearch의 데이터 검색 - search API (0) | 2020.01.19 |
[ELK] ELK Stack을 구축해 보자 - 로그 파일 수집하기 (0) | 2019.12.28 |
[ELK] ELK Stack을 구축해 보자 - Nginx 로그 수집하기 (0) | 2019.12.26 |
[ELK] ELK Stack을 구축해 보자 - Beats (0) | 2019.12.23 |
댓글