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 | 애플리케이션 성능 및 트랜잭션 모니터링 |
'Elastic Search' 카테고리의 다른 글
[LV 6] Elasticsearch 커스텀 플러그인 개발 (1) | 2025.02.02 |
---|---|
[LV 5] Logstash 및 Beats 활용 (ELK Stack 구성) (1) | 2025.02.02 |
[LV 5] Elasticsearch 보안 및 인증 설정 (0) | 2025.02.02 |
[LV 5] Kibana 연동 및 데이터 시각화 (0) | 2025.02.02 |
[LV 4] Elasticsearch Scaling (확장 전략) (0) | 2025.02.02 |