============
Exploitation
============

Principes Généraux
------------------

Centreon-esxd est un programme Perl chargé de récupérer des indicateurs VMWare. Ce programme utilise le SDK Perl fourni par VMWare afin de se connecter et récupérer les informations d'un (ou plusieurs) VirtualCenter. Pour cela il effectue une connexion TCP avec le(s) VirtualCenter.

Par défaut, « centreon-vmware » lance au moins deux processus (nommé respectivement « handle-client », « handle-vsphere-xxxx ») :

*« handle-client »*:
  *Processus en attente des demandes clientes.*

Voici le fonctionnement :

- Un client se connecte.
- Le client demande un indicateur de supervision sur un VirtualCenter.
- Le processus « handle-client » fourni cette demande au processus « handle-vsphere-xxxx ».
- Une réponse est fournie par « handle-vsphere-xxxx » à « handle-client ».
- Le processus « handle-client » fourni la réponse au client.

*« handle-vsphere-xxxx »*:
  *Processus ayant le rôle de se connecter et garder ouverte une session avec son VirtualCenter (De plus, dans un souci de performances, un cache de description des données de performances est créé).* 

Enfin, ce processus récupère les indicateurs VMWare en créant un sous-processus par demande.

Centreon-vmware nécessite l'utilisation d'un (ou plusieurs) VirtualCenter (ou ESX).

Voici un exemple d'architecture éclaté :

.. image:: ../images/archi.png

Mode de fonctionnement
----------------------

Le programme « centreon-vmware » fonctionne uniquement en mode « daemon ». (dans le sens où il ne peut fournir les indicateurs sans l'utilisation d'un client).

Configuration du connecteur
---------------------------

Le daemon « centreon-vmware » possède un fichier de configuration « centreon_vmware.pm » de la forme suivante :
::

    %centreon_vmware_config = (
        vsphere_server => {
                        'default' => {'url' => 'https://vcenter/sdk',
                                     'username' => 'test@test.fr',
                                     'password' => 'xxxx'},
                        }
    );

L'attribut « vsphere_server » permet de configurer les accès aux différents VirtualCenter.
Dans le cas ou il y a plusieurs VirtualCenters, la configuration devient (noter la "," de séparation) :
::

    %centreon_vmware_config = (
        vsphere_server => {
                        'default' => {'url' => 'https://vcenter/sdk',
                                     'username' => 'test@test.fr',
                                     'password' => 'xxxx'},
                        'other' => {'url' => 'https://other_vcenter/sdk',
                                     'username' => 'test@test.fr',
                                     'password' => 'xxxx'},
                        }
    );

'other' et 'default' sont des containeurs.

Client Usage
------------

Vérifie l'état des VMTools des machines virtuelles avec 'prd' dans leur nom:
::

    $ perl centreon_plugins.pl --plugin=apps::vmware::connector::plugin  --custommode=connector --connector-hostname=127.0.0.1 --container=default --verbose --mode=tools-vm --display-description --vm-hostname='prd' --filter
    WARNING: 1 VM with VMTools not installed |
    vmtools not installed:
        prd-Reporting - 10.0.0.1 [description xxxx]

Vérifie les IOPs des machines virtuelles (avec 'centreon-central-1|Formation' dans leur nom. Cela est une expression régulière) sur leurs datastores:
::

    $ perl centreon_plugins.pl --plugin=apps::vmware::connector::plugin  --custommode=connector --connector-hostname=127.0.0.1 --container=default --verbose --mode=datastore-vm --vm-hostname='centreon-central-1|Formation' --filter
    OK: All Datastore IOPS counters are ok | 'riops_Formation-Reporting - 10.30.2.89_R&D-BI'=0.00iops;;;0; 'wiops_Formation-Reporting - 10.30.2.89_R&D-BI'=1.43iops;;;0; 'riops_centreon-central-1_INTEGRATION'=0.00iops;;;0; 'wiops_centreon-central-1_INTEGRATION'=0.60iops;;;0;
    'Formation-Reporting - 10.30.2.89' read iops on 'R&D-BI' is 0.00
    'Formation-Reporting - 10.30.2.89' write iops on 'R&D-BI' is 1.43
    'centreon-central-1' read iops on 'INTEGRATION' is 0.00
    'centreon-central-1' write iops on 'INTEGRATION' is 0.60

Vérifie l'état de santé des serveurs ESX:
::

    $ perl centreon_plugins.pl --plugin=apps::vmware::connector::plugin  --custommode=connector --connector-hostname=127.0.0.1 --container=default --verbose --mode=health-host --esx-hostname='.*' --filter --disconnect-status='ok'
    OK: All ESX health checks are ok | 'problems_srvi-clus-esx-n2.merethis.net'=0;;;0;299 'problems_srvi-clus-esx-n1.merethis.net'=0;;;0;299 'problems_srvi-clus-esx-n4.merethis.net'=0;;;0;186 'problems_srvi-clus-esx-n3.merethis.net'=0;;;0;186
    Checking srvi-clus-esx-n2.merethis.net
    299 health checks are green
    Checking srvi-clus-esx-n1.merethis.net
    299 health checks are green
    Checking srvi-clus-esx-n4.merethis.net
    186 health checks are green
    Checking srvi-clus-esx-n3.merethis.net
    186 health checks are green

Troubleshooting
---------------

Il est possible de retrouver des erreurs de ce type dans les « logs » de « centreon-esxd » :
::

    ...SOAP request error - possibly a protocol issue: read failed: error:1408F119:SSL routines:SSL3_GET_RECORD:decryption failed or bad record mac...

Le SDK Perl VMWare génère cette erreur de temps en temps mais ne bloque pas le fonctionnement du connecteur. Le bug provient d'OpenSSL. Il devrait être fix dans la version 1.0.1h (CVE-2010-5298).

Le connecteur peut retourner l'erreur suivante:
::

    # perl centreon_plugins.pl --plugin=apps::vmware::connector::plugin ...
    Cannot get value for counters...

Vérifier la synchronisation du temps du VirtualCenter et de ses serveurs ESX. La plupart du temps, le serveur hébergeant le connecteur ou le VirtualCenter/ESX ne sont pas bien synchronisés. 
