GW LABS

기초부터 다지는 ElasticSearch 운영 노하우 (6) - 클러스터 성능 모니터링과 최적화 본문

Book-Review/Programing

기초부터 다지는 ElasticSearch 운영 노하우 (6) - 클러스터 성능 모니터링과 최적화

GeonWoo Kim 2022. 8. 28. 15:18

7.1 클러스터의 상태 확인하기

  • cat API: 클러스터의 상태, 노드의 상태, 샤드의 상태 등 정보 확인 기능
    • /_cat/health?format=json&pretty
    • status
      • green: 모든 샤드가 정상적으로 동작하고 있는 상태
      • yellow: 모든 프라이머리 샤드는 정상적으로 동작하고 있으나, 일부 혹은 모든 레플리카 샤드가 정상적으로 동작하고 있지 않은 상태
      • red: 일부 혹은 모든 프라이머리 샤드/레플리카 샤드가 정상적으로 동작하고 있지 않은 상태
        • 데이터 유실 가능성이 있다.

 

7.2 노드의 상태와 정보 확인하기

  • /_cat/nodes
    • /_cat/nodes?v&h=id,name,disk.used_percent
    • 조회하고 싶은 노드의 정보값을 파라미터로 넘겨 확인할 수 있다.

 

7.3 인덱스의 상태와 정보 확인하기

  • /_cat/indices
    • /_cat/indices?v&h=index,fielddata.memory_size
    • 조회하고 싶은 인덱스의 정보값을 파라미터로 넘겨 확인할 수 있다.
  • 인덱스의 상태는 클러스터 상태와 연동된다.

 

7.4 샤드의 상태 확인하기

  • /_cat/shards
    • STARTED: 정상적인 상태
    • INITIALIZING: 샤드를 초기화하는 상태. 최초 배치 시, 혹은 샤드에 문제가 발생하여 새롭게 배치할 때의 상태이다.
    • RELOCATING: 샤드가 현재의 노드에서 다른 노드로 이동하고 있는 상태. 새로운 데이터 노드가 추가되거나, 기존 데이터 노드에 문제가 생겨서 샤드가 새로운 노드에 배치되어야 할 때의 상태이다.
    • UNASSIGNED: 샤드가 어느 노드에도 배치되지 않은 상태. 해당 샤드가 배치된 노드에 문제가 생기거나 클러스터의 라우팅 정책에 의해 배치되지 않은 상태이다.

 

7.5 stats API로 지표 확인하기

  • /_cluster/stats
  • /_nodes/stats

 

7.6 성능 확인과 문제 해결

  • 색인성능: 초당 몇 개의 문서를 색인할 수 있는지, 그리고 각 문서를 색인하는 데 소요되는 시간이 어느 정도인지를 나타낸다.
  • 검색성능: 초당 몇 개의 쿼리를 처리할 수 있는지, 그리고 각 쿼리를 처리하는 데 소요되는 시간이 어느 정도인지를 나타낸다.
  • GC성능: GC가 너무 자주, 오래 발생하면 Stop-The-World 같은 응답 불가 현상이 발생한다. Stop-The-World가 얼마나 자주, 오래 발생하는지를 나타낸다.
  • rejected: 클러스터가 처리할 수 없는 수준의 요청이 들어오면 클러스터는 요청을 거절하게 되는데 그 횟수를 나타낸다.

 

7.6.1 색인 성능 살펴보기

  • 클러스터 색인 성능
    • 프라이머리 샤드에 대한 색인 성능
      • 주기적으로 stats API를 호출하면서 index_total, index_time_in_millis를 통해 단위시간당 색인성능을 계산할 수 있다.
    • 전체 샤드에 대한 색인 성능

 

7.6.2 검색 성능 살펴보기

  • query: 사용자의 검색 요청이 노드에 전달되어 문서를 찾는 과정
  • fetch: 찾은 문서들을 리스트의 형태로 만들어서 정리하는 과정
  • 마찬가지로 주기적으로 stats API를 호출하면서 query, fetch 성능의 단위시간당 성능을 계산할 수 있다.

 

7.6.3 GC 성능 살펴보기

  • /_nodes/stats를 통해 노드별 지표들을 확인한다.
  • young GC, old GC를 단위시간별로 조회하면서 성능을 계산한다.
  • 수십에서 수백ms 정도의 성능을 목표로 해야한다.

 

7.6.4 rejected 살펴보기

  • ElasticSearch의 요청 큐에 처리량 이상이 요청되어 처리를 거부하는 상태
  • 각 스레드(write, forcemerge 등)별로 rejected 수를 확인할 수 있다.
  • 점진적으로 요청이 많아진 경우에는 노드를 추가해야한다.
  • 순간적으로 요청이 많아진 경우에는 큐를 늘리는게 도움이 될 수 있다.
    • thread_pool.write.queue_size: 10000
    • thread_pool.search.max_queue_size: 10000
    • 위와 같은 스레드 풀을 조정하면서 순간적 트래픽에 대응할 수 있다.
Comments