써먹는 웹개발

[Elasticsearch] 데이터를 추가하는 4가지 방법 본문

Study/Elasticsearch

[Elasticsearch] 데이터를 추가하는 4가지 방법

kmhan 2021. 5. 18. 16:33


728x90
반응형

Elasticsearch 관련하여 데이터를 추가하는 4가지 방법에 대해 써보려고 한다.

※ 추가적인 방법이나 각각의 장단점을 알고계신 분이 있다면 댓글 부탁드립니다.

 

0. 인덱스 추가 (인덱스라 인덱스명을 i_로 시작하게 지음)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PUT i_exam
{
  "mappings": {
   "_doc": {
      "properties": {
        "SEQ_NUM": {
          "type": "integer"
        },
        "EXAM_ID": {
          "type": "text"
        }
      }
    }
  },
  "settings": {
   "number_of_shards" : 3,
   "number_of_replicas" : 2
  }
}
cs

 

1. post

1
2
3
4
5
PUT cafe/coffee/2
{
  "title": "americano",
  "price": "1500"
}
cs

 

2. bulk api

 - json 파일에 추가해서 파일 실행도 가능

1
2
3
4
5
POST _bulk
{ "index" : { "_index" : "classes", "_type" : "class", "_id" : "1" } }
{"title" : "Machine Learning","Professor" : "Minsuk Heo","major" : "Computer Science","semester" : ["spring", "fall"],"student_count" : 100,"unit" : 3,"rating" : 5, "submit_date" : "2016-01-02", "school_location" : {"lat" : 36.00, "lon" : -120.00}}
{ "index" : { "_index" : "classes", "_type" : "class", "_id" : "2" } }
{"title" : "Network","Professor" : "Minsuk Heo","major" : "Computer Science","semester" : ["fall"],"student_count" : 50,"unit" : 3,"rating" : 4, "submit_date" : "2016-02-02", "school_location" : {"lat" : 36.00, "lon" : -120.00}}
cs

 

3. 엑셀의 csv -> Kibana 데이터 연동

 - 100mb 이하인 경우에 Kibana 메뉴에서 Machine Learning 클릭 -> Select an Index pattern에서 csv 파일을 올리면 스스로 field 분석까지 끝내고 인덱스 패턴까지 만들어준다.

 ※ 책 '나만의 데이터 분석 플랫폼 엘라스틱 서치'의 저자가 데이터를 10만건씩 5분 단위로 추가했다고 한다.

 

 

4. csv 파일을 logstash로 데이터 연동

 1) CSV 파일 예시

  ※ 파일명 bitcoin.csv

1
2
3
4
5
6
7
8
9
10
11
datetime,market-price
2019-05-04 00:00:00,5657.14
2019-05-05 00:00:00,5771.08
2019-05-06 00:00:00,5717.66
2019-05-07 00:00:00,5684.47
2019-05-08 00:00:00,5755.72
2019-05-09 00:00:00,5936.72
2019-05-10 00:00:00,6146.91
2019-05-11 00:00:00,6348.02
2019-05-12 00:00:00,7248.31
2019-05-13 00:00:00,6978.63
cs

 

 2) logstash 구성 파일 생성

  - 명령어 : vi /logstash-csv.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
input {
    file {
        path => "https://d1ny9casiyy5u5.cloudfront.net/downloads/bitcoin.csv"
        start_position => beginning
        sincedb_path => "/dev/null"
    }
}
filter {
    csv {
        columns => [
                "datetime",
                "market-price"
        ]
        separator => ","
        }
date {
        match => [ "datetime""yyyy-MM-dd HH:mm:ss"]
        timezone => "America/Sao_Paulo"
        target => ["@timestamp"]
}
mutate {convert => ["market-price", float]}
}
output {
    stdout
    {
        codec => rubydebug
    }
     elasticsearch {
        action => "index"
        hosts => ["192.168.100.9:9200"]
        index => "bitcoin"
    }
}
cs

3) Logstash 서비스를 중지하고 스타우징합니다.

 3-1) 중지

1
service logstash stop
cs

 

 3-2) 스타우징

1
/usr/share/logstash/bin/logstash -f /downloads/logstash-csv.conf
cs

4) 인덱스가 만들었는지 확인합니다.

 4-1) 명령어

1
curl -X GET "http://192.168.100.1:9200/_cat/indices?v"
cs

 4-2) 확인 결과

1
2
3
4
5
6
7
8
health status index                      uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .kibana_task_manager_1     arJs7udNRoymWLFxYTNB9A   1   0          2            1     37.9kb         37.9kb
green  open   ilm-history-1-000001       TNmMwUNqR_GgUXhcJBqOMA   1   0         18            0     25.4kb         25.4kb
green  open   .apm-agent-configuration   HpM_nF9FQpWnE2--1tsrFg   1   0          0            0       283b           283b
yellow open   logstash-2020.05.02-000001 0CPj2NgvRhWNX_xl-VZHfA   1   1    2246571            0    198.3mb        198.3mb
yellow open   accounts                   DOkqMmYSQhSRllfkfT842g   1   1          2            0     10.5kb         10.5kb
green  open   .kibana_1                  I8JqCPO_TRKAvqtpkb-ksQ   1   0         13            5     20.5kb         20.5kb
yellow open   bitcoin                    4fm3d-7pRNiPedKPJmqjPA   1   1         11            0      9.7kb          9.7kb
cs

 

5) 데이터를 확인합니다.

 5-1) 명령어

1
curl -X GET "http://192.168.100.1:9200/bitcoin/_mapping?pretty"
cs

 

 5-2) 확인 결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
{
  "bitcoin" : {
    "mappings" : {
      "properties" : {
        "@timestamp" : {
          "type" : "date"
        },
        "@version" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "datetime" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "host" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "market-price" : {
          "type" : "float"
        },
        "message" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "path" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "tags" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}
cs

 

 

 

 


4번 출처 : https://techexpert.tips/ko/elasticsearch-ko/%ED%83%84%EB%A0%A5%EC%A0%81-%EA%B2%80%EC%83%89-csv-%ED%8C%8C%EC%9D%BC-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0/

728x90
반응형


Comments