반응형



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와 Kibana를 설치함에 있어서 시행착오 없이 설치하기 위해 참고를 목적으로 쓴 글입니다.

 

최신버전 Elasticsearch 설치 방법

 

1. Elastic 설치 가이드 페이지 접근

https://www.elastic.co/guide/en/elasticsearch/reference/current/deb.html

 

Install Elasticsearch with Debian Package | Elasticsearch Guide [8.16] | Elastic

On systemd-based distributions, the installation scripts will attempt to set kernel parameters (e.g., vm.max_map_count); you can skip this by masking the systemd-sysctl.service unit.

www.elastic.co

 

(참고) Elastic 설치 가이드 페이지 요약본 (Production 환경이 아니라면 root로 설치할 것)

1) wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
2) sudo apt-get install apt-transport-https
3) echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
4) sudo apt-get update && sudo apt-get install elasticsearch

 

2. 설치완료 후 서비스 등록 및 서비스 실행

1) sudo systemctl daemon-reload
2) sudo systemctl enable elasticsearch.service
3) sudo systemctl start elasticsearch.service

 

3. Elasticsearch 정상 실행 확인

 - https://<IP주소>:9200/ 접속

 

 

최신버전 Kibana 설치 방법

 

1. Kibana 설치 가이드 페이지 접근

https://www.elastic.co/guide/en/kibana/current/deb.html

 

Install Kibana with Debian package | Kibana Guide [8.16] | Elastic

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: Unable to find expected entry 'main/source/Sources' in Release file

www.elastic.co

 

(참고) Kibana 설치 가이드 페이지 요약본 (Production 환경이 아니라면 root로 설치할 것)

1) wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
2) sudo apt-get install apt-transport-https
3) echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
4) sudo apt-get update && sudo apt-get install kibana

 

 

2. 설치완료 후 서비스 등록 및 서비스 실행

1) sudo systemctl daemon-reload
2) sudo systemctl enable kibana.service
3) sudo systemctl start kibana.service

 

 

3. Kibana 정상 실행 확인 및 토큰 입력

 - http://<IP주소>:5601

 - 처음 나오는 토근 입력 페이지는 아래와 같이 할 것

# Elastic 실행 경로 이동
cd /usr/share/elasticsearch/bin

# Token 생성을 위해 설치 가이드와 입력
./elasticsearch-create-enrollment-token -s kibana

 

 

4. 인증 코드 입력

 - Token을 입력하면 Veritication Code를 입력하라고 나오는데 아래와 같이 진행

# Kibana 실행 경로 이동
cd /usr/share/kibana/bin

# Verification Code 생성
./kibana-verification-code

 - Verification Code가 출력되면 웹브라우저 Kibana 창에 붙여넣기

 

 

 

별첨 - Kibana 원격 Host 에서 접속하는 방법

Kibana는 기본 설정이 localhost에서만 접속하도록 설정되어 있습니다. (이 경우 Ubuntu 내에서만 가능)

Ubuntu에 Elasticsearch를 설치하시는 분들은 대부분 Virtual Machine에 Ubuntu를 올리고 설치하는 경우일 텐데

그럴 경우 Kibana 창을 확인하기 위해서는 항상 Ubuntu에 들어가야 하는 번거로움이 있습니다.

 

Kibana 설정 하나만 변경하면 편리하게 Host PC 웹브라우저에서 Kibana 대시보드를 확인할 수 있습니다.

# Virtual Machine IP 확인
ifconfig

# Kibana 설정 파일 열기
vi /etc/kibana/kibana.yml

# 접속 호스트 변경하기 (아래 내용 찾아서 추가)
server.host: "<IP주소>"

 

Kibana 원격 접속 설정 추가

 

 

Host PC인 윈도우에서 Ubuntu에 올려진 Kibana로 접속 확인

Host PC인 윈도우에서 Ubuntu에 올려진 Kibana에 접속한 화면

 

 

참고

- Elastic 실행 경로 : /usr/share/elasticsearch/bin
- Kibana 실행 경로 : /usr/share/kibana/bin

- Elastic 환경설정 파일 경로 : /etc/elasticsearch/elasticsearch.yml

- Kibana 환경설정 파일 경로 : /etc/kibana/kibana.yml

 

 

 

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

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

반응형
반응형

 

엘라스틱서치를 설치하고 이제 로그인 하려는데 암호를 몰라 접속을 못하신다구요?

여기에 나오는 방법대로만 하면 해결할 수 있습니다.

 

엘라스틱서치 로그인 패스워드는 설치하자마자 출력되는 Command Prompt로 확인할 수 있지만

따로 저장해 놓지 않으면 로그인 할 수 없습니다ㅠㅠ

 

엘라스틱서치의 기본 로그인 패스워드를 변경(reset)하는 방법 공유드리겠습니다.

 

1. 패스워드 변경을 위해선 먼저 elasticsearch-reset-password를 찾아야 합니다.

아래와 같은 명령어로 경로를 찾아줍니다.

참고로 저는 깔끔한 스샷을 찍기 위해 경로명에 /usr/share을 써넣었지만 설치 경로를 모르시는분은 아래 명령어와 같이 루트 경로(/)로 넣으시면 됩니다.

$ sudo find / -name "*reset-password"

 

elasticsearch-reset-password 프로그램 찾기

 

저의 경우 찾고자 하는 프로그램은 /usr/share/elasticsearch/bin/elasticsearch-reset-password에 프로그램이 위치해 있습니다.

프로그램을 찾았으니 elastic 사용자를 지정하여 패스워드를 초기화 해줍니다.

 

$  /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

 

저의 패스워드는 모자이크 처리 하였지만 이것을 따라하시면 초기화된 패스워드를 확인할 수 있습니다.

 

추가) 패스워드 분실 방지 방법

운영 환경이 서버라면 Elastic Search docs 페이지에도 나와있지만 패스워드 분실을 방지하기 위해선

접속 패스워드를 환경변수로 추가하거나 Desktop의 경우 profile 또는 .bashrc에 등록해 두시면 분실을 방지할 수 있습니다.

 

$ export ELASTIC_PASSWORD="접속패스워드"

 

 

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

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

반응형
반응형

 

Linux Debian 계열인 우분투 시스템 위에 ELK 스택(Elastic search + Logstash + Kinbana) 설치 방법을 공유드리겠습니다.

 

1. ELK 스택 설치 전 Ubuntu 시스템에서 사전 세팅

# 1) APT 업데이트

$ sudo apt update

 

# 2) Java SDK 설치

$ sudo apt install default-jdk

 

 

2. Elastic Search 설치

1.1) <최신 버전 설치 시> : google에서 elastic download 검색 후 "DEB x86_64" 다운로드

1.2) <특정 버전 설치 시> : google에서 elastic <버전> download 검색 후 "DEB x86_64" 다운로드

2) $ cd Downloads

3) $ sudo dpkg -i <elastic file>

4) $ sudo systemctl start elasticsearch

5) 서비스 확인 : 인터넷 브라우저 > http://localhost:9200/

설치 완료 후 화면

 

3. Kibana 설치

1.1) <최신 버전 설치 시> : google에서 kibana download 검색 후 "DEB x86_64" 다운로드

1.2) <특정 버전 설치 시> : google에서 kibana <버전> download 검색 후 "DEB x86_64" 다운로드

2) $ cd Downloads

3) $ sudo dpkg -i <kibana file>

4) $ sudo systemctl start kibana

5) 서비스 확인 : 인터넷 브라우저 > http://localhost:5601/

설치 완료 후 화면

 

 

반응형

+ Recent posts