[Elasticsearch] 엘라스틱서치 구성

Jaewon Lim·2025년 4월 13일

Elasticsearch

목록 보기
1/12

ELK Stack 구성

beats(Data Collection) -> logstash(Data Aggregation&Processing) -> elasticsearch(Indexing&storage) -> kibana(Analysis&Visualization)

  • beats를 통해 수집한 데이터는 ES로 보내는 경우도 있지만, 대부분 logstash로 전송되어 처리 후 ES로 전송. ES 저장소와 검색 등의 기능을 이용하여 kibana에서 대시보드, discover 기능을 통해 시각화 가능
  • 엔진들은 jdk 기반으로 실행되고

Elasticsearch

  • Lucene 기반 검색, 분석엔진
  • Logstash를 통해 수신한 데이터의 저장소 역할
  • Json 기반의 분산형 RESTfil 검색엔진
  • REST API 형태로 모든 요청/응답 제공

Logstash

  • Data 처리 파이프라인
  • 동시 Data 수집
  • 수집로그 선정해서, 지정된 대상 서버(Elasticsearch)에 인덱싱하여 전송하는 역할

inputs

filtres

outputs

Kibana

  • Data 시각화.
  • HTML, JS 엔진

Beats

  • 서버에 에이전트로 설치하여 다양한 유형의 데이터를 ES 또는 Logstash에 전송

    Filebeat : 보안장치, 클라우드 컨테이너, 호스트 또는 OT에서 수집하는 로그와 파일을 경량화된 방식으로 전달
    Packetbeat : 호스트와 컨테이너의 데이터를 Logstash 또는 ES로 전송하는 경량 네트워크 패킷 분석기
    Auditbeat : Linux 감사 프레임워크 데이터를 수집하고 파일 무결성 모니터링 이벤트를 실시간으로 전송하여 추가적인 분석이 가능하도록 지원
    Functionbeat : 클라우드 서비스 제공자의 FaaS 플랫폼에서 기능으로 배포하여 클라우드 서비스로부터 데이터를 수집, 전송, 모니터링 함
    Metricbeat : 시스템과 서비스에서 메트릭을 수집. CPU부터 메모리, Redis, NGNIX 까지 이를 통해 다양한 시스템 서비스 통계를 가볍게 전송
    Winlogbeat : Windows 이벤트 로그를 ES와 Logstash로 스트리밍
    Heartbeat : 활성 상태를 감지하고 서비스가 가능한지 모니터링. URL 목록을 제공하면 Heartbeat에서 잘 작동중인가? 라는 질문을 한 후, 향후 분석을 위해 정보와 반응 시간을 전송

클러스터 구성


ES의 노드들은 클라이언트와 통신을 위한 http 포트(9200~9299), 노드 간의 데이터 교환을 위한 tcp 포트(9300~9399) 총 2개의 네트워크 통신을 열어두고 있다.


하나의 서버안에서 여러 개의 노드를 실행하는 것도 가능. 이 경우에는 각 노드들은 차례대로 9200,9201... 순으로 포트 사용. 클라이언트는 9200,9201 등의 포트를 통해 원하는 노드와 통신을 할 수 있다. 만약에 서버1에서 두 개의 노드를 실행하고, 또 다른 서버에서 한 개의 노드를 실행시키면 클러스터는 위와 같이 구성된다.
서버 1에서 두 개의 노드가 있기 때문에 서버 1의 두번째 노드는 실행되는 http,tcp 포트가 각각 9201,9301로 실행된다.

마스터 노드와 데이터 노드

마스터 노드(Master Node)

ES 클러스터는 하나 이상의 노드들로 이루어진다. 이 중 하나의 노드는 인덱스의 메타 데이터, 샤드의 위치와 같은 클러스터 상태(Cluster Status) 정보를 관리하는 마스터 노드의 역할을 수행한다. 클러스터마다 하나의 마스터 노드가 존재하며 마스터 노드의 역할을 수행할 수 있는 노드가 없다면 클러스터는 작동이 정지된다.

  • elasticsearch.yml 에 디폴트 설정은 node.master:true
  • 현재 마스터 역할을 수행하고 있는 노드가 네트워크상에서 끊어지거나 다운되면 다른 마스터 후보 노드 중 하나가 마스터 노드로 선출됨
  • 클러스터가 커져서 노드와 샤드들의 개수가 많아지게 되면 모든 노드들이 마스터 노드의 정보를 계속 공유하는 것은 부담이 되어 마스터 노드의 역할을 수행 할 후보 노드들만 따로 설정해서 유지하는 것이 전체 클러스터 성능에 도움이 될 수 있음
  • 마스터 노드로 사용하지 않는 노드들은 설정값을 node.master:false

데이터 노드(Data Node)

실제로 색인된 데이터를 저장하고 있는 노드.

  • 마스터 후보 노드들은 node.data:false로 설정하여 마스터 노드 역할만 하고 데이터는 저장하지 않도록 함
  • 마스터 노드는 데이터는 저장하지 않고 클러스터 관리만 하게 되고, 데이터 노드는 클러스터 관리 작업으로 부터 자유롭게 되어 데이터 처리에만 집중할 수 있음

예시

4개의 노드를 실행하는데 node-1은 마스터의 역할만 실행하는 전용 노드, node-2 / node-3 / node-4 는 마스터 역할은 하지 않고 데이터 저장만 하는 노드로 설정하는 예제

node-1(마스터)

node.master: true
node.data: false

node-2 / node-3 / node-4(데이터)

node.master: false
node.data: true

  • kibana의 모니터링 화면에서 노드의 역할들을 확인 가능. 대부분의 elastic stack 모니터링 도구에서 마스터 노드는 별로 표시

문제

wget vs curl

wget

파일 다운로드에서 주로 사용. web get의 줄임말

  • 단순하고 빠른 파일 다운로드
  • 재시도 기능 기본 제공
  • 웹 페이지 전체 다운로드 가능(-r)

curl

API 호출 미 ㅊ다양한 프로토콜 지원. client URL 줄임말

  • 광범위한 프로토콜 지원
  • API 요청/응답 관리에 강력
  • GET 외에도 복잡한 HTTP 요청 가능

0개의 댓글