15 Création de noms de compteurs de performance personnalisés pour VMware

Aperçu

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

  • group - le groupe du compteur de performance, par exemple cpu
  • counter - le nom du compteur de performance, par exemple usagemhz
  • rollup - le type de consolidation du compteur de performance, par exemple average

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 consolidation peuvent être trouvés dans la documentation VMware.

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

Configuration

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

  • Nom : VMware metrics
  • Type : Script
  • Clé : vmware.metrics
  • Type d’information : Texte
  • Script : copiez et collez le script fourni ci-dessous
  • Timeout : 10
  • Historique : Ne pas stocker
  • 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 sur Get value.

Copiez le XML reçu dans un formateur XML quelconque et recherchez 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 à partir du XML reçu. Pour l’exemple ci-dessus, le XPath sera :

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

Le chemin du compteur de performance obtenu dans ce cas est : cpu/usagemhz[average]