16 Aangepaste prestatie teller items aanmaken voor VMware

Overzicht

Het VMware-prestatie teller pad heeft de group/counter[rollup] formaat waarbij:

  • group - de prestatie teller groep, bijvoorbeeld cpu
  • counter - de naam van de prestatie teller, bijvoorbeeld usegemhz
  • rollup - het type prestatie teller rollup, bijvoorbeeld gemiddeld

Dus het bovenstaande voorbeeld zou het volgende teller pad geven: cpu/usegemhz[gemiddelde]

De beschrijvingen van de prestatie teller items, de namen van de tellers en de rollup typen zijn te vinden in VMware documentatie.

Het is mogelijk om interne namen te verkrijgen en aangepaste prestatie teller items te maken met behulp van een script item in Zabbix.

Configuratie

  1. Maak een uitgeschakeld Script-item aan op de hoofd VMware-host (waar het eventlog[]-item aanwezig is) met de volgende parameters:

  • Naam: VMware-metrieken
  • Type: Script
  • Sleutel: vmware.metrics
  • Informatietype: Tekst
  • Script: kopieer en plak het script hieronder
  • Time-out: 10
  • Bewaarperiode geschiedenis: Bewaar geen geschiedenis
  • Ingeschakeld: niet gemarkeerd

Script

try {
           Zabbix.log(4, 'vmware metriekscript');
       
           var result, resp,
           req = new HttpRequest();
           req.addHeader('Content-Type: application/xml');
           req.addHeader('SOAPAction: "urn:vim25/6.0"');
       
           login = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:vim25">\
           <soapenv:Header/>\
           <soapenv:Body>\
               <urn:Login>\
                   <urn:_this type="SessionManager">SessionManager</urn:_this>\
                   <urn:userName>{$VMWARE.GEBRUIKERSNAAM}</urn:userName>\
                   <urn:password>{$VMWARE.WACHTWOORD}</urn:password>\
               </urn:Login>\
           </soapenv:Body>\
       </soapenv:Envelope>'
           resp = req.post("{$VMWARE.URL}", login);
           if (req.getStatus() != 200) {
               throw 'Reactiecode: '+req.getStatus();
           }
       
           query = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:vim25">\
       <soapenv:Header/>\
           <soapenv:Body>\
               <urn:RetrieveProperties>\
                   <urn:_this type="PropertyCollector">propertyCollector</urn:_this>\
                   <urn:specSet>\
                       <urn:propSet>\
                          <urn:type>PerformanceManager</urn:type>\
                          <urn:pathSet>perfCounter</urn:pathSet>\
                       </urn:propSet>\
                       <urn:objectSet>\
                          <urn:obj type="PerformanceManager">PerfMgr</urn:obj>\
                       </urn:objectSet>\
                   </urn:specSet>\
               </urn:RetrieveProperties>\
           </soapenv:Body>\
       </soapenv:Envelope>'
           resp = req.post("{$VMWARE.URL}", query);
           if (req.getStatus() != 200) {
               throw 'Reactiecode: '+req.getStatus();
           }
           Zabbix.log(4, 'vmware metrieken=' + resp);
           result = resp;
       
           logout = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:vim25">\
           <soapenv:Header/>\
           <soapenv:Body>\
               <urn:Logout>\
                   <urn:_this type="SessionManager">SessionManager</urn:_this>\
               </urn:Logout>\
           </soapenv:Body>\
       </soapenv:Envelope>'
       
           resp = req.post("{$VMWARE.URL}",logout);         
           if (req.getStatus() != 200) {
               throw 'Reactiecode: '+req.getStatus();
           }
       
       } catch (error) {
           Zabbix.log(4, 'vmware-oproep mislukt: '+error);
           result = {};
       }
       
       return result;

Zodra het item is geconfigureerd, drukt u op de knop Testen, en drukt u vervolgens op Waarde ophalen.

Kopieer de ontvangen XML naar een willekeurige XML-formatter en zoek de gewenste metriek.

Een voorbeeld van XML voor één metriek:

<PerfCounterInfo xsi:type="PerfCounterInfo">
           <key>6</key>
           <nameInfo>
               <label>Gebruik in MHz</label>
               <summary>CPU-gebruik in megahertz tijdens het interval</summary>
               <key>usagemhz</key>
           </nameInfo>
           <groupInfo>
               <label>CPU</label>
               <summary>CPU</summary>
               <key>cpu</key>
           </groupInfo>
           <unitInfo>
               <label>MHz</label>
               <summary>Megahertz</summary>
               <key>megaHertz</key>
           </unitInfo>
           <rollupType>gemiddeld</rollupType>
           <statsType>rate</statsType>
           <level>1</level>
           <perDeviceLevel>3</perDeviceLevel>
       </PerfCounterInfo>

Gebruik XPath om het tellerpad uit de ontvangen XML te halen. Voor het bovenstaande voorbeeld is de XPath:

veld xPath waarde
groep //groupInfo[../key=6]/key cpu
teller //nameInfo[../key=6]/key usagemhz
rollup //rollupType[../key=6] gemiddeld

Het resulterende prestatieteller-pad in dit geval is: cpu/usagemhz[gemiddeld]