반응형

개발 이야기/Elasticsearch 16

S3에 스냅샷 생성 및 복원

Elasticsearch 7.11.0 On Premise 환경에서 AWS S3 에 스냅샷을 생성하는 내용을 정리해 보았습니다. Cloud 환경에서는 조금 다를 수 있으니 참고하세요. 아래 내용은 www.elastic.co/guide/en/elasticsearch/plugins/7.11/repository-s3.html#repository-s3-install의 내용을 참고해서 정리했습니다. 이해를 돕기 위해 이미지가 많이 첨부된 관계로 서술형 문체보다는 간략히 요점만 정리했습니다. 아래와 같은 순서로 정리되어 있습니다. 1. AWS S3 플러그인 설치 2. AWS S3에 스냅샷 저장소 생성 3. Kibana에 AWS S3 저장소 등록 4. 스냅샷 생성/복구하기 5. 검색 가능한 스냅샷 설정 1. AWS S..

ES Cluster Nodes Rolling Upgrade 절차 정리

가동중인 Elasticsearch cluster nodes를 가동 상태를 유지하며 업그레이드 하는 절차를 정리했습니다. Rolling upgrades 에 대한 공식 문서는 이 링크를 참고하세요. 시작 전 각 node에 최신 버전을 미리 설치 후 config 파일을 설정하여 기존 버전을 종료한 후 바로 실행할 수 있게 준비를 해두면 좀 더 빠르게 업그레이드를 마무리 할 수 있습니다. 각 노드를 종료하기 전 allocation이 진행되지 않도록 아래와 같이 allocation 을 disable 시킵니다. # 노드 종료 전 PUT _cluster/settings { "persistent": { "cluster.routing.allocation.enable": "none", "cluster.routing.reb..

Elasticsearch 7.10 Cluster 설치하기

최근 시스템 확장을 위해 Elasticsearch의 최신 버전을 설치하면서 정리한 글입니다. 이전에 정리했던 6.x 버전 설치기, cluster 설정을 보면서 설치중에 불필요한 내용 정리하고 합칠 내용 합쳐서 최신 내용으로 다시 업데이트 하려 정리합니다. 6.x 버전에서는 Java 8을 별도 설치해야 했지만 7.x 버전에서는 OpenJDK가 포함되어 있어 별도 설치할 필요는 없습니다. 이 글은 CentOS 7.9.2009 (Core) release, 그리고 Elasticsearch 7.10.1 버전을 기준으로 작성되었습니다. (곧 7.11이 나올 예정인가보네요. 8.x로 넘어가기 전 마지막 버전일 줄 알았는데... -0-a ) 일단 해당 서버로 elasticsearch-7.10.1-linux-x86_64..

precision_threshold 이야기

DSL에서는 precision_threshold값을 적용하여 사용했는데, Kibana에서는 적용해본 적이 없다가 사용하시는 동료들이 값이 이상하다며 내용을 찾아보게 되었습니다. Metrics에 Y-Axis의 Aggregation을 Unique Count로 지정했을때 아래와 같은 값이 출력되고 있었습니다. 이 값이 terms로 뽑을 때와 3% 정도 차이가 나고 있어 DSL에 적용한 precision_threshold 설정을 적용해 봤습니다. Metrics 하단에 JSON input 란이 있습니다. 여기에 아래와 같이 입력하면 됩니다. precision_thredshold의 기본값은 3000이며, 최대값은 40000입니다. 아래와 같이 조정이 되지만 terms와 완전히 동일한 값이 되지는 않습니다. hits..

Logstash sqs plugin 설정

(ELK 7.2 버전에서 테스트 되었습니다.) 이미 logstash와 elasticsearch가 설치되어 있다고 가정하고 진행하겠습니다. 7.x에 적용된 SQS plugin 3.x 버전은 logstash 5.0부터 적용되었으니 5.0 미만 버전 사용자분은 공식 문서를 참고하시기 바랍니다. https://www.elastic.co/guide/en/logstash/current/plugins-inputs-sqs.html Sqs input plugin | Logstash Reference [7.5] | Elastic Plugin version: v3.1.2 Released on: 2018-11-12 Changelog For other versions, see the Versioned plugin docs. F..

logstash tcp로 데이터 전송 시 손실없는 데이터 전달 흐름 설계

비지니스 로직에서 logstash로 tcp를 바로 데이터를 전송한다면 아래와 같은 흐름으로 설계가 될 것입니다. 이 경우 logstash 혹은 elasticsearch에 문제가 있을 경우 바로 데이터 손실이 발생할 수 있습니다. logstash와 elasticsearch의 문제 발생 혹은 점검 중 데이터 손실이 발생하지 않도록 전송할 데이터를 일시적으로 혹은 일정 기간 동안 보관했다가 logstash와 elasticsearch가 정상화 되었을 때 다시 전달할 수 있도록 아래와 같이 만들어 보겠습니다. 임시 저장소로는 Redis를 사용하고, 데이터 전송 흐름을 제어하기 위해 nodejs로 간단한 agent를 만들어 사용해 보겠습니다. 전달받은 로그는 모두 JSON 포멧의 텍스트로 가정합니다. const h..

좌충우돌 ELK 7.1.1 롤링 업그레이드

기존에 사용하던 ELK 6.3을 7.1.1 버전으로 업그레이드하며 그 사이 발생했던 문제들을 정리해 보았습니다. 참고로 모두 수동 설치되어 있는 상태입니다. 1. 설치 및 사용 환경 2. 신규 장비 세팅하기 3. 신규 장비에 ES 설치하기 (ver 6.3) 4. Rolling 업그레이드 시작 - 6.3에서 6.8로 5. Rolling 업그레이드 시작 - 6.8에서 7.1.1로 6. Kibana, Logstash 업그레이드 [1. 설치 및 사용 환경 ] 현재 ELK를 사내 시스템에 설치하여 사용중에 있습니다. 돈이 많으면 그냥 편하게 Cloud 서비스를 사용하고 싶은 마음은 간절했으나 사정상 외부에서 서비스하는 시스템들이 보내는 raw data를 모두 가져와 사내의 ES에 밀어 넣고 있습니다. 운영비용도 ..

ES의 shard initialize 에 대해...

며칠 전 데이타 손실이 발생하여 내용을 공유하기 위해 기록합니다. 일단 구축한 시스템은 사내에 ES로 시스템을 구축해두고, 각 컨텐츠 별로 REST API 서버 + Redis로 중간 저장소를 만들어 둔 상태입니다. 그리고 사내의 세팅된 Logstash에서 방화벽이 열리는 시간에 컨텐츠 별 중간 저장소로 접속해 그동안 쌓여있는 로그를 가져오도록 되어 있습니다. 이렇게 세팅된 이유는 Node 별 초기/유지 비용을 줄이고 (사내에서 PC로 시스템을 구축해 둠. 서버와 비슷한 성능의 시스템을 저렴하게 구축할 수 있으며, IDC의 상면비 등을 절감할 수 있기 때문입니다. 문제 발생 시 접근성도 용이합니다.), 운영자들의 접근 속도도 높이기 위함입니다. ES외에도 리포트 사이트를 구축하여 Kibana로는 결과를 만..

ES QueryDSL에서 aggregation에 order 설정 제한

Invalid aggregation order path [something]. Buckets can only be sorted on a sub-aggregator path that is built out of zero or more single-bucket aggregations within the path and a final single-bucket or a metrics aggregation at the path end. 아래와 같은 샘플을 만들었었다. "query" : { ... 검색 조건...}."aggs" : {"term_key" : {"terms": {"field" : "field_first","order" : {"something" : "desc"}}"aggs": {"something" :..

Elasticsearch를 Node.js에 통합하기

다음과 같은 순서로 작성되어 있습니다. 1. 개요 2. 준비 3. 쿼리 알아보기 4. nodejs와 통합 5. chart로 표현하기 1. 개요 최근 회사에 Elasticsearch(이하 ES)로 통계 시스템을 구축했습니다. Mysql MyISAM 엔진으로 구축하던 것과 비교해보면 엄청나게 편리해졌네요. Kibana로 쿼리하고 결과를 손쉽게 출력하여 담당자가 아닌 컨텐츠 개발자도 자신이 보고 싶은 결과를 바로 추가하여 볼 수 있을 정도니, 작은 개발사에는 이보다 더 좋은 솔루션이 있을까 싶네요. 그런데 ES에서 나온 다른 두 결과의 비교가 필요한 경우 불가능한 경우가 있어서 조금 아쉽더군요. 그래서 이를 직접 만들어 보기로 했습니다. 시간을 기준으로 데이터를 비교하는 경우는 timelion을 사용하면 되나..

반응형