반응형



elasticsearch

 

 

엘라스틱서치를 Python으로 연동하면서 사용하고 있는데 갑자기 아래와 같은 에러가 발생하였다.

에러 메시지 화면

 

에러 메시지 내용

elasticsearch.BadRequestError: BadRequestError(400, 'search_phase_execution_exception', 'Result window is too large, from + size must be less than or equal to: [10000] but was [10005].

 

에러 원인

에러의 원인은 요청한 Index에 결과가 1만건 이상이기 때문에 발생한 것으로써 index.max_result_window 임계치를 넘어갔기 때문에 발생한 것이다. max_result_window의 기본 설정은 1만건이다.

 

 

  임시 해결 조치 방법

시간이 없을 때 일단 빠르게 해결 할 수 있는 방법은 문제가 발생한 Index에 대해 windows size를 늘리는 것이다.

기본 설정 값인 10000건에서 그 이상으로 늘리면 된다. 참고로 아래는 5만건으로 늘려 주었다

아래 코드는 Kibana > Dev Tools에서 실행 가능한 코드

PUT /<your index name>/_settings
{
  "max_result_window" : 50000
}

 

 

  영구 해결 방법

영구 해결 방법으로 가장 좋은 방법은 Scroll API를 사용하는 것 입니다.

Scroll API는 대량의 데이터를 효율적으로 검색할 때 사용하면 좋습니다.

# 검색할 인덱스와 쿼리 정의
index_name = "your_index_name"
query = {
    "query": {
        "match_all": {}  # 모든 문서를 검색하는 쿼리
    }
}

# Scroll 초기화
scroll_timeout = "2m"  # Scroll 세션 유지 시간
batch_size = 1000      # 한 번에 가져올 문서 수

# 첫 번째 Scroll 요청
response = es.search(index=index_name, body=query, scroll=scroll_timeout, size=batch_size)

 

 

이 글을 통해 문제가 해결 되셨기를 바랍니다^^

 

caul334@gmail.com

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

 

반응형
반응형

 

해당 글은 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

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

반응형
반응형

 

ElasticSearch를 설치 후 Logstash를 설치하기위해

공식 홈페이지에 나온 명령어를 그대로 따라하면 오류가 납니다...

Logstash 공식 홈페이지

https://www.elastic.co/guide/en/logstash/current/installing-logstash.html

 

Installing Logstash | Logstash Reference [8.15] | Elastic

Use the echo method described above to add the Logstash repository. Do not use add-apt-repository as it will add a deb-src entry as well, but we do not provide a source package. If you have added the deb-src entry, you will see an error like the following:

www.elastic.co

 

Elasticsearch를 설치 후 logstash를 apt로 설치하시는 분들은 무조건 아래와 같은 오류를 만나게 됩니다.

 

[오류 내용]

E: Conflicting values set for option Signed-By regarding source https://artifacts.elastic.co/packages/8.x/apt/ stable: /usr/share/keyrings/elasticsearch-keyring.gpg != /usr/share/keyrings/elastic-keyring.gpg

 

오류가 나는 원인은 Elasticsearch & Kibana 설치와 Logstatsh 설치는

서로 다른 GPG Key 파일을 사용하기 때문에 GPG Key 파일이 충돌되기 때문입니다.

/etc/apt/sources.list.d/ 하위에 elastic-8.x.list 파일을 확인해보면 아래와 같이 두 줄이 확인됩니다.

 

이 중에서 아래와 같이 elastic-keyring.gpg 내용이 있는 줄만 남기고 나머지는 삭제해야 합니다.

 

이후 다시 Logstash를 설치하게 되면 설치를 완료할 수 있습니다.

 

 

caul334@gmail.com

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

반응형
반응형

 

Elastic Search를 설치하고 netstat로 확인까지 하지 9200 포트가 열려있는 것을 확인했습니다.

하지만 막상 접속을 하려니 다음과 같이 접속이 불가능했습니다.

정상이라면 Elastic Search의 로그인 창이 떠야하는데...

 

해결책

위 문제는 주소창에 엉뚱한 프로토콜을 입력했기 때문이였습니다ㅠㅠ

엘라스틱서치 최신 버전은 주소를 입력할 때 http가 아닌 https를 입력해야 합니다.

저는 최신버전 8.15버전을 설치하다보니 TLS가 적용되어 있다는 영어 문구를 놓쳤더라구요.. 이놈의 영어 실력

올바른 주소 입력

 

 

위 문제의 경우 때문에 TCPdump로 네트워크 트래픽을 확인해보신 분들은 다음과 같은 특징을 발견하셨을 겁니다.

처음에  Syn, Syn+Ack, Ack 으로 3-way 핸드쉐이킹을 잘 맺자마자

곧바로 Fin Fin+Ack과 같이 연결이 끊어지는 특징이 있습니다.

 

 

 

결론적으로 이후 https를 입력하면 로그인 팝업창이 뜨는데

엘라스틱서치를 설치하게 되면 처음에 나오는 비밀번호를 잘 저장해놨다가 입력하시면 됩니다^^

 

 

기본 디폴트 id인 elastic과 설치 시 출력된 비밀번호를 입력하게 되면 아래 사진과 같이

최신버전도 잘 접속이 되는 것을 확인할 수 있습니다.

 

 

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
반응형

Part1에서는 설치를 완료하고 프로세스와 포트오픈되는 것까지 확인하였습니다.

구체적인 설치 방법이 궁금하신 분은 아래 글을 먼저 참고하시고 오세요~!

https://betterinvesting.tistory.com/314

 

[ELK] 간단한 ELK 설치 환경 구축 방법 (Part 1)

ELK란 ElasticSearch + Logstash + Kibana 의 첫 글자 조합으로 Elastic stack, ELK stack으로도 불립니다. 각각의 역할로는 ElasticSearch는 분석 및 검색, Logstash는 로그 수집, Kibana는 분석 결과 시각화를 담당합니다.

betterinvesting.tistory.com

 

이번 글인 ELK 설치 환경 구축 방법 Part2에서는 패스워드 설정과 UI 확인하는 법을 공유드리겠습니다.

설치 완료 후 서비스를 실행하여 아래 링크로 접속하여 접속이 잘 되는지 확인해 보았습니다.

https://<IP주소>:9200 그러니 아래와 같은 화면이 뜨면서 인증 정보를 입력하하는 화면을 맞닥드리게 됩니다.

하지만 저는 ELK Stack을 설치하면서 ID/PW를 설정한 적이 없는데.....

 

 

확인을 해보니 Elastic Search 6.x 버전 이후 부터는 ID/PW를 별도의 프로그램으로 따로 설정해 줘야 합니다.

설정하는 방법은 아래와 같이 /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive 명령어를 입력하면 됩니다. elasticsearch-setup-passwords 프로그램의 정확한 위치는 아래 명령어를 통해 찾을 수 있습니다.

sudo find / -name "elasticsearch-setup-passwords"

하지만 저는 이미 설정이 되어 있는지 실패 메시지가 뜨면서 password를 reset 하라는 메시지가 나오더라구요.

 

 

안내와 같이 elasticsearch-reset-password 파일을 실행하면서 -u 옵션과 사용자이름(elastic)을 같이 인자로 전달합니다.

그러면 아래와 같이 성공 메시지가 뜨면서 패스워드가 성공적으로 초기화 됩니다.

 

초기화된 패스워드를 아까와 같이 로그인 창에  넣어주면 성공적으로 로그인 할 수 있습니다.

인증정보 : elastic / <초기화패스워드>

ELK 로그인 화면

 

 

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

caul334@gmail.com

반응형

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

[ELK] 간단한 ELK 설치 환경 구축 방법 (Part 3)  (1232) 2023.05.15
[ELK] 간단한 ELK 설치 환경 구축 방법 (Part 1)  (1235) 2023.05.12
반응형

ELK란 ElasticSearch + Logstash + Kibana 의 첫 글자 조합으로 Elastic stack, ELK stack으로도 불립니다.

각각의 역할로는 ElasticSearch는 분석 및 검색, Logstash는 로그 수집, Kibana는 분석 결과 시각화를 담당합니다.

 

ELK를 간단하게 설치하는 방법에 대해 공유드리겠습니다.

 

1. VM 환경 구축 (VMware, Virtual Box, Cloud 등)

OS는 Ubuntu를 추천드리며 테스트 환경 스펙은 원활환 환경을 위해서 vCPU 4개, Memory 8 GB, SSD 100 GB 스펙으로 구축하였습니다.

VM환경은 NHN Cloud를 이용하였습니다. (VMware, Virtual Box, AWS, Azure, NCP 모두 상관 없음)

 

인스턴스 생성
VM환경 접속 사진

 

 

 

2. 패키지(.deb) 업데이트 및 설치 파일 다운로드

ELK Stack을 다운받을 수 있는 다운로드 페이지로 이동합니다.

https://www.elastic.co/kr/downloads/

 

Elastic 제품 다운로드

Elasticsearch, Logstash, Kibana 및 Beats를 무료로 다운로드하고 몇 분 내에 Elastic APM, Elastic App Search, Elastic Workplace Search 등을 시작하세요.

www.elastic.co

 

이동 하였으면 원하는 패키지에 대하여 다운로드 버튼을 클릭합니다

Linux 환경에서 패키지를 다운로드 할 것이기 때문에 다운로드 페이지에서 deb 패키지로 전환 후 오른쪽 클릭을 하여 링크 주소를 복사해둡니다. (추후 wget 명령어와 링크 주소를 활용하여 다운로드 하기 위함)

ElasticSearch, Kibana, Logstash에 대한 링크를 확보하였으면 Linux에는 아래와 같이 명령어를 입력할 수 있습니다.

제가 설치한 버전은 8.7.1 버전입니다. 설치 시 주의사항은 ELK 각각의 버전이 모두 통일되어야 합니다.

1
2
3
4
5
6
7
8
# 패키지 업데이트
sudo apt-get update && sudo apt-get upgrade
# Elasticsearch 패키지 다운로드
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.7.1-amd64.deb
# Kibana 패키지 다운로드
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.7.1-amd64.deb
# Logstash 패키지 다운로드
wget https://artifacts.elastic.co/downloads/logstash/logstash-8.7.1-amd64.deb
cs

 

 

 

3. 패키지(.deb) 설치 및 서비스 실행

ELK Stack 패키지의 다운로드가 모두 완료되었으면 아래 명령어를 입력하여 설치를 해줍니다. (순서 상관 없음)

1
2
3
4
5
6
# Elastic Search 설치
sudo dpkg -i elasticsearch-8.7.1-amd64.deb
# Kibana 설치
sudo dpkg -i kibana-8.7.1-amd64.deb
# Logstash 설치
sudo dpkg -i logstash-8.7.1-amd64.deb
cs

 

설치가 정상적으로 완료되면 elasticsearch 서비스를 실행해줍니다.

기본 설정으로 실행 된 경우 9200/tcp 포트가 열리게 됩니다.

 

 

 

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

caul334@gmail.com

반응형

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

[ELK] 간단한 ELK 설치 환경 구축 방법 (Part 3)  (1232) 2023.05.15
[ELK] 간단한 ELK 설치 환경 구축 방법 (Part 2)  (1229) 2023.05.14

+ Recent posts