상황
로그 스테이시의 Lag이 갑자기 선형적으로 증가하고, Kibana에서 ES 데이터가 조회가 안되는 상황.
원인
[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
장기적인 방안
- ES 데이터 보관 주기를 줄인다 (이 방안으로 갈 예정)
- ES 디스크를 늘려준다
'트러블 슈팅 > 인프라' 카테고리의 다른 글
(Redis) 레디스 클러스터를 사용하는 어플리케이션의 커넥션 타임아웃 에러 (0) | 2024.06.17 |
---|---|
(Kafka) Kafka Streams에서 Repartition Topic을 Consume하지 못하는 장애(feat: kafkaAdminCli) (0) | 2024.06.16 |
(Kafka) Kafka Streams에서 Repartition Topic을 Consume하지 못하는 장애 (feat: Metric으로 Lag값 추출) (0) | 2024.05.18 |
(Kafka) 유효하지 않은 레코드가 토픽에 들어와 카프카 어플리케이션 장애가 났을 때 (2) | 2024.05.08 |
(Airflow) 배치 날짜값 오차로 인한 통계값 오류가 발생한 이슈 2 (8) | 2024.05.01 |