본문 바로가기

빅데이터/Elasticsearch

Python으로 elasticsearch에 document 넣기 예제 및 결과물

개요

Elasticsearch과 kibana를 통해 document를 저장하고 시각화 할 수 있다. Elasticsearch에 document를 넣기 위해 여러 언어를 사용할 수 있지만 python을 사용하면 한결 간단한 코드로 작성이 가능하다.

Elasticsearch Client List는 아래와 같다. 
- Java REST Client [7.3]
- Java API [7.3]
- JavaScript API [7.x]
- Ruby API [7.x]
- Go API .NET API [7.x]
- PHP API [7.0]
- Perl API
- Python API
- Community Contributed Clients
출처 > https://www.elastic.co/guide/en/elasticsearch/client/index.html

시작하기 전에

아래 예제는 python을 사용하여 elasticsearch에 document를 넣고 kibana로 index를 만들어 조회하는 코드이다.

준비물은 아래와 같다.

  • Kibana 6.x 이상
  • Elasticsearch 6.x 이상
  • python 2.7
  • Elasticsearch python module(pip install elasticsearch)

코드

elasticsearch(localhost:9200)의 'python2elasticsearch' index에 doctype 'log' 이름으로 document를 넣는 코드이다.

import time
from elasticsearch import Elasticsearch
import datetime


def utc_time():  # @timestamp timezone을 utc로 설정하여 kibana로 index 생성시 참조
    return datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'


try:
    es = Elasticsearch('localhost:9200')
    count = 0
    while 1:
        doc = {"count": count,
               "@timestamp": utc_time()}

        res = es.index(index='python2elasticsearch', doc_type="log", body=doc)
        print(doc)
        print(res)
        count = count + 1
        time.sleep(5)
except KeyboardInterrupt:
    pass
Elasticsearch에 timefilter로 걸고 싶은 field에 날짜 시간을 넣고싶을때 반드시 utc time으로 넣어야한다!

실행방법

python main.py

결과물

Python 로그

in ~/Desktop
$ python main.py
{'count': 0, '@timestamp': '2019-08-07T03:12:06.347Z'}
{u'_type': u'log', u'_seq_no': 0, u'_shards': {u'successful': 1, u'failed': 0, u'total': 2}, u'_index': u'python2es-20190807', u'_version': 1, u'_primary_term': 1, u'result': u'created', u'_id': u'VjQPamwBme5IBDFz9c0k'}
{'count': 1, '@timestamp': '2019-08-07T03:12:11.561Z'}
{u'_type': u'log', u'_seq_no': 0, u'_shards': {u'successful': 1, u'failed': 0, u'total': 2}, u'_index': u'python2es-20190807', u'_version': 1, u'_primary_term': 1, u'result': u'created', u'_id': u'VzQQamwBme5IBDFzCc0r'}
{'count': 2, '@timestamp': '2019-08-07T03:12:16.576Z'}
{u'_type': u'log', u'_seq_no': 0, u'_shards': {u'successful': 1, u'failed': 0, u'total': 2}, u'_index': u'python2es-20190807', u'_version': 1, u'_primary_term': 1, u'result': u'created', u'_id': u'WDQQamwBme5IBDFzHM3C'}
{'count': 3, '@timestamp': '2019-08-07T03:12:21.585Z'}

Elasticsearch 데이터 조회

http://localhost:9200/python2elasticsearch/log/_search

Kibana Index pattern 생성

python에서 보낸 index기준으로 index pattern을 생성한다.
python에서 @timestamp field에 utc time을 넣었으므로 time filter을 추가할 수 있다.

Kibana 조회

kibana에서 python으로 추가한 document 조회

정상적으로 kibana에서 데이터가 조회됨을 확인할 수 있다.