Elasticsearch 운영 및 모니터링

📌 Elasticsearch를 안정적으로 운영하기 위해서는 **모니터링, 메모리 관리, 인덱스 라이프사이클 관리(ILM), 애플리케이션 성능 모니터링(APM)**이 필수적입니다.


Monitoring (클러스터 및 노드 상태 모니터링)

Elasticsearch의 클러스터 및 노드 상태를 _cluster/stats, _nodes/stats API를 사용하여 실시간 모니터링할 수 있습니다.


(1) 클러스터 상태 조회

GET _cluster/health

🔹 응답 예시

{
  "cluster_name": "my-cluster",
  "status": "yellow",
  "number_of_nodes": 3,
  "number_of_data_nodes": 2,
  "active_primary_shards": 5,
  "active_shards": 10,
  "unassigned_shards": 1
}

"status":

  • "green" → 모든 샤드가 정상적으로 할당됨.
  • "yellow" → 일부 복제본(Replica)이 할당되지 않음.
  • "red" → 일부 프라이머리 샤드(Primary Shard) 할당 불가 (데이터 손실 가능).

(2) 클러스터 통계 조회

GET _cluster/stats

샤드 개수, 노드 수, 디스크 사용량 등 클러스터 전반적인 상태 확인.


(3) 노드 상태 조회

GET _nodes/stats

각 노드의 CPU, 메모리, 디스크 사용량 확인 가능.


(4) Elasticsearch에 Kibana X-Pack Monitoring 연동

  • Kibana의 Stack Monitoring 기능을 사용하면 Elasticsearch의 상태를 시각적으로 모니터링 가능.
  • xpack.monitoring.collection.enabled: true 설정 필요.
xpack.monitoring.collection.enabled: true

Elasticsearch 클러스터와 노드 상태를 Kibana에서 실시간으로 모니터링.


Elasticsearch Heap Memory 관리

Elasticsearch는 JVM Heap Memory를 사용하기 때문에 메모리 관리가 중요합니다.
JVM Heap이 부족하면 GC(가비지 컬렉션) 오버헤드 증가 → 성능 저하 발생.


(1) Heap Memory 크기 확인

GET _nodes/stats/jvm

🔹 응답 예시

{
  "nodes": {
    "node-1": {
      "jvm": {
        "mem": {
          "heap_used_percent": 75,
          "heap_used_in_bytes": 8048000000,
          "heap_max_in_bytes": 10737418240
        }
      }
    }
  }
}

Heap 사용량이 75% 이상이면 메모리 최적화 필요.


(2) Heap Memory 설정 (jvm.options)

-Xms4g
-Xmx4g

Heap 크기는 전체 서버 메모리의 50% 이하로 설정 (최대 32GB 미만).


(3) 가비지 컬렉션 튜닝 (jvm.options)

-XX:+UseG1GC

G1GC(Garbage First Garbage Collector) 사용하여 GC 성능 최적화.


Index Lifecycle Management (ILM)

ILM(Index Lifecycle Management)은 인덱스의 라이프사이클을 자동으로 관리하는 기능입니다.
이를 통해 디스크 공간 절약, 성능 최적화, 자동 삭제가 가능합니다.


(1) ILM 정책 생성

PUT _ilm/policy/log_policy
{
  "policy": {
    "phases": {
      "hot": {
        "min_age": "0ms",
        "actions": {
          "rollover": {
            "max_size": "50gb",
            "max_age": "7d"
          }
        }
      },
      "warm": {
        "min_age": "30d",
        "actions": {
          "allocate": {
            "number_of_replicas": 1,
            "include": { "box_type": "warm" }
          }
        }
      },
      "delete": {
        "min_age": "90d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

7일 또는 50GB가 넘으면 새로운 인덱스로 롤오버 → 30일 후 Warm 노드로 이동 → 90일 후 삭제.


(2) ILM 정책을 인덱스에 적용

PUT _index_template/logs_template
{
  "index_patterns": ["logs-*"],
  "template": {
    "settings": {
      "index.lifecycle.name": "log_policy"
    }
  }
}

새로 생성되는 logs-* 인덱스에 ILM 정책 자동 적용.


Elastic APM (Application Performance Monitoring)

Elastic APM은 애플리케이션의 성능을 모니터링하고 문제를 분석할 수 있도록 도와줍니다.


(1) Elastic APM 서버 설치

docker run -d --name apm-server -p 8200:8200 --user=apm-server elastic/apm-server:8.x

APM 서버를 실행하여 애플리케이션 데이터를 수집할 준비 완료.


(2) APM 설정 (apm-server.yml)

apm-server:
  host: "0.0.0.0:8200"

output.elasticsearch:
  hosts: ["http://localhost:9200"]

APM 데이터를 Elasticsearch로 전송.


(3) 애플리케이션에 APM 에이전트 적용

🔹 Node.js (Express)

require('elastic-apm-node').start({
  serviceName: 'my-node-app',
  serverUrl: 'http://localhost:8200'
});

APM 에이전트를 Node.js 애플리케이션에 추가하여 성능 모니터링.


(4) Kibana에서 APM 데이터 확인

  • Kibana → APM 메뉴에서 응답 시간, 에러율, 트랜잭션 분석 가능.
  • Slow Query 분석, 서비스간 연관 관계 분석 지원.

Elasticsearch 운영 및 모니터링 정리

기능 설명
클러스터 및 노드 모니터링 _cluster/stats, _nodes/stats API를 사용하여 상태 모니터링
Heap Memory 관리 JVM Heap 크기 조정, G1GC 사용하여 성능 최적화
Index Lifecycle Management (ILM) 오래된 인덱스를 자동으로 이동 및 삭제하여 저장 공간 절약
Elastic APM 애플리케이션 성능 및 트랜잭션 모니터링

 

+ Recent posts