Elastic Search

Ch11. 장애 방지를 위한 실시간 모니터링 - 클러스터에 대한 실시간 모니터링

webmaster 2025. 10. 15. 10:40
728x90

클러스터 레벨의 실시간 모니터링

GET _cluster/stats
  • _cluster/stars API를 이용하면, 클러스터 전체에서 통계를 검색 할 수 있다.
    • 클러스터를 구성하는 물리적인 노드의 정보(역할, 운영체제 정보, 메모리 사용량, CPU 사용량)를 알 수 있다.

클러스터 인덱스 정보

  • count: 클러스터에 존재하는 인덱스의 갯수를 나타낸다.
  • shards: 클러스터에 존재하는 샤드의 정보를 나타낸다.
  • docs: 클러스터에 색인된 문서의 개수를 나타낸다.
  • store: 클러스터 내부에 가지고 있는 문서가 차지하는 디스크 크기를 나타낸다.
  • fielddata: 클러스터가 fielddata를 위해 생성한 메모리 크기를 나타낸다.
  • query_cache: 동일한 검색 요청 시 빠른 응답을 위해 검색 결과를 메모리에 올려 캐시한다.
  • completion: Compleion Suggest를 위해 생성한 메모리 크기를 나타낸다.
  • segments: 클러스터 내부에 존재하는 루씬 세그먼트가 사용 중인 메모리 정보를 나타낸다.

클러스터 통계 정보 중 노드에 관한 정보

  • count: 클러스터에 존재하는 노드의 갯수를 알려준다
  • versions: 클러스터를 구성하는 엘라스틱서치 버전을 나타낸다.
  • os: 클러스터에 존재하는 노드의 운영체제 정보를 나타낸다.
  • process: 클러스터에 존재하는 노드의 CPU 정보를 나타낸다.
  • jvm: 클러스터에 존재하는 노드의 JVM 정보를 나타낸다
  • fs: 클러스텅에 존재하는 노드의 File System 정보를 나타낸다.
  • plugins:  클러스터에 존재하는 노드에 설치된 플러그인 정보를 나타낸다.
  • network_types: 클러스터에 존재하는 노드에서 사용중인 네트워크 타입 정보를 나타낸다.

노드 레벨의 실시간 모니터링

GET _nodes/stats
  • 모든 노드의 통계 정보를 노드별로 상세하게 볼 수 있다.
  • 모든 노드의 통계 정보의 형식은 동일하나, 노드가 동작하고 있는 물리 머신을 기준으로 데이터가 생성되기 떄문에 각 노드 정보를 비교해보면 문제가 발생한 노드를 쉽게 발견할 수 있다.

데이터 노드의 통계 정보 중 indices에 대한 정보

  • docs: 데이터 노드가 가지고 있는 문서의 수
  • store: 데이터 노드가 사용 중인 디스크 용량
  • indexing: 데이터 노드가 색인 작업을 진행한 통계 정보
  • get: 데이터 노드에서 Get API 요청을 처리한 통계 정보
  • search: 데이터 노드에서 검색 요청을 처리한 통계 정보(검색 요청에 따른 세부 동작 과정에서 걸린 처리 시간을 불 수 있다.)
  • merges: 데이터 노드 내부에서 merge 작업을 수행한 통계 정보(merge 작업에 따른 세부 동작 과정에서 걸린 처리 시간 확인 가능)
  • flush: 데이터 노드 내부에서 flush 작업을 수행한 통계 정보다(Flush 작업에 따른 세부 동작 과정에서 걸린 처리 시간 확인 가능)
  • warmer: 데이터 노드에서 사용한 Warmer 작업을 수행한 통계 정보다(Warmar 기능은 과거 인덱스 조회 성능 향상을 위해 사용했지만 현재는 폐기 예정이라 사용되지 않는다)
  • query_cache: 데이터 노드에서 가지고 있는 검색 결과에 대한 캐시 정보다.(검색 결과를 저장한 캐시 수와 캐시 적중률, 미스율 등을 볼 수 있다)
  • fielddata: 데이터 노드에서 fielddata를 위해 생성한 메모리 크기를 나타낸다.
  • completion: 데이터 노드에서 completion suggest 를 위해 생성한 메모리 크기를 나타낸다
  • segments: 데이터 노드 내부에서 루씬 세그먼트 작업르 수행한 통계 정보다(세그먼트 메모리 샤용량 볼 수 있다.)
  • translog: 데이터 노드 내부에서 Translog 작업을 수행한 통계 정보다(Translog 파일의 크기를 볼 수 있다.)
  • request_cache: 데이터 노드에서 가지고 있는 샤드 레베의 중간 검색 결과에 대한 캐시 정보다. 캐시에 대한 적중률 및 미스율을 볼 수 있다
  • recovery: 데이터 노드 내부에서 복구 작업을 수행한 통계 정보다

데이터 노드의 통계 정보 중 os에 대한 정보

  • cpu: 데이터 노드에서 사용중인 CPU 통계 정보다. CPU 사용률을 확인할 수 있다.
  • mem: 데이터 노드에서 사용중인 메모리 통계 정보다. 
  • swap: 데이터 노드에서 사용중인 스와핑 통계 정보
  • cgroup: 데이터 노드에서 사용중인 cgroup 통계 정보(리눅스에서 제공하는 cgroup에 의해 제한된 시스템 리스소 정보 확인 가능)

데이터 노드의 통계 정보 중 Process(엘라스틱서치 인스턴스)에 대한 정보

  • open_file_description: 데이터 노드를 실행한 후로 사용중인 디스크립터 정보
  • max_file_descriptors: 데이터 노드 프로세스가 생성 가능한 최대 파일 디스크립터 카운트 정보
  • cpu: 데이터 노드를 실행한 이후로 사용한 CPU 정보
  • mem: 데이터 노드 프로세스가 부여받은 가상 메모리 정보

데이터 노드의 통계 정보 중 JVM에 대한 정보

  • mem: JVM의 메모리 관련 통계 정보
  • threads: JVM이 사용중인 스레드 관련 통계 정보
  • gc: JVM 현재 가비지 컬렉션 정보(Young/Old 영역 정보를 확인해서 간접적으로 GC 발생 시간을 유추)
  • buffer_pools: JVM 내부의 Direct Buffer와 Mapped Buffer의 메모리 정보를 보여준다. 
  • classes: JVM 내부에 로딩된 클래스 정보를 보여준다.

데이터 노드의 통계 정보 중 Thread_Pool에 대한 정보

  • bluk: bulk 요청을 처리하는데 사용하는 스레드 풀 정보를 보여준다
  • fetch_shard_started: 샤드 started 패치 작업을 처리하는데 사용하는 스레드 풀 정보를 보여준다
  • fetch_shard_store:샤드 store 패치 작업을 처리하는 데 사용하는 스레드 풀 정보를 보여준다.
  • flush: Flush 작업을 처리하는데 사용하는 스레드 풀 정보를 보여준다.
  • force_merge: 강제 병합 작업을 처리하는데 사용하는 스레드 풀 정보를 보여준다
  • generic: 일반적인 연산을 처리하는데 사용하는 스레드 풀 정보를 보여준다
  • get: Get API 요청을 처리하는데 사용하는 스레드 풀 정보를 보여준다
  • index: 색인 작업에 사용하는 스레드 풀 정보를 보여준다
  • listener: 자바 클라이언트에서 사용하는 스레드 풀 정보를 보여준다(엘라스틱서치 노드가 클라이언트 모드로 실행될때만 의미 있다)
  • menagement: Cat API나 Stat API 같은 관리용 요청을 처리하는데 사용하는 스레드 풀 정보를 보여준다
  • refresh: Refresh 요청을 처리하는데 사용하는 스레드 풀 정보를 보여준다
  • search: 카운트, 검색, 추천에 사용하는 스레드 풀 정보를 보여준다
  • snapshot: Snapshot/Restore 작업을 처리하는데 사용하는 스레드 풀 정보를 보여준다
  • warmer: 세그먼트 Warmer 작업을 처리하는데 사용하는 스레드 풀 정보를 보여준다(Deprecate)

데이터 노드의 통계 정보 중 fs(파일 시스템)에 대한 정보

  • total: 사용중인 파일 시스템의 통계 정보
  • data: 사용중인 파일 시스템의 종류와 저장 경로
  • io_stats: 현재 일어나고 있는 IO 통계 정보

데이터 노드의 통계 정보 중 transport(클라이언트 모듈)에 대한 정보

  • server_open: 연결 중인 Transport 개수
  • rx_count: 수신받은 갯수
  • rx_size_in_bytes: 수신받은 데이터 크기
  • tx_count: 송신한 횟수
  • tx_size_in_bytes: 송신한 데이터 크기

데이터 노드의 통계 정보 중 Http에 대한 정보

  • current_open: 현재 요청중인 HTTP 연결 수
  • total_opened: 지금까지 요청한 HTTP 요청 수

데이터 노드의 통계 정보 중 서킷 브레이커(breakers)에 대한 정보

  • parent: 공통으로 사용되는 메모리 사용량을 설정(기본 70%), 모든 서킷브레이커들은 Parent에서 설정된 메모리 사용량보다 작게 설정해야 유효하다
  • request: 요청 시 집계 연산과 같은 무거운 작업이 수행될 수 있기 때문에 메모리 사용량에 제한을 둔다(기본 60%)
  • fielddata: 노드에서 fielddata 캐시로 사용되는 메모리 사용량에 제한을 둔다(기본: 60%)
  • in_flight_requests: Transfer 동작, Http 수준의 동작 시 수신되는 데이터에 대한 메모리 사용량에 제한을 둔다(기본 100%)
  • accounting: 루씬 세그먼트와 같이 요청이 완료된 후에도 해제되지 않는 메모리가 존재할 경우에 대비한 메모리 사용량을 설정한다(기본 100%)

인덱스 레벨의 실시간 모니터링

GET _stats
  • 클러스터를 인덱스 수준에서 들여다볼 수 있게 도와준다.
    • 인덱스 통계는 여러 노드에 걸쳐 존재하는 논리적인 개념이다.
  • _all 속성은 모든 인덱스의 통계값을 합친 값으로 구성된다.
    • 클러스터에 존재하는 전체 인덱스를 대상으로 하는 통계 정보를 살펴 볼 수 있다.
  • indices로 인덱스 통계를 볼 수 있다.
    • primaries: 프라이머리 샤드를 의미한다.
    • total: 프라이머리와 레플리카 샤드를 모두 합친것을 의미한다.

primaries 통계 정보

  • docs: 인덱스가 가지고 있는 문서의 수
  • store: 인덱스가 사용 중인 디스크 용량
  • indexing: 인덱스가 색인 작업을 진행한 통계 정보
  • get: 인덱스에서 Get API 요청을 처리한 통계 정보
  • search: 인덱스에서 검색 요청을 처리한 통계 정보
  • merges: 인덱스 내부에서 Merge 작업을 수행한 통계 정보
  • refresh: 인덱스 내부에서 refresh 작업을 수행한 통계 정보
  • flush: 인덱스 내부에서 Flush 작업을 수행한 통게 정보
  • warmer:인덱스에서 사용한 Warmer 작업을 수행한 통계 정보(현재 Deprecate)
  • query_cache: 인덱스에서 가지고 있는 검색 결과에 대한 캐시 정보
  • fielddata: 인덱스에서 fielddata를 위해 생성한 메모리 크기
  • completion: 인덱스에서 Completion Suggest를 위해 생성한 메모리 크기
  • segments: 인덱스 내부에서 루씬 세그먼트 작업을 수행한 통계 정보
  • translog: 인덱스 내부에서 Translog 작업을 수행한 정보
  • request_cache: 인덱스에서 가지고 있는 샤드 레벨의 중간 검색 결과에 대한 캐시 정보
  • recovery: 인덱스 내부에서 복구 작업을 수행한 통계 정보 
728x90