Sidebar

Zabbix Summit 2022
View presentations

16 Création de noms de compteurs de performances personnalisés pour VMware

Aperçu

Le chemin du compteur de performances VMware a le format group/counter[rollup] où :

  • group - tle groupe de compteurs de performance, par exemple cpu
  • counter - le nom du compteur de performance, par exemple usagemhz
  • rollup - le type de cumul du compteur de performances, par exemple moyenne

Ainsi, l'exemple ci-dessus donnerait le chemin de compteur suivant : cpu/usagemhz[average]

Les descriptions des groupes de compteurs de performance, les noms des compteurs et les types de cumul peuvent être trouvés dans la [documentation VMware] (https://developer.vmware.com/apis/968).

Il est possible d'obtenir des noms internes et de créer des noms de compteurs de performance personnalisés en utilisant un élément de script dans Zabbix.

Configuration

  1. Créez un élément de script désactivé sur l'hôte VMware principal (où l'élément eventlog[] est présent) avec les paramètres suivants :

  • Nom : métriques VMware
  • Type : Script
  • Clé : vmware.metrics
  • Type d'information : Texte
  • Script : copiez et collez le script fourni ci-dessous
  • Expiration : 10
  • Période de stockage de l'historique : Ne gardez pas l'historique
  • Activé : non coché

Script

try {
           Zabbix.log(4, 'vmware metrics script');
       
           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.USERNAME}</urn:userName>\
                   <urn:password>{$VMWARE.PASSWORD}</urn:password>\
               </urn:Login>\
           </soapenv:Body>\
       </soapenv:Envelope>'
           resp = req.post("{$VMWARE.URL}", login);
           if (req.getStatus() != 200) {
               throw 'Response code: '+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 'Response code: '+req.getStatus();
           }
           Zabbix.log(4, 'vmware metrics=' + 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 'Response code: '+req.getStatus();
           }
       
       } catch (error) {
           Zabbix.log(4, 'vmware call failed : '+error);
           result = {};
       }
       
       return result;

Une fois l'élément configuré, appuyez sur le bouton Test, puis appuyez sur Obtenir la valeur.

Copiez le XML reçu dans n'importe quel formateur XML et trouvez la métrique souhaitée.

Exemple de XML pour une métrique :

<PerfCounterInfo xsi:type="PerfCounterInfo">
           <key>6</key>
           <nameInfo>
               <label>Usage in MHz</label>
               <summary>CPU usage in megahertz during the 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>average</rollupType>
           <statsType>rate</statsType>
           <level>1</level>
           <perDeviceLevel>3</perDeviceLevel>
       </PerfCounterInfo>

Utilisez XPath pour extraire le chemin du compteur du XML reçu. Pour l'exemple ci-dessus, le XPath sera :

champ xPath valeur
group //groupInfo[../key=6]/key cpu
counter //nameInfo[../key=6]/key usagemhz
rollup //rollupType[../key=6] average

Le chemin du compteur de performances résultant dans ce cas est : cpu/usagemhz[average]