- 기술
- 문제해결
Kibana에서 CSV로 내보내기 문제해결

또 왜그러니...🔗
업무중 Kibana에 접속해 Discover로 데이터 확인을 할 일이 종종있다.
그 와중에 조회된 데이터를 CSV로 내보내기 할 일이 생겨 Reporting 기능을 사용하는데,
생각처럼 잘 되지 않는 경우가 있었다.
조회된 데이터는 약 300,000건인데,
정작 내보내기를 하면 10분의 1정도의 데이터만 내보내기가 되어있는 것이다.
거의 완벽한 ELK 스택이지만, CSV 내보내기 기능은 크게 중요하게 생각하지 않았나보다...하고
안일하게 생각할 뻔 했지만, 그럴리 없다는 판단에 문서를 확인해보았다.
가이드 문서확인🔗
우선 Kibana의 Reporting and Sharing 가이드를 찾아보았지만
시작하기 가이드 페이지라서 그런지 상세한 내용은 나와있지 않았다.
자세한 설정은 Configure Kibana 페이지에 내용이 상세히 나와있었다.
발견한 문제🔗
업무에 사용하는 Kibana Setting에는 크게 네 가지의 문제가 있었다.
- 리포팅 Encryption key 설정
- CSV 내보내기 최대크기 설정
- Elasticsearch http 최대전송크기 설정
- job 타임아웃 설정
CSV 최대크기 제한은 있을 것 같았지만, Encryption key설정이나 대역폭 제한은 생각하지 못했다.
해결과정🔗
- Encryption key 설정
Reporting 기능으로 내보내기를 간단하게 사용할 때는 간헐적으로 보이던 오류였다.
그러나 데이터사이즈가 커지니 기존 export 요청이 peding상태일 때 재요청을 하면, 해당오류가 발생했다.
오류메시지를 확인하니 친절하게도
xpack.reporting.encryptionKey
를 설정한 뒤 재시도하라고 알려준다.알려준대로 kibana.yml 내에 아래와 같이 설정을 추가해주었다.
그리고는 키바나를 재시작
ELK스택을 도커환경에서 사용중이다 재시작이 완료된 이후부터 같은 오류는 발생하지 않았다.
- CSV 내보내기 최대크기 설정
공식문서에 들어가면 찾고 있었던 눈에 띄는 항목이 있다.
https://www.elastic.co/guide/en/kibana/current/reporting-settings-kb.html 따라가보니
xpack.reporting.csv.maxSizeBytes
설정항목이 있다는 것을 알게되었다.별다른 설정이 없으면 기본값인 10mb로 설정되어 있었고, 그 이상을 원한다면 따로 설정해주어야 한다.
그래서 나는 최대크기는 200mb정도는 필요하다고 예상했기에,
아래와 같이 kibana.yml에 추가로 한줄을 더 삽입하였다.
물론 CSV최대 바이트수를 200mb로 늘리긴 했지만 추가설정이 필요하다.
주의사항을 읽어보면 무작정 늘릴 수 있는 것은 아니고, 다음과 같은 한계를 잘 고려해야한다.
다음 항목에서 이어서 설명하겠다.
- Elasticsearch http 최대 전송크기
Kibana는 1차적으로 Elasticsearch의 인덱스 데이터를 보여주는 도구이다.
따라서 Elasticsearch에서 보낸 데이터를 네트워크 통신을 거쳐 보여준다.
결국 Elasticsearch쪽의 최대 대역폭도 받쳐줘야 하는것이다.
공식문서에 따르면 기본값은 100mb라서 원하는 목표를 달성하려면 다음과 같이 늘려주어야 한다.
마찬가지로 elasticsearch를 재시작하면 새로 설정한 값이 반영되어 있다.
- Timeout 설정
이쯤하면... 해결되어야 겠지만, 한가지 문제가 더 남았다. 용량도 대역폭도 늘렸지만, 타임아웃 문제도 있었다.
큰 데이터를 내보내다보니 리포팅에 소요되는 시간도 길어지고,
그러다보니 기본으로 설정된 timeout 시간을 초과하는 것이었다.
이 설정은 공식문서의 여기에서 확인 할 수 있다.
문서에 나와있는
xpack.reporting.queue.timeout
의 기본값은 2분이다.대략 5분이면 충분할 것 같아 아래와 같이 수정했다.
드디어 해결!🔗
이로서 다시 CSV export 기능을 활용하니 모든 데이터가 잘 내보내졌다.
30만개의 데이터를 콸콸 잘 뽑아냈다.
앞으로도 이 기능을 활용할 때는
- csv 용량제한 범위 안에서
- elastic 대역폭을 넘지않는 선에서
- timeout내로 완료된다면
시스템자원이 허락하는 한 정상작동 할 것이다.
늘 이런문제를 만날때마다 긴장된다. 어떤 시행착오가 기다리고 있을지 모르기 때문이다.
이 문제를 해결하면서 든 생각은 정말 Elastic의 문서는 잘 만들어졌다는 생각을 했다.
잘 만들어진 문서 덕분에 크게 헤메지않고 정답을 향해 빠르게 다가갈 수 있었다.
필요로 하는 내용은 모두 정리되어 있고, 찾기도 어렵지 않았다.
후... 이런것을 무료로 서비스하는 Elastic 당신들은 정말이지 도덕책...
비슷한 문제를 겪고 있는 분들에게, 이 글이 도움이 되었으면 좋겠다.