트러블 슈팅/인프라

(ES) 엘라스틱 서치 용량 부족으로 인한 미적재 이슈

지혜와 본질을 추구하는 자 2024. 10. 6. 14:21

상황

 로그 스테이시의 Lag이 갑자기 선형적으로 증가하고, Kibana에서 ES 데이터가 조회가 안되는 상황.

 

[사진 1] Lag이 선형적으로 증가

 

원인

[INFO ][logstash.outputs.elasticsearch][main][e38dddd91e7fd542db9b636944e2d369cbc7ce18c8d0a46ff86880f6be7cfd2b] retrying failed action with response code: 429 ({"type"=>"cluster_block_exception", "reason"=>"index [log-2024-10-05] blocked by: [TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block];"})

ES 디스크가 flood-stage로 변하여 read-only 상태가 된 것.

 

 

curl -X GET "localhost:9200/_cat/allocation?v"

확인 결과 디스크 사용량이 최대 97%까지 올랐고

 

GET _cluster/settings?include_defaults=true&filter_path=**.disk.watermark*

해당 인프라의 flood-stage 워터마크 처리기준은 97%였던 것.

 

해결 방안

단기적인 방안

우선 현재 ES의 보관 주기가 n일 이라고 했을 때, 현재 날짜 시점의 -n일 데이터를 삭제함. (즉 가장 이른 날짜의 인덱스 삭제)

이후 log-stash에서 리밸런싱 이후 정상적으로 데이터 적재 되는 것 확인.

[2024-10-06T04:21:10,988][INFO ][org.apache.kafka.clients.consumer.internals.ConsumerCoordinator][main][58a1bbbdf0a1524c7cb154f6bb855b57ca891b697e372b23d2ee620222eb4b2d] [Consumer clientId=logstash-4, groupId=elasticsearch-sink-logstash] Setting offset for partition application-52 to the committed offset FetchPosition{offset=4806989034, offsetEpoch=Optional[53], currentLeader=LeaderAndEpoch{leader=Optional[kafka-cluster-kafka-5.kafka-cluster-kafka-brokers.manage.svc:9092 (id: 5 rack: kubecluster-prod1-330e45-k8s-worker-5)], epoch=53}}
[2024-10-06T04:21:19,956][INFO ][org.apache.kafka.clients.consumer.internals.ConsumerCoordinator][main][58a1bbbdf0a1524c7cb154f6bb855b57ca891b697e372b23d2ee620222eb4b2d] [Consumer clientId=logstash-4, groupId=elasticsearch-sink-logstash] Adding newly assigned partitions: application-52
...
[2024-10-06T04:21:19,957][INFO ][org.apache.kafka.clients.consumer.internals.ConsumerCoordinator][main][58a1bbbdf0a1524c7cb154f6bb855b57ca891b697e372b23d2ee620222eb4b2d] [Consumer clientId=logstash-4, groupId=elasticsearch-sink-logstash] Setting offset for partition application-52 to the committed offset FetchPosition{offset=4806989628, offsetEpoch=Optional[53], currentLeader=LeaderAndEpoch{leader=Optional[kafka-cluster-kafka-5.kafka-cluster-kafka-brokers.manage.svc:9092 (id: 5 rack: kubecluster-prod1-330e45-k8s-worker-5)], epoch=53}}
[2024-10-06T04:21:34,821][INFO ][org.apache.kafka.clients.consumer.internals.ConsumerCoordinator][main][58a1bbbdf0a1524c7cb154f6bb855b57ca891b697e372b23d2ee620222eb4b2d] [Consumer clientId=logstash-3, groupId=elasticsearch-sink-logstash] Revoke previously assigned partitions application-52

 

[사진 2] kibana에서 정상 적재되고 있다.

 

장기적인 방안

  • ES 데이터 보관 주기를 줄인다 (이 방안으로 갈 예정)
  • ES 디스크를 늘려준다