es 21

Elasticsearch 클러스터 구조

Elasticsearch cluster Elasticsearch의 Cluster는 물리적으로 나뉜 하나 이상의 노드를 논리적으로 하나의 서버 그룹으로 묶어 관리하는 것입니다. 하나의 노드로 모든 역할을 수행할 수 있도록 설정할 수 있지만 그렇게 설정할 경우 하나의 노드가 모든 부하를 받기 때문에 클러스터가 깨질 수 있는 위험이 있습니다. 물론 개인 테스트 환경 및 개발환경에서는 리소스를 아끼기 위해 이렇게 설정할 수 있지만 상용으로 사용할 경우 Cluster를 구성할 때는 각각의 노드가 역할을 분리하여 한 노드의 문제가 발생하더라도 클러스터를 유지하는데 문제가 없게 클러스터를 구성하는 것이 좋습니다. 각 노드들의 역할 위에서 설명한 것처럼 Elasticsearch에서는 모든 역할을 수행하는 하나의 노드로..

Elasticsearch 2023.09.30

Elasticsearch install in kubernetes

kubernetes 환경에서 elasticsearch를 설치하는 방법을 정리하였습니다. 비록 테스트 환경이지만 실제 운영환경처럼 구성하기 위해 3대의 마스터 노드와 2대의 데이터 노드로 구성하였습니다(현업에서 직접 사용할 경우 보다 더 여유 있는 구성을 추천드립니다) 3대의 마스터 노드 중 실제로 마스터의 역할을 수행하는 것은 1대이며 나머지 2대의 마스터 노드는 현재 마스터 노드의 문제가 발생할 경우 마스터로 승격할 수 있도록 Standby 형식으로 구성하였습니다. 1. Helm chart 다운로드 저는 kubernets 환경에서 elasticsearch를 설치하기 위해 helm을 사용하였습니다. 아래 링크의 helm으로 구성하였습니다. https://artifacthub.io/packages/helm..

Elasticsearch 2023.07.31

Elasticsearch 7.10 버전 AWS S3 Snapshot 생성하기(in Kubernetes)

본 문서는 2023년 6월에 작성된 문서입니다. Elasticsearch 라이센스 문제로 현재 7.10 버전을 사용하고 있습니다. 그러나 7.10 버전에서는 AWS S3에 저장하는 기능이 기본적으로 제공하고 있지 않습니다. 그래서 7.10 버전을 AWS S3에 스냅샷 저장하는 방법에 대하여 문서를 작성하였습니다. (참고로 8.0 버전 이상에서는 기본적으로 AWS S3 Snapshot을 제공하고 있습니다. 8.0 이상의 버전을 사용하시는 분들은 큰 제목 3번부터 진행하셔도 됩니다.) 1. 현재 나의 환경은? 저의 경우 Elasticsearch를 kubernetes에 설치하여 사용하고 있습니다. 그렇기 때문에 Kubernetes 환경 위주로 설명을 진행하지만 플러그인 설치하는 방법은 비슷하므로 일반적인 VM..

Elasticsearch 2023.07.04

Elasticdump 사용해보기

elasticdump는 Elasticsearch 인덱스와 데이터를 내보내거나 가져오기 위한 도구입니다. elasticdump를 사용하면 Elasticsearch 클러스터의 index, document, template 등을 백업하거나 다른 클러스터로 마이그레이션하는 작업을 수행할 수 있습니다. 본 문서에서 elasticdump의 기본 적인 사용법에 대해서 정리하였습니다. elasticdump install $ sudo apt update $ sudo apt install npm $ npm install elasticdump -g $ elasticdump --version 6.103.0 (node:16397) NOTE: We are formalizing our plans to enter AWS SDK fo..

Elasticsearch 2023.07.03

[Error] Error bulk 429 Too many requests

Elasticsearch의 성능을 위해 데이터를 한 건 한 건 처리하는 것이 아닌 bulk를 이용하여 한 번에 처리하는 경우가 많습니다. bulk를 사용하여 많은 양의 데이터를 Elasticsearch에 저장할 경우 분명 HTTP 요청은 정상적으로 끝이 났는데 데이터가 저장이 안 되는 경우가 발생할 수 있습니다. 여기서 중요한 것은 Elasticsearch로 보낸 HTTP의 Response는 200이라는 정상적인 값을 리턴을 하기 때문에 문제를 찾기가 어려운데요. 이럴 때는 Response의 state code를 보는 것이 아라 Response의 body의 내용을 볼 필요가 있습니다. 문제 해결방법 해당 문제를 해결하는 방법은 2가지 방법이 있습니다. 한번에 요청하는 bulk의 사이즈를 줄인다 : 만약 ..

Elasticsearch 2023.06.30

Elasticsearch Aggregations#4 Sub Aggregations

Aggregations을 수행할 때 사용할 데이터 Sub Aggregations aggregation을 통해 집계를 내고 그 결과에서 세부적인 집계를 위해 Sub Aggregation을 지원하고 있습니다. level 필드별 duration의 평균 시간 구하기 우리는 데이터를 가져오는 것이 목적이 아닌 Aggregations을 수행하는 것이 목적이기 때문에 "size"를 0으로 설정하였습니다. api POST http://localhost:9200/test-log-index-2021-09-12/_search header content-type: application/json body { "size": 0, "query": { "match_all": {} }, "aggs": { "byLevel": { "te..

Elasticsearch 2021.09.19

Elasticsearch Aggregations#3 terms, ranges, histogram, date_range

Aggregation을 수행할 때 사용할 데이터 terms terms는 데이터의 keyword별 종류 및 개수를 집계하는데 사용합니다. 모든 도큐먼트의 level의 종류와 개수 구하기 우리는 데이터를 가져오는 것이 목적이 아닌 Aggregation을 수행하는 것이 목적이기 때문에 "size"를 0으로 설정하였습니다. level 필드의 데이터 종류와 각 종류별로 도큐먼트가 몇개 있는지 확인합니다. api POST http://localhost:9200/test-log-index-2021-09-12/_search header content-type: application/json body { "size": 0, "query": { "match_all": {} }, "aggs": { "byLevel": { "..

Elasticsearch 2021.09.17

Elasticsearch Aggregations#2 cardinality, percentiles, percentile_ranks

Aggregation을 수행할 때 사용할 데이터 cardinality cardinality는 데이터의 종류가 몇 가지 있는지 확인하는 데 사용됩니다. user_id가 1인 도큐먼트에 action이 몇가지 종류가 있는지 확인하기 우리는 데이터를 가져오는 것이 목적이 아닌 Aggregations을 수행하는 것이 목적이기 때문에 "size"를 0으로 설정하였습니다. api POST http://localhost:9200/test-log-index-2021-09-12/_search header content-type: application/json body { "size": 0, "query": { "bool": { "must": [ { "match": { "user_id": "1" } } ] } }, "agg..

Elasticsearch 2021.09.15

Elasticsearch Aggregations#1 min, max, sum, avg, stats

Aggregation을 수행할 때 사용할 데이터 Aggregations이란 저장된 데이터를 수치화시키는 여러 가지의 연산을 수행하는 역할을 합니다. 이러한 기능을 통하여 데이터를 분석하여 사용자가 보기 좋게 시각화를 할 수 있습니다. 이번 페이지에서는 min, max, sum, avg, stats에 대하여 알아보겠습니다. min query의 검색 결과에 특정 필드의 값이 가장 작은 값을 나타냅니다. user_id가 1인 도큐먼트의 duration 필드의 최솟값 구하기 "size"를 0으로 설정한 이유는 우리는 데이터를 가져오는 것이 목적이 아닌 user_id가 1인 도큐먼트에서 duration이 가장 작은 값만 도출하는 것이 목적이기 때문에 불필요하게 데이터를 가져오는 것을 생략하기 위함입니다. "agg..

Elasticsearch 2021.09.13

Elasticsearch 검색하기#3 match, term, range 쿼리

삽입된 데이터는 이전 페이지를 참조해주세요 https://stdhsw.tistory.com/entry/Elasticsearch-%EA%B2%80%EC%83%89%ED%95%98%EA%B8%B01 match 쿼리 match는 term과 비슷해 보이지만 미묘한 차이가 있습니다. match의 경우 기본적인 검색을 수행하는데 사용을 하지만 저 같은 경우 text 필드에서 보다 상세한 검색을 수행할 경우 주로 사용됩니다. 즉 문서의 내용에서 특정 단어가 들어 갔는지 검색할때 많이 사용됩니다. text 필드 검색하기 message 필드에 "aaa"라는 문자열이 포함된 모든 도큐먼트를 검색합니다. api POST http://localhost:9200/my-log-index-2021-08-29/_search head..

Elasticsearch 2021.09.10