개발자로서 살아남기/ELK Stack 적용하기

ELK - Retrying individual bulk actions that failed or were rejected by the previous bulk request. retrying failed action with response code: 403 에러 발생

코드 살인마 2023. 6. 14. 19:48
728x90

개요

6/11 09:17:33 이후부터 poker , classic, client 인덱스에 로그가 안남고 있는 걸 확인

logstash 로그 확인 결과, 아래와 같은 로그가 발생 중

[2023-06-12T16:00:13,910][INFO ][logstash.outputs.elasticsearch][main]{중략....} Retrying individual bulk actions that failed or were rejected by the previous bulk request.{중략....} retrying failed action with response code: 403 ({"type"=>"cluster_block_exception", "reason"=>"index [shrink-index-2023.06] blocked by: [FORBIDDEN/8/index write (api)];"})

로그 그대로 shrink-index에 데이터을 write하는걸 blocked 당하고 있다는 건데, 6월 달 로그가 벌써 shrink에 들어간 점이 이상하였다.

원인

확인해보니 classic, client의 ILM인 client-index에 WARM 상태에 들어가는 것이 10일로 설정되어 있었다.

WARM 상태 즉 shirnk 된 index에는 data를 write 할 수 없었다.

 

6월달 데이터만 문제가 된 이유는 아래와 같다.

 

기존에는 매일 로그를 남겼기 때문에 ILM에서 10일이 지나면 WARM 상태로 변하도록 설정하였다.

 

하지만, 최근 매일 남기던 로그를 한달로 남기기로 하였는데, 한달 단위로 저장되는 1개의 인덱스가 10일이 지나니 WARM 상태로 변화하여, Block 하고 있었다.

해결

ILM 설정 중 10일이 지나면 WARM 상태로 되는 설정을 disable 하였다.

 

여기서 문제는 이미 shirnk로 되어버린 index이다.

 

elastic에서는 index에 대한 모든 설정은 생성된 이후에서는 변경할 수 없는 규칙이 있다.

 

그렇기 때문에, 문제가 되는 index를 reindex하여, 다른 index로 데이터를 옮기고, delete하였다.


결과적으로 6월 11일 이전 데이터는 `backup_index-2023.06`에 있고,

이후 데이터는 index-2023.06에 있다.

 

reindex 방법

kibana의 Dev Tools 에서 진행한다.

 

1. 기존 index 정보 가져오기

  • GET /index-yyyy.mm.dd

2. 새로운 index 생성

  • 1번에서 얻어온 데이터 참고하여 setting 정보 추가
    1. mappings 부터 맨 아래까지 copy&paste
    2. 변경될 field 수정
    3. provided_name 삭제
    4. creation_date 삭제
    5. uuid 삭제
    6. version 삭제
    7. 마지막 , 로 끝나면 필히 제거

3. reindex 

  • POST _reindex?wait_for_completion=false

아래와 같은 결과가 나온다. (실행이 오래 걸린다.)

{
"conflicts": "proceed",
"source": {
"index": "이전 인덱스"
},
"dest": {
"index": "새로 생성한 인덱스"
}
}

 

4. Index Management 에서 복사가 완료되었는지 확인

  • Docs count 가 기존과 같아지면 복사 완료

 

5. 기존 Index 삭제

  • DELETE /인덱스 이름

6. 복사된 index alias

  • PUT /새로 생성한 인덱스/_alias/이전 인덱스