Servermonitoring met een Raspberry Pi
Servermonitoring hoeft niet altijd complex te zijn, veel basisdata zijn ook zonder totaaloplossingen als Nagios of Check_MK te monitoren. Dat kan zelfs met de kleine Raspberry Pi – en een groot scherm voor het overzicht.
Monitoringoplossingen als Nagios, Icinga en Check_MK zijn ongetwijfeld krachtige tools, maar het gebruik ervan vergt wel de nodige voorkennis en een inwerkperiode. Bovendien moeten er op de te monitoren servers diensten ingesteld worden die de monitoringdata gaan leveren. Terwijl eenvoudige data zoals processor- en geheugenbelasting vaak genoeg zijn om te beoordelen of een server wat extra aandacht nodig heeft of niet.
Door het combineren van ClusterSSH en de performance-monitor nmon kun je makkelijk een handvol servers en clients in het oog houden als je eenvoudigweg nmon op elke server installeert. De data worden door een Raspberry Pi via SSH verzameld en overzichtelijk getoond op een groot scherm. Behalve nmon en SSH zijn op de servers en de client geen andere diensten nodig.
VERZAMELEN
De performance-monitor nmon levert de processoren geheugenbelasting, maar ook statistieken over het netwerk en de harde schijven. De clou: nmon heeft geen rootrechten nodig, een eenvoudig user-account is al voldoende. Dat kun je gebruiken om op elke server een aparte nmon-user aan te maken, die via SSH als enige commando nmon mag uitvoeren. ClusterSSH zorgt ervoor dat de nmon-output van alle servers op een Raspberry Pi bij elkaar wordt geharkt en op de desktop wordt weergegeven.
Om ervoor te zorgen dat de Raspberry Pi later met ClusterSSH op alle servers nmon kan aanroepen zonder het opgeven van toegangsgegevens, open je op de Pixel-desktop van Raspbian een Terminal. Maak met het commando ssh-keygen eerst een sleutel aan. Als je de standaardinstellingen overneemt, komt je publieke sleutel in het bestand .ssh/id_rsa.pub te staan als enkele regel met een lange alfanumerieke tekenreeks.
Bovendien vraagt ssh-keygen naar een passphrase om de SSH-sleutel van de Raspberry Pi te beschermen tegen misbruik – wat in principe een goed idee is. Alleen heb je dan wel een toetsenbord nodig om de passphrase na elke herstart in te typen. Zonder passphrase start de servermonitoring automatisch.
Als je ClusterSSH nog niet op de Raspberry Pi hebt staan, moet je dat eerst nog even doen met sudo aptget install clusterssh.
Bij de volgende stap maak je op de te monitoren servers de gebruiker nmon aan, waar je rootrechten voor nodig hebt: useradd-m nmon. Om te zorgen dat de Raspberry Pi zich met een SSH-key mag aanmelden en dan beperkt wordt tot het gebruik van het commando nmon, maak je de directory /home/nmon/.ssh aan: mkdir -p -m 700 /home/nmon/.ssh
Daarin maak je het bestand authorized_keys aan, waarin je de commandobeperking zet en de alfanumerieke publieke sleutel van de Raspberry Pi uit het bestand id_rsa.pub:
command="/usr/bin/nmon" ssh-rsa AA... Als laatste moet je dan nog de rechten aanpassen: chown -R nmon:nmon /home/nmon/.ssh chmod 600 /home/nmon/.ssh/a*_keys Daarmee is alles aan de serverkant al klaar.
BIJNAMEN
ClusterSSH onderscheidt zich van een gewone SSHsessie in een Terminal doordat het programma voor elke aangegeven server een eigen Terminal-venster opent en deze vensters alfabetisch naast en onder elkaar geordend toont op basis van de opgegeven hostnamen. Daarnaast is er een tekstinvoerveld dat met alle Terminals verbonden is. Een commando dat je daar intypt, wordt dan op alle Terminals tegelijkertijd uitgevoerd. Op die manier kun je ook nmon op alle servers tegelijkertijd bedienen en bijvoorbeeld met de commando’s c en m de processor- en de memorybelasting op alle Terminals weergeven.
Met welke servers ClusterSSH contact moet maken, kun je aangeven in het bestand .clusterssh/clusters, dat je nieuw moet aanmaken. Daarin krijgt elke server een alias, zoals in dit voorbeeld:
monitor nmon@localhost server1 nmon@3.123.1.23 server2 nmon@my.example.com:1022
Daarmee heb je de aliassen monitor, server1 en server2 gedefinieerd – waarbij ClusterSSH bij server2 de
poort 1022 zal gebruiken in plaats van de standaard SSH-poort 22. Je kunt ook meerdere aliassen samenvoegen met all server1 server2 monitor. Door cssh all uit te voeren, zal ClusterSSH een verbinding opbouwen met alle servers die vallen onder het alias all en voor elke server een eigen Terminal-venster openen. Via SSH wordt wel voor elke verbinding afzonderlijk gevraagd naar de passphrase van de sleutels. Dat is te voorkomen door de SSH-agent vooraf te starten en de sleutels te laden. Daarna kun je ClusterSSH starten zonder dat er verder nog naar iets gevraagd wordt:
ssh-agent ssh-add .ssh/id_rsa cssh all
Die commando’s kun je het beste opslaan in het script mon, waarbij je aan het begin nog de bekende shebang #!/bin/bash moet toevoegen, zodat het script zelfstandig kan draaien. Bovendien moet je het met chmod a+x mon uitvoerbaar maken.
Om ervoor te zorgen dat het script in het vervolg na een herstart automatisch uitgevoerd wordt, kopieer je eerst het bestand autostart uit de map /etc/xdg/lxsession/LXDE-pi naar ~/.config/lxsession/LXDE-pi en voeg je aan het eind de volgende regel toe:
@lxterminal -e /home/pi/mon
Op die manier geconfigureerd, wacht de SSH-agent na een herstart van de Raspberry Pi op het intypen van de SSH-passphrase, en vervolgens maakt ClusterSSH dan de verbindingen met de servers.
Aan de ordening van de Terminal-vensters door ClusterSSH valt nog wat te verbeteren. De afstanden tussen de in vergelijking grote venstertitels en de menu’s van de Pixel-desktop van Raspbian zijn bijvoorbeeld te klein. Dat is in het bestand ~/.clusterssh/config echter makkelijk te corrigeren door een paar pixels ruimte boven de eigenlijke Terminals te reserveren: terminal_reserve_top=40.
Met andere parameters, die je eveneens in het configuratiebestand kunt vinden, kun je ook de grootte van de vensters en het font en de grootte daarvan veranderen.
SCHERM OP AAN
Dan moet je nog een enkel ding doen voordat je de Raspberry Pi in productiegebruik kunt nemen: je moet voorkomen dat de X-server na tien minuten van inactiviteit het beeldscherm op zwart zet. De meest absurde, maar ook simpelste manier is om een screensaver te installeren, om die dan meteen daarna weer uit te schakelen. Voor het installeren daarvan voer je het volgende commando uit: sudo apt-get install xscreensaver. Vervolgens zit de screensaver in het menu van de Raspbian-desktop onder Settings. Raspbian merkt bij de eerste aanroep dat de screensaver nog niet draait – en start hem dan alsnog. Dan zet je op het tabblad ‘Display Modes’ de modus van ‘Random Screen Saver’ op ‘Disable Screen Saver’ – waardoor de monitor dan altijd aan blijft staan.
Om de belangrijkste waarden altijd in de gaten te kunnen houden, moet je een zo groot mogelijke monitor op de Raspberry Pi aansluiten. Daar zou je bijvoorbeeld prima een tv voor kunnen gebruiken – zelfs een nieuwe is vaak nog goedkoper dan een computermonitor met dezelfde afmetingen. De enige beperking: het moet een model zijn dat met full-hd overweg kan, oftewel 1920 bij 1080 pixels kan weergeven. Met name bij de tv’s met de grootte van 32 inch heb je vaak alleen HD-ready: die hebben dan een resolutie van 1366 bij 768 pixels. Een full-hd-signaal wordt dan omlaag geschaald, wat tot een zeer slechte leesbaarheid leidt. Een HD-ready-tv moet je dan ook alleen gebruiken als het commando xrandr in de Terminal de oorspronkelijke resolutie van de tv laat zien en niet 1920 bij 1080. Soms kan het nodig zijn om de Raspberry Pi op een VGA- of DVI-ingang van een tv aan te sluiten, als die er al is, zodat de Raspberry Pi de tv op de juiste manier kan aansturen – sommige apparaten melden op de verschillende ingangen soms verschillende resoluties.
OPLOSMIDDELEN
Als de Raspberry Pi automatisch terugvalt op een zeer lage resolutie, kan dit komen doordat de tv via de HDMI- of DVI-ingang incomplete of zelfs verkeerde EDID-data aan de Raspberry Pi meldt. In het ergste geval start de Raspberry Pi dan met 640 bij 480 pixels. Dat betekent echter niet dat de tv geen hogere resoluties ondersteunt – soms hoef je de Raspberry Pi alleen van de progressive- naar de interlaced-modus om te schakelen om een beeld te krijgen.
Dat doe je met het bestand /boot/config.txt. Daar staan de parameters hdmi_group en hdmi_mode, die standaard voorzien zijn van hekjes (hashtags) aan het begin van de regel. Verwijder de hekjes en vul daar een waarde in uit de tabel op deze pagina. De klassieke video-modi krijg je voor elkaar met hdmi_group=1, de voor pc’s gebruikelijke resolutie 1366 bij 768 krijg je echter alleen met hdmi_group=2. De tabel is niet compleet, maar laat alleen de voor tv’s gebruikelijke waarden zien. Meer dan full-hd kan een Raspberry Pi sowieso niet aan, de maximale resolutie is 1920 bij 1080 pixels met een lage framerate.
Om de instellingen te laten werken, moet je de Raspberry Pi elke keer herstarten. Zorg dat je een tweede computer en een microSD-kaartlezer of SSH-client in de buurt hebt, want als je een modus afgedwongen hebt waar de tv niets mee kan beginnen, krijg je helemaal geen beeld. Dan moet je een andere waarde in het bestand config.txt gaan zetten. Als helemaal niets lijkt te werken, kun je de parameters hdmi_group en hdmi_mode altijd weer uit het bestand config.txt halen of er weer hekjes voor zetten – dan gebruikt de Raspberry Pi weer de normale standaardresolutie.