Info
- 2024년에 직접 경험한 내용을 다루고 있습니다.
- Elasticsearch 7.10 버전 기준입니다.
3월 초 월요일 02 ~ 09시 사이 프로젝트 내부망의 이벤트 로그가 적재되지 않는 장애가 있었습니다.
Elasticsearch의 모니터링 기능
Elasticsearch 구성 요소의 각종 메트릭•로그를 수집하는 기능으로 X-Pack에 포함되어 있습니다.
HTTP exporter 기준 모니터링 기능 설정 시 데이터는 특정 인덱스(Index)에 적재되며 Elasticsearch 인덱스의 기본 형태는 .monitoring-es-*
입니다.
기본적으로 모든 활동을 기록하는 것으로 알고 있습니다.
(확실한 자료를 찾지 못했는데, 혹시 그렇지 않다면 제보 부탁드립니다.)
인덱스는 기본 설정의 경우 하루마다 날짜가 바뀌어 새로 생성됩니다.
Elasticsearch의 디스크 할당 정책
Elasticsearch에서는 디스크 사용량에 따라 3단계로 정책을 적용합니다.
-
Low watermark (기본 설정 : 85%)
일정 사용량을 넘으면 해당 노드에 더 이상 샤드(Shard)를 만들지 않습니다. -
High watermark (기본 설정 : 90%)
일정 사용량을 넘으면 해당 노드의 샤드를 다른 노드에 재배치 시도합니다. -
Flood stage watermark (기본 설정 : 95%)
문제가 되는 노드의 모든 인덱스를 읽기만 가능하도록 전환합니다. 이 정책은 대상 인덱스의 모든 샤드에 적용되기 때문에, 실제 장애가 아닌 노드에도 영향이 있습니다.
예를 들어,sample-index
의 샤드가 A, B 노드에 배치되어 있는데 B 노드에 문제가 생기면 A에 문제가 없어도sample-index
인덱스는 읽기만 가능합니다.
이 중 Flood stage watermark는 디스크 문제가 해결되어도 자동 해제되지 않기 때문에 디스크 문제 해결 후 수동으로 설정을 해제해야 합니다.
PUT /sample-index/_settings
{
"index.blocks.read_only_allow_delete": null
}
문제 상황 및 원인
-
특정 앱에서 로그 단계를
TRACE
로 설정하여 과도한 로그가 발생하였습니다. -
이로 인해 모니터링 인덱스에 Flood stage watermark가 활성화되었습니다.
-
모니터링 인덱스에 쓰기 작업이 불가능해지면서 모든 로그 적재에 영향을 주었습니다.
-
9시 (UTC 0:00)가 되어 날짜가 변경되고 새로운 인덱스가 생성되었습니다.
- 해당 인덱스는 Low watermark에 의해 다른 노드에 생성되었습니다.
-
새로 생성된 인덱스는 쓰기가 가능하기 때문에 문제가 해결되고 로그 기능이 정상화되었습니다.
문제 조치
- 문제 상황은 관련 앱에 통보 후 디스크 용량을 확보하여 해결되었습니다.
- 문제가 발생하기 이전에 디스크 부족 알림이 있었는데 다른 알림에 묻혀서 인지하지 못한 문제가 있었습니다. 알림 기준을 새로 논의하기로 하였습니다.
- 기존에 로그 표준을 준수하지 않은 경우 별도의 인덱스에 저장되고 있었는데 이번 장애의 원인이기도 했습니다. 이는 협의를 통해 지원하지 않을 예정입니다.