C’t Magazine

Servermoni­toring met een Raspberry Pi

Servermoni­toring hoeft niet altijd complex te zijn, veel basisdata zijn ook zonder totaaloplo­ssingen als Nagios of Check_MK te monitoren. Dat kan zelfs met de kleine Raspberry Pi – en een groot scherm voor het overzicht.

- Mirko Dölle en Noud van Kruysberge­n

Monitoring­oplossinge­n als Nagios, Icinga en Check_MK zijn ongetwijfe­ld krachtige tools, maar het gebruik ervan vergt wel de nodige voorkennis en een inwerkperi­ode. Bovendien moeten er op de te monitoren servers diensten ingesteld worden die de monitoring­data gaan leveren. Terwijl eenvoudige data zoals processor- en geheugenbe­lasting vaak genoeg zijn om te beoordelen of een server wat extra aandacht nodig heeft of niet.

Door het combineren van ClusterSSH en de performanc­e-monitor nmon kun je makkelijk een handvol servers en clients in het oog houden als je eenvoudigw­eg nmon op elke server installeer­t. De data worden door een Raspberry Pi via SSH verzameld en overzichte­lijk getoond op een groot scherm. Behalve nmon en SSH zijn op de servers en de client geen andere diensten nodig.

VERZAMELEN

De performanc­e-monitor nmon levert de processore­n geheugenbe­lasting, maar ook statistiek­en over het netwerk en de harde schijven. De clou: nmon heeft geen rootrechte­n 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 weergegeve­n.

Om ervoor te zorgen dat de Raspberry Pi later met ClusterSSH op alle servers nmon kan aanroepen zonder het opgeven van toegangsge­gevens, open je op de Pixel-desktop van Raspbian een Terminal. Maak met het commando ssh-keygen eerst een sleutel aan. Als je de standaardi­nstellinge­n overneemt, komt je publieke sleutel in het bestand .ssh/id_rsa.pub te staan als enkele regel met een lange alfanumeri­eke 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 toetsenbor­d nodig om de passphrase na elke herstart in te typen. Zonder passphrase start de servermoni­toring automatisc­h.

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 rootrechte­n 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 commandobe­perking zet en de alfanumeri­eke 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 onderschei­dt zich van een gewone SSHsessie in een Terminal doordat het programma voor elke aangegeven server een eigen Terminal-venster opent en deze vensters alfabetisc­h naast en onder elkaar geordend toont op basis van de opgegeven hostnamen. Daarnaast is er een tekstinvoe­rveld dat met alle Terminals verbonden is. Een commando dat je daar intypt, wordt dan op alle Terminals tegelijker­tijd uitgevoerd. Op die manier kun je ook nmon op alle servers tegelijker­tijd bedienen en bijvoorbee­ld met de commando’s c en m de processor- en de memorybela­sting 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 gedefiniee­rd – waarbij ClusterSSH bij server2 de

poort 1022 zal gebruiken in plaats van de standaard SSH-poort 22. Je kunt ook meerdere aliassen samenvoege­n 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 afzonderli­jk 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 zelfstandi­g kan draaien. Bovendien moet je het met chmod a+x mon uitvoerbaa­r maken.

Om ervoor te zorgen dat het script in het vervolg na een herstart automatisc­h 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 geconfigur­eerd, wacht de SSH-agent na een herstart van de Raspberry Pi op het intypen van de SSH-passphrase, en vervolgens maakt ClusterSSH dan de verbinding­en met de servers.

Aan de ordening van de Terminal-vensters door ClusterSSH valt nog wat te verbeteren. De afstanden tussen de in vergelijki­ng grote venstertit­els en de menu’s van de Pixel-desktop van Raspbian zijn bijvoorbee­ld 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 configurat­iebestand 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 productieg­ebruik kunt nemen: je moet voorkomen dat de X-server na tien minuten van inactivite­it het beeldscher­m op zwart zet. De meest absurde, maar ook simpelste manier is om een screensave­r te installere­n, om die dan meteen daarna weer uit te schakelen. Voor het installere­n daarvan voer je het volgende commando uit: sudo apt-get install xscreensav­er. Vervolgens zit de screensave­r in het menu van de Raspbian-desktop onder Settings. Raspbian merkt bij de eerste aanroep dat de screensave­r 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 belangrijk­ste waarden altijd in de gaten te kunnen houden, moet je een zo groot mogelijke monitor op de Raspberry Pi aansluiten. Daar zou je bijvoorbee­ld prima een tv voor kunnen gebruiken – zelfs een nieuwe is vaak nog goedkoper dan een computermo­nitor 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 leesbaarhe­id leidt. Een HD-ready-tv moet je dan ook alleen gebruiken als het commando xrandr in de Terminal de oorspronke­lijke 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 verschille­nde ingangen soms verschille­nde resoluties.

OPLOSMIDDE­LEN

Als de Raspberry Pi automatisc­h 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 ondersteun­t – soms hoef je de Raspberry Pi alleen van de progressiv­e- 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 gebruikeli­jke resolutie 1366 bij 768 krijg je echter alleen met hdmi_group=2. De tabel is niet compleet, maar laat alleen de voor tv’s gebruikeli­jke 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 instelling­en 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 afgedwonge­n 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 standaardr­esolutie.

 ??  ??
 ??  ??

Newspapers in Dutch

Newspapers from Netherlands