반응형

 

해당 글은 Python과  Elasticsearch를 연동함에 있어서 나중에 참고를 목적으로 쓴 글입니다.

 

 

  아래 class Elastic() 구현된 기능

1. Elasticsearch 접속 : connect()

2. Index 크기 검색 : count_index_size()

3. 전체 문서 검색 : search_all_docs()

4. 특정 id에 대한 문서 검색 : search_doc_by_risk_id()

 

# Elasticsearch 관련 모듈 import
from elasticsearch import Elasticsearch


class Elastic:
    # Elastic Search 클래스 선언
    def __init__(self, host, id, pw):
        self.host = host
        self.id = id
        self.pw = pw


    def connect(self):
        # connect to elasticsearch
        es = Elasticsearch(self.host, basic_auth=(self.id, self.pw), verify_certs=False, ssl_show_warn=False)
        if not es.ping():
            raise ValueError("ES Connection failed")
        print('ElasticSearch 연결 완료')
        return es


    def count_index_size(self, es, index_name):
        # count index size
        count = es.count(index=index_name)
        index_size = count.body['count']
        return index_size


    def search_all_docs(self, es, index_name):
        # index에 저장된 모든 docs 검색
        index_size = self.count_index_size(es, index_name)
        search_query = {
            # 모든 docs 검색 및 riskid 기준 내림차순 정렬
            "sort": [
                {
                    "riskid": {
                        "order": "desc"
                    }
                }
            ],
            "size": index_size,
            "query": {
                "match_all": {}
            }
        }

        search_result = es.search(index=index_name, body=search_query)

        return search_result["hits"]["hits"]


    def search_doc_by_risk_id(self, es, index_name, risk_id):
        # index에 저장된 특정id doc 검색
        search_query = {
            "query": {
                "match": {
                    "riskid": risk_id
                }
            }
        }
        search_result = es.search(index=index_name, body=search_query)

        return search_result["hits"]["hits"]


if __name__ == "__main__":

    # 1. Connect ElasticSearch
    elastic = Elastic("https://localhost:9200", "elastic", "elastic_pw")
    es = elastic.connect()

    index_name = "test_index"

    # test_index 내에 있는 모든 문서 검색
    all_docs_list = elastic.search_all_docs(es, index_name)

    # test_index 내에 risk_id 가 12345인 문서 검색
    risk_id = 12345
    doc = elastic.search_doc_by_risk_id(es, index_name, risk_id)

 

 

caul334@gmail.com

내용이 유용하셨다면 좋아요&댓글 부탁드립니다.
이 블로그를 이끌어갈 수 있는 강력한 힘입니다!

반응형
반응형

Part 3에서는 Kibana와 Elastic을 연동하고 Dev Tool을 통해 Index를 생성하는 내용에 대해 다루겠습니다.

Ubuntu에 XRDP로 접속하여 kibana (5601/tcp)에 접근하니 아래와 같은 화면이 뜹니다.

 

  Step1. Enrollment Token 생성 및 입력

 

우선적으로 Enroolment Token을 발행해야 합니다. Ubuntu(Linux) 명령어로 아래와 같이 입력합니다.

*실행 경로가 다르신 분은 find 명령어로 elasticsearch-create-enrollment-token 프로그램의 위치를 찾으면 됩니다.

1
sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana --url "https://<내부IP>:9200"
cs

 

그러면 긴 문자열의 Token이 발행되는데 그것을 위 화면에 붙여넣고 Confiture Elastic을 클릭합니다.

 

 

  Step2. Verification required 생성 및 입력

 

아래와 같이 인증코드 6자리를 입력하라는 화면이 나오면 아래 명령어를 입력합니다.

1
sudo /usr/share/kibana/bin/kibana-verification-code
cs

인증번호가 출력되면 인증번호를 입력합니다.

 

 

  Step3. ElasitcSearch 로그인

 

드디어 마지막 단계입니다.

ElasticSearch 계정으로 로그인을 하면됩니다. 혹시 PW가 기억나지 않으시는분들은 password reset이 필요합니다.

그 방법은 https://betterinvesting.tistory.com/315 링크를 참고하시면 됩니다.

 

  Step4. Index 생성

 

로그인까지 완료했으면 DashBoard가 보이실텐데 그곳에서 Management > Dev Tools로 들어가줍니다.

 

가장 첫줄로 GET /_cat/indices?v 를 입력하여 모든 Index를 출력해줍니다.

ElasticSearch에서 Index는 Database에서 DB이름과 같은 개념입니다.

이번에는 customer 이름의 index를 생성해보도록 하겠습니다. 명령어는 아랫줄과 같습니다.

PUT /customer

이후 다시 GET /_cat/indices?v 명령어로 모든 Index를 출력하여 보면 customer index가 생성되었음을 확인 가능합니다.

 

 

내용이 유용하셨다면 좋아요&댓글 부탁드립니다.
이 블로그를 이끌어갈 수 있는 강력한 힘입니다!

caul334@gmail.com

반응형

'IT > ELK' 카테고리의 다른 글

[ELK] 간단한 ELK 설치 환경 구축 방법 (Part 2)  (1229) 2023.05.14
[ELK] 간단한 ELK 설치 환경 구축 방법 (Part 1)  (1235) 2023.05.12

+ Recent posts