Aan tools voor performance monitoring is er geen gebrek in Linux: denk maar aan top, vmstat, iostat, enzovoorts. Moderne distributies bevatten een prima alternatief voor al die traditionele tools: PCP of Performance Co-Pilot. In deze workshop leggen we uit hoe je daarmee start.
Geschreven door: Filip Vervloesem.
Wie al enige ervaring heeft met performance monitoring, heeft wellicht zijn eigen set van favoriete tools opgebouwd. Vaak is dat een bont allegaartje van tools met overlappende functionaliteit. Misschien gebruik je één bepaalde tool voor real time monitoring, een andere om gedetailleerde historische data te raadplegen en nog een derde om performance data te bekijken via grafieken. PCP is een mogelijk alternatief voor al die tools, want het laat je toe om zowel real time als historische performance data te bekijken én het beschikt over tekst gebaseerde en grafische outputmogelijkheden. De laatste tijd wint PCP meer en meer aan populariteit. Je vindt het reeds jaren terug in de repositories van de meeste Linux-distributies. Red Hat biedt PCP aan sinds versie 7 van hun Enterprise Linux distributie. Het is niet ondenkbaar dat PCP op termijn de oudere tools vervangt als standaardoplossing voor performance monitoring. PCP is overigens geen nieuw project: versie 1.0 verscheen midden jaren ’90. Toen was PCP nog een closed-source programma voor een commerciële UNIX-versie.
Performance Co-Pilot is eigenlijk een volledig framework voor performance monitoring en niet zomaar één tool. Centraal daarin staan drie componenten:
De modulaire opbouw biedt heel wat voordelen in vergelijking met traditionele performance monitoring tools. Zo is PCP makkelijk uit te breiden om nieuwe applicaties te monitoren, je kunt uit verschillende front ends kiezen om data te visualiseren en je kunt zelfs data van meerdere hosts verzamelen. In dit artikel beperken we ons tot de absolute basis: system monitoring van één systeem, waarbij we real time én historische data via de commandline opvragen en nadien visualiseren via grafieken.
Voor onze test gaan we aan de slag met Fedora 30. De installatie van PCP is erg eenvoudig:
$ sudo dnf install pcp
Dat commando installeert de absolute basis, uitsluitend bedoeld voor system monitoring. Hierboven spraken we reeds over verschillende agents voor application monitoring. Ben je ook daarin geïnteresseerd? Bekijk dan zeker even welke agents beschikbaar zijn in jouw distributie:
$ dnf search pcp-pmda
In Fedora 30 zijn er dat een zeventigtal. Wil je de uitgebreide documentatie over PCP raadplegen? Installeer dan bijkomend het pakket pcp-doc. Dat geeft je toegang tot de manpages van alle commando’s én een uitgebreide manual in /usr/share/doc/pcp-doc/html/index.html. Vervolgens start je de pmcd service om te beginnen met performance data te verzamelen:
$ sudo systemctl start pmcd
Om verderop in deze workshop ook historische data te raadplegen, moet je nog de pmlogger-server starten:
$ sudo systemctl start pmlogger
Je vraagt je nu waarschijnlijk af welke performance metrics PCP aanbiedt. Om te beginnen controleren we even welke agents allemaal actief zijn op ons systeem:
$ ps -ef | grep pmda
Bij een minimale installatie zijn dat volgende agents: root, proc, xfs, linux en kvm. Volgend commando toont een lijst van beschikbare metrics:
$ pminfo | less
De meeste metrics bevatten ook een helpfunctie die beschrijft waarvoor ze dienen. Een korte beschrijving van alle metrics krijg je met:
$ pminfo -t
Wil je enkel de metrics van een bepaald domein zien, bijvoorbeeld netwerkinformatie? Dat kan:
$ pminfo -t network
Handig is dat pminfo tab completion ondersteunt. Geef je bijvoorbeeld pminfo network <tab tab> in, dan zie je alle mogelijke metrics binnen network. Vul je verder aan naar pakweg network.interface, dan toont de tab completion al een kortere lijst. Zo vind je relatief snel de juiste metric vinden in de lange lijst. Om effectief de data van de metric op te halen, voeg je de -f-optie toe. Bijvoorbeeld:
$ pminfo -f network.interface.in.packets
Dat commando toont voor elke netwerkinterface het aantal inkomende pakketten sinds de monitoring agent gestart is. Je kan trouwens een gedetailleerde beschrijving van een bepaalde metric opvragen met:
$ pminfo -T network.interface.in.packets
pminfo toont de beschikbare metrics, mét tab completion!
Monitoring tools gebruik je vaak wanneer er zich een probleem voordoet op het systeem. Dan ben je meestal niet geïnteresseerd in een metric op één specifiek ogenblik, maar eerder in de evolutie van die metric. In het voorbeeld hierboven maakt het weinig uit hoeveel netwerkpakketten er reeds binnengekomen zijn op een bepaalde interface. We willen vooral weten hoeveel pakketten er per seconde binnenkomen. Die zogenaamde rate kan je opvragen met het pmval-commando. Met de -t-optie bepaal je het update interval (bijvoorbeeld 1 seconde) en met -s eventueel het aantal samples. Zonder die optie blijft pmval samples tonen totdat je het afbreekt met Ctrl-C. Veel metrics tonen ook data voor verschillende zogenaamde instances. Bij network.interface.in.packets is er bijvoorbeeld één instance per netwerkinterface. Met de -i-optie beperk je de uitvoer van pmval eventueel tot één of meerdere interfaces. Bijvoorbeeld:
$ pmval -t 1 -s 10 -i enp0s3,enp0s8 network.interface.in.packets
Uiteraard is dat nog maar een eenvoudig voorbeeld. Bestudeer zeker eens de lijst van beschikbare metrics met pminfo en aarzel niet om te experimenteren met pmval.
pmval is een eenvoudige tool om de metrics op te halen.
PCP bevat ook een aantal alternatieven voor bekende monitoring tools. Je installeert ze via het pakket pcp-system-tools en met volgend commando zie je de beschikbare tools:
$ rpm -ql pcp-system-tools | grep libexec
Zo is er bijvoorbeeld een PCP-versie van top (pcp-atop), free of iostat. In feite zijn dat allemaal Python of shell scripts die je als subcommando van pcp start. PCP’s eigen top-implementatie (pcp-atop) gebruik je bijvoorbeeld als volgt:
$ pcp atop
Let wel op dat de beschikbare opties niet per definitie identiek zijn aan die van de standaardtools. Je lees dus best even de manpages na (bijvoorbeeld ‘man pcp-atop’) of gebruikt de ingebouwde helpfunctie (h in pcp-atop). De opties voor het interval en het aantal samples bij pmval kun je ook gebruiken bij de pcp-tools. Bijvoorbeeld:
$ pcp iostat -t 1 -s 10
PCP’s eigen top-implementatie.
Op het eerste zicht bieden tools zoals pcp-atop of pcp-free weinig meerwaarde in vergelijking met atop en free. Het grote voordeel van PCP is echter dat je met alle tools via pmlogger ook data uit het verleden kan opvragen. We gaan even terug naar één van onze eerste voorbeeldcommando’s, namelijk pmval. PCP beschikt over volgende opties om data uit het verleden op te zoeken:
De archieflocatie is een directory met de hostname van jouw systeem onder /var/log/pcp/pmlogger. Als beginpunt en eindpunt geef je een absoluut of relatief tijdsstip op. Enkele voorbeelden om dat te verduidelijken:
In afbeelding 4 zie je een uitgewerkt voorbeeld voor de binnenkomende netwerkpakketten op twee interfaces. Krijg je niet de verwachte resultaten te zien, dan lees je best even de documentatie na over de time window specification. Die vind je terug in de manpage van PCPIntro. Voer na het openen van die pagina /^TIME WINDOW in en druk op enter om meteen naar dat onderdeel te springen. Vergeet ook niet dat je bovenstaande opties prima kan combineren met de interval-optie (-t). Voor grotere tijdspannen wil je het interval misschien vergroten, om de hoeveelheid meetpunten overzichtelijk te houden. Bekijk je de gegevens van enkele uren, dan hoef je uiteraard niet de precieze waarde van elke seconde te weten. Een gemiddelde per 15, 30 of zelfs 60 seconden is dan vaak voldoende om snel te vinden wat je zoekt.
Historische data opvragen met pmval.
Ook andere pcp tools ondersteunen bovenstaande opties om oudere data op te vragen. Wil je een beknopt overzicht van de systeembelasting (cpu, geheugen, schijven, netwerk) op een bepaald ogenblik in het verleden? Dat kan prima met atop:
$ pcp -a /var/log/pcp/pmlogger/localhost.localdomain -S '@ 19-10-23 09:45:00' atop
Standaard speelt atop als het ware de oude performance data af: elke 10 seconden ververst het scherm. Wil je sneller door de data bladeren, gebruik dan t of T om respectievelijk 10 seconden verder of terug te springen in de tijd. Mogelijk moet je daarna nog wel even Ctrl-L indrukken om het scherm correct te verversen (er zijn soms kleine weergavefoutjes als je dat niet doet). Tot slot willen we nog even pmlogsummary vermelden. Die tool geeft een erg beknopt overzicht van de metrics in een bepaalde tijdsspanne. Om bijvoorbeeld het gemiddeld aantal netwerkpakketten per seconden tijdens een periode van 5 minuten op te vragen, gebruik je:
$ pmlogsummary /var/log/pcp/pmlogger/localhost.localdomain -H -S '@ 19-10-23 09:35:00' -T 5m network.interface.in.packets
De optie -Ha voegt ook nog de minimale en maximale waardes toe én een legende die de verschillende kolommen benoemt.
PCP toont atop-informatie van uit het verleden.
Het is erg handig dat je met PCP ook oudere performance data kan opvragen. De commandline tools zijn best krachtig én prima geschikt om scripts rond te bouwen. Toch wordt het algauw een heel karwei om de juiste metrics én de correcte opties te vinden als je snel de oorzaak van een probleem zoekt. In dat geval bieden de grafische frontends voor PCP uitkomst. Een overzichtelijk dashboard met de meestgebruikte metrics laat je toe om veel sneller te troubleshooten. Door PCP’s modulaire architectuur heb je de keuze uit verschillende dashboards. Om te beginnen is er PCP Charts, te installeren via het pakket pcp-gui. Dat is een eenvoudige desktopapplicatie om verschillende metrics in realtime te visualiseren. Via File > Open kies je één van de voorgedefinieerde views om metrics te bekijken. Uiteraard is het ook mogelijk om je eigen grafieken aan te maken met metrics naar keuze. Al bij al is PCP Charts redelijk beperkt in mogelijkheden én heb je een desktopomgeving nodig om het te starten. Het is dus niet zo geschikt voor performance monitoring van servers.
PCP Charts is een eenvoudige grafische frontend voor PCP.
Gelukkig bestaan er ook verschillende web apps als frontend voor PCP. In Fedora zijn er drie verschillende beschikbaar: Vector, Graphite en Grafana. Je kan ze gemakkelijk alledrie testen door volgende pakketten te installeren:
$ sudo dnf install pcp-webapi pcp-webjs
En nadien de pmwebd-service te starten:
$ sudo systemctl start pmwebd
$ sudo systemctl enable pmwebd
Surf vervolgens naar http://<ip-adres-van-je-machine>:44323 en klik op de links naar één van de webapps om die te gebruiken. Vector toont enkel real time data (tot maximaal 10 minuten geleden) én bevat standaard de meeste grafieken. Graphite en Grafana kunnen ook historische data tonen, maar bieden na installatie minder grafieken aan. Je zal dus sneller je eigen grafieken moeten toevoegen om bepaalde metrics te monitoren. Het zou ons te ver leiden om nog in detail te bespreken hoe je extra grafieken toevoegt. Experimenteer vooral zélf met Graphite en Grafana om te kijken welke oplossing voor jou het beste werkt. Let wel op: de Grafana webapp bevat maar een klein deel van Grafana’s mogelijkheden. Zoek je online documentatie over Grafana, dan kan je die instructies niet zomaar overnemen in PCP’s Grafana webapp. Hetzelfde geldt trouwens voor Graphite.
Grafana is één van de mogelijke web frontends voor PCP.
Om af te sluiten stippen we nog twee interessante features aan. Mocht je een specifieke metric zoeken die ontbreekt in PCP, dan kan je die vaak als derived metric toevoegen. Een derived metric is het resultaat van één of meerdere wiskundige berekeningen op basis van bestaande metrics. Bijvoorbeeld: metric3 = 1024 * (metric1 + metric2). Wil je automatisch ingrijpen wanneer bepaalde metrics bepaalde waardes bereiken? Configureer dan pmie, de performance metrics inference engine. Pmie kan waarschuwingen loggen (in syslog of via e-mail) of specifieke acties uitvoeren. Denk bijvoorbeeld aan rate limiting via de firewall toepassen als er teveel netwerkverkeer binnenkomt of bepaalde processen killen als de systeembelasting te hoog ligt.
PCP is een nuttige aanvulling op het arsenaal aan performance monitoring tools voor Linux. De killer feature is dat je heel gemakkelijk data uit het verleden kan opvragen via de verschillende commandline tools. Snel even het geheugen- of cpu-verbruik controleren rond 2u afgelopen nacht? Dan volstaat een eenvoudig pmval-commando. Wil je wat dieper graven, dan kan je nog een vijftiental andere pcp-tools gebruiken. Ook de verschillende visualisatietools zijn in dat geval erg handig. Een pluspunt van PCP is ook dat het als een modulair framework is opgebouwd. Zo ben je niet verplicht om één bepaalde visualisatietool te gebruiken. In de toekomst zullen er allicht nog extra (commandline of grafische) tools verschijnen om PCP-data inzichtelijk te maken. PCP is als het ware de basis van een nieuwe generatie performance monitoring tools onder Linux. Het is dus zeker de moeite om toe te voegen aan jouw toolbox!
PCP is een nuttige aanvulling op het arsenaal aan performance monitoring tools voor Linux.