devcken.io

Thoughts, stories and ideas.

Logstash slow start-up time and exhausting entropy

이 포스트는 Ben Passmore가 작성한 동일 이름의 포스트를 번역한 것입니다. 심각한 오역이나 손발이 오그라드는 직역이 있을 수도 있습니다.

최근에 저는 훈련을 위해 ELK 스택으로 작업해왔습니다. 요구되는 모든 소프트웨어를 실행하기 위해 작은 VM으로 프로비전했고 Logstash는 적은 양의 로그를 적절하게 수집했었습니다.

Logstash aggregate filter를 조절하기 시잭했을 때 갑자기 모든 Logstash가 완전히 먹통이 되었습니다. 어떤 로그도, 어떤 경고나 오류도 없었으며, 여전히 systemd는 Logstash가 잘 실행되고 있다고 알려주었습니다.

두 시간 뒤에도 문제가 지속되어 Logstash를 완전히 다시 설치했습니다. 절망 속에서 약각의 시간을 더 보냈고 갑자기 로그가 흐르기 시작했습니다.

Logstash가 시작하는데 5분 정보가 걸린다는 것을 알게 되었습니다. 약간의 연구 끝에 Github 이슈를 찾아냈고 해당 이슈에 대해 자세히 설명하고 있는 JRuby wiki로 저를 인도해주었습니다:

JRuby가 시작될 때, 난수 생성을 책임지는 JDK 라이브러리는 (적어도) 초기 상태의 엔트로피를 위해 /dev/random으로 시작한다. 이 시점 이후에, 좀 더 최근 버전의 JRuby는 후속 난수를 위해 PRNG를 사용하지만, 과거 버전은 계속해서 /dev/random을 반환한다. 불행하게도 /dev/random은 /dev/randome으로부터 읽어들이는 작업이 엔트로피 풀(pool)이 복귀할 때까지 반환되지 않는다는 보장을 제공해 "괜찮은" 난수를 "고갈"시킬 수 있다. 일부 시스템(특히 가상 시스템)에서 엔트로피 풀은 JRuby의 시작 시간 혹은 실행 시간을 현저히 느리게 만들 만큼 작을 수 있다.

"특히 가상 시스템"이라는 말을 눈여겨두세요. 이용 가능한 엔트로피를 보려면, 다음을 실행해보세요:

cat /proc/sys/kernel/random/entropy_avail  

1000보다 작다면 최적화되지 않은 것입니다. 제 경우에는 54를 반환했습니다!

역자 주: 제 경우에는 46을 반환했습니다!!!

한 가지 해결책은 haveged 패키지를 설치하는 것입니다. 설치하고 나면 Logstash가 적절한 시간 내에 시작될 겁니다. 두 시간을 허비했지만, 이 포스트가 몇몇 사람들에게 도움이 되길 소망합니다.