Elasticsearch에서 슬로우 쿼리 분석하기
Elasticsearch의 슬로우 쿼리를 분석하는 방법과 개선 방안을 실무 중심으로 정리했습니다.
Elasticsearch 슬로우 쿼리란?
Elasticsearch에서 슬로우 쿼리는 실행 시간이 비정상적으로 긴 쿼리를 의미합니다. 이러한 쿼리는 시스템의 성능 저하를 초래하고, 사용자 경험에 악영향을 미칠 수 있습니다. 슬로우 쿼리를 조기에 발견하고 분석하는 것은 서비스의 안정성과 성능을 유지하는 데 매우 중요합니다.
슬로우 쿼리 모니터링 설정하기
Elasticsearch에서는 슬로우 쿼리를 모니터링하기 위해 slowlog 기능을 제공합니다. 이 기능을 활성화하면 특정 시간 이상 소요된 쿼리의 로그를 기록할 수 있습니다. 설정 방법은 다음과 같습니다:
PUT /<index_name>/_settings
{
"index": {
"slowlog": {
"search": {
"threshold": {
"warn": "1s",
"info": "500ms"
}
}
}
}
}
위 설정을 통해 1초 이상 소요되는 쿼리는 경고 로그로 기록됩니다. 이 설정은 인덱스별로 적용할 수 있으며, 필요에 따라 조정할 수 있습니다.

이미지 출처: https://jojoldu.tistory.com/570
슬로우 쿼리 분석하기
슬로우 쿼리를 분석하기 위해서는 먼저 로그를 확인해야 합니다. Elasticsearch의 슬로우 쿼리 로그는 기본적으로 logs 디렉토리에 저장됩니다. 로그를 확인하는 방법은 다음과 같습니다:
cat /var/log/elasticsearch/slowlog.log
로그를 통해 어떤 쿼리가 슬로우 쿼리로 기록되었는지 확인할 수 있습니다. 예를 들어, 다음과 같은 로그가 있을 수 있습니다:
[2023-10-01T12:00:00,000][WARN][index.search.slowlog.query] [node-1] [my_index] took[2.5s], took_millis[2500], stats[search], id[12345], search_type[query]
위 로그는 my_index에서 특정 쿼리가 2.5초가 소요되었음을 나타냅니다. 이 정보를 바탕으로 쿼리를 최적화할 수 있습니다.
슬로우 쿼리 최적화 방안
슬로우 쿼리를 최적화하기 위한 몇 가지 방법은 다음과 같습니다:
- 쿼리 리팩토링: 비효율적인 쿼리를 개선합니다. 예를 들어, 불필요한 필드를 요청하지 않도록 쿼리를 수정합니다.
- 인덱스 최적화: 인덱스의 매핑을 재검토하고, 필요한 경우 재구성합니다. 예를 들어, 자주 검색되는 필드는
keyword타입으로 설정하여 검색 성능을 향상시킬 수 있습니다. - 샤드 및 복제본 조정: 인덱스의 샤드 수와 복제본 수를 조정하여 성능을 개선합니다. 샤드 수가 너무 많으면 성능 저하가 발생할 수 있습니다.
- 캐시 활용: Elasticsearch는 쿼리 결과를 캐시할 수 있습니다. 자주 실행되는 쿼리는 캐시를 활용하여 성능을 개선할 수 있습니다.

이미지 출처: https://jojoldu.tistory.com/570
실무 체크리스트
슬로우 쿼리를 분석하고 최적화하기 위해 다음과 같은 체크리스트를 활용해 보세요:
- 슬로우 쿼리 로그가 활성화되어 있는가?
- 슬로우 쿼리 로그를 정기적으로 확인하고 있는가?
- 비효율적인 쿼리를 리팩토링했는가?
- 인덱스의 매핑을 최적화했는가?
- 샤드와 복제본 설정을 검토했는가?
- 쿼리 캐시를 활용하고 있는가?
마무리
Elasticsearch의 슬로우 쿼리를 분석하고 최적화하는 것은 성능 개선의 중요한 첫걸음입니다. 슬로우 쿼리 로그를 통해 문제를 조기에 발견하고, 적절한 대응을 통해 시스템의 안정성을 높일 수 있습니다. 위에서 제시한 방법들을 통해 지속적으로 성능을 모니터링하고 개선해 나가시기 바랍니다.
실무 적용 체크리스트
- Elasticsearch slow query 분석을 적용하기 전에 현재 운영 환경의 기준값과 예외 상황을 먼저 정리합니다.
- 변경 전후로 확인할 지표를 정하고, 문제가 생겼을 때 되돌릴 수 있는 절차를 문서화합니다.
- 한 번에 모든 서버나 서비스에 적용하기보다 작은 범위에서 검증한 뒤 점진적으로 확대합니다.
- 담당자, 확인 시간, 장애 판단 기준을 명확히 남겨 같은 문제가 반복될 때 빠르게 대응할 수 있게 합니다.