Performance Co-Pilot – Monitoring in een modern jasje

About

Performance Co-Pilot – Monitoring in een modern jasje

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.

Modulair

Performance Co-Pilot is eigenlijk een volledig framework voor performance monitoring en niet zomaar één tool. Centraal daarin staan drie componenten:

  • pmda: een performance metric domain agent is verantwoordelijk voor het verzamelen van de performance data van een bepaald domein. Er bestaan verschillende agents: niet alleen voor system monitoring, maar ook voor applicaties zoals Apache, MySQL, Samba, enzovoorts. Je hoeft enkel de agents in te schakelen die jij nuttig vindt op jouw systeem.
  • pmcd: de performance metric collection daemon is het centrale aanspreekpunt om data van de verschillende agents te benaderen. Er draait slechts pmcd-service op het systeem.
  • client: een client is een tool die jou toelaat om de performance data van de agents op te vragen of te visualiseren. PCP verplicht je dus niet om één specifieke client te gebruiken: verschillende toepassingen vereisen mogelijk andere clients. Denk bijvoorbeeld aan een commandline tool en een webapp die performance graphs toont. Ook pmlogger, de component die historische data bewaart, is in feite een client.

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.

Installatie

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

Metrics bekijken

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!

Realtime monitoring

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.

Bekende tools

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.

Historische data

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:

  • -a <archieflocatie>
  • -S <beginpunt>
  • -T <eindpunt>

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:

  • -S -3h -T 1h: een tijdsspanne van 1 uur, te beginnen 3 uur geleden
  • -S -1h -T 30m: de periode van één uur tot een halfuur geleden
  • -S -30m: alle data vanaf een halfuur geleden tot nu
  • -S ‘@ 19-10-23 09:45:00’ -T 10m: data van 10 oktober 2019 om 9u45 tot 9u55

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.

Andere tools

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.

Grafische frontends

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.

Web apps

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.

Extra mogelijkheden

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.

Nuttige aanvulling

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.

 

Share
April 2024
May 2024
No event found!

Related Topics