check_esx3 Service Check Timeout

Seit dem Update eines Monitoring-Servers mit Icinga auf Debian 9 (Stretch) liefen auf einmal die Service Checks für unsere VMWare ESXi Hosts in einen Timeout. Für den Check wird check_esx3 benutzt.

Die mit Google gefundenen Lösungsansätze waren alle mind. 2 Jahre alt und basierten darauf irgendwelche Perl HTTP Bibliotheken zu downgraden. Kein praktikabler Lösungsansatz für mich – und in diesem Fall haben diese Vorschläge auch nicht geholfen.

Teilweise (scheinbar nach einem Zufallsprinzip) sind die Checks übrigens durchgelaufen. Aber nur bei ca. jeder zehnten Ausführung.

Um herauszufinden, an welcher Stelle der Timeout auftritt hatte ich den Perl-Debugger aktiviert (Flag -d am Anfang des Scripts) das Script laufen lassen. Es stellte sich heraus, dass das Lesen von /dev/random die Ursache war. Da der Check viele HTTPS-Verbindungen aufbaut scheint dafür auf dem Server nicht genug Entropie vorhanden zu sein. Hier kann man nachlesen, wie man die aktuell vorhandene Entropie auslesen kann. Auf dem Monitoring-Server waren es zwischen 1 und 50 Bytes(?).

Als Lösung habe ich rng-tools installiert, ein Deamon, der Hardware-Zufallszahlen-Generatoren nutzt um die Entropie-Vorräte des Systems aufzufüllen. Dieser kann aber auch z.B. /dev/urandom dafür verwenden. Die Idee dazu kommt von hier.

Da, während ich am Server arbeitete, Entropie generiert wurde, kamen öfter Recoveries. Was mich immer zunächst glauben ließ, das Problem sei jetzt behoben – ein sehr nerviger Effekt.

Jetzt sind konstant 2 KB Entropie vorhanden und die Checks laufen wieder schnell.