Vous êtes ici:

Menu


Stacks Image 29834
Depuis la version 1.7.6, il est possible d'utiliser une macro personnalisée de Centreon pour exécuter une action en fonction de la valeur de celle-ci. Cette fonctionnalité est intrinsèque avec le backend MK livestatus mais il faudra modifier le fichier du backend Centreonbroker.
Cette option vous permettra, par exemple, d'afficher dans le menu contextuel d'un hôte la possibilité d'effectuer une connexion par ssh pour un serveur Linux ou une connexion Rdp pour un serveur Windows.

1 Utilisation avec MK livestatus

Pour la configuration de MK livestatus, lisez l'article suivant : Intégration de Nagvis avec Centreon-Broker et MK Livestatus. Dans notre exemple, nous avons un serveur Linux et un serveur Windows. Dans la configuration Centreon, nous allons ajouter une macro personnalisée nommé TAGS avec les valeurs respectives linux et windows comme ceci :
Stacks Image 43669
Configuration Windows
Stacks Image 43672
Configuration Linux
Nagvis pourra récupérer les macros avec les valeurs par l'intermédiaire du backend MK livestatus. Pour notre culture personnelle, nous allons nous intéresser à cette requête. Créons un fichier de requête nommé query.
GET hosts
Columns: host_name custom_variable_names custom_variable_values
On lance la requête MK livestatus
/usr/sbin/unixcat < query /var/lib/centreon-engine/rw/live
win2008r2;TAGS,SNMPVERSION,SNMPCOMMUNITY;windows,2c,public
Centreon-Server;TAGS,SNMPVERSION,SNMPCOMMUNITY;Linux,2c,public
Le résultat nous affiche le nom de l'hôte suivi du Nom des macros puis des valeurs de celles-ci. Maintenant, que nous connaissons le mécanisme de MK livestatus, voyons comment indiquer à Nagvis l'utilisation des ces macros. Ajoutons les sections action_ dans le fichier de configuration Nagvis.
Editez le fichier
vi /usr/share/nagvis/etc/nagvis.ini.php
Ajoutez ceci
[action_rdp]
action_type="rdp"
obj_type="host,service"
condition="TAGS~windows"

[action_ssh_url]
action_type="ssh_url"
obj_type="host,service"
condition="TAGS~linux"
Donc en fonction de la valeur de la macro TAGS, nous utiliserons ssh ou rdp. Ces actions sont prédéfinies dans le template par défaut /usr/share/nagvis/share/userfiles/templates/default.context.html. Ce fichier permet de configurer le menu contextuel des cartes de Nagvis. Réalisons un exemple de carte très simple avec nos deux serveurs et constatons le changement du menu contextuel.
Stacks Image 43689
Changement du menu contextuel grâce à la macro TAGS

2 Modification du backend Centreonbroker

Actuellement, le backend Centreonbroker ne gère pas les macros personnalisées. Nous allons ajouter cette fonctionnalité dans les fonctions getHostState et getServiceState. Pour récupérer les macros, il faut faire une requête dans la table customvariables de la base centreon_storage. Pour ceci, nous aurons besoin de l'ID de l'hôte et l'ID du service, il faudra donc modifier les requêtes SQL de ces deux fonctions. Editons le fichier GlobalBackendcentreonbroker.php
vi /usr/share/nagvis/share/server/core/classes/GlobalBackendcentreonbroker.php

2.1 Fonction getHostState

Ajoutons le champ host_id dans la première requête.
        ……
        $queryGetHostState = 'SELECT
            h.host_id,
            h.alias,
            h.name,
        ……
Ajoutons la requête pour les macros, juste avant la récupération des données.
            ……
            $acknowledged = $state != UP && $row['problem_has_been_acknowledged'];
            /**
            * ADD Macro in $custom_vars
            *
            *  28-12-2017
            *  Eric Coquard
            */
            $custom_vars = array();
            $queryGetHostCustomVariable = 'SELECT
               c.name,
               c.value
               FROM customvariables c
               WHERE c.host_id = '. $row['host_id'] ;
            try {
                   $stmt1 = $this->_dbh->query($queryGetHostCustomVariable);
                } catch (PDOException $e) {
                   throw new BackendException(l('errorGettingHostCustomVariable', array('BACKENDID' => $this->_backendId, 'ERROR' => $e->getMessage())));
                 }
             while ($row1 = $stmt1->fetch(PDO::FETCH_ASSOC)) {
                  $custom_vars[$row1['name']]=$row1['value'];
                 }

             $arrReturn[$row['name']] = Array(
                $state,
            ……
On récupère les valeurs en ajoutant le tableau $custom_vars dans le retour des données
              ……
             $arrReturn[$row['name']] = Array(
                $state,
                $row['output'],  // output
                $row['problem_has_been_acknowledged'],
                $in_downtime,
                0, // staleness
                $row['state_type'],  // state type
                $row['current_check_attempt'],  // current attempt
                $row['max_check_attempts'], // max attempts
                $row['last_check'],  // last check
                $row['next_check'],  // next check
                $row['last_hard_state_change'], // last hard state change
                $row['last_state_change'], // last state change
                $row['perfdata'], // perfdata
                $row['name'],  // display name
                $row['alias'], // alias
                $row['address'],  // address
                $row['notes'],  // notes
                $row['check_command'], // check command
                $custom_vars, // for Custom vars
                $row['downtime_author'], // downtime author
                $row['downtime_data'], // downtime comment
                $row['downtime_start'], // downtime start
                $row['downtime_end'], // downtime end
             ……

2.1 Fonction getServiceState

Ajoutons le champ service_id dans la première requête.
        ……
        $queryGetServiceState = 'SELECT
            h.host_id,
            h.name,
            h.address,
            s.service_id,
            s.checked as has_been_checked,
            s.description as service_description,
            s.display_name,
        ……
Ajoutons la requête pour les macros, juste avant la récupération des données.
                   ……
                   default:
                        $state = UNKNOWN;
                        $row['output'] = 'GlobalBackendcentreonbroker::getHostState: Undefined state!';
                        break;
                }
                /**
                * ADD Macro in $custom_vars
                *
                *  28-12-2017
                *  Eric Coquard
                */
                $custom_vars = array();
                $queryGetHostCustomVariable = 'SELECT
                   c.name,
                   c.value
                   FROM customvariables c
                   WHERE c.service_id = '. $row['service_id'] ;
                try {
                      $stmt1 = $this->_dbh->query($queryGetHostCustomVariable);
                     } catch (PDOException $e) {
                       throw new BackendException(l('errorGettingHostCustomVariable', array('BACKENDID' => $this->_backendId, 'ERROR' => $e->getMessage())));
                     }
                 while ($row1 = $stmt1->fetch(PDO::FETCH_ASSOC)) {
                    $custom_vars[$row1['name']]=$row1['value'];
                     }

                $svc = array(
                    $state,
                    $row['output'],  // output
                    $row['problem_has_been_acknowledged'],
                    ……
On récupère les valeurs en ajoutant le tableau $custom_vars dans le retour des données
                ……
                $svc = array(
                    $state,
                    $row['output'],  // output
                    $row['problem_has_been_acknowledged'],
                    $in_downtime,
                    0, // staleness
                    $row['state_type'],  // state type
                    $row['current_check_attempt'],  // current attempt
                    $row['max_check_attempts'], // max attempts
                    $row['last_check'],  // last check
                    $row['next_check'],  // next check
                    $row['last_hard_state_change'], // last hard state change
                    $row['last_state_change'], // last state change
                    $row['perfdata'], // perfdata
                    $row['name'],  // display name
                    $row['alias'], // alias
                    $row['address'],  // address
                    $row['notes'],  // notes
                    $row['check_command'], // check command
                    $custom_vars, // Custom vars
                    $row['downtime_author'], // downtime author
                    $row['downtime_data'], // downtime comment
                    $row['downtime_start'], // downtime start
                    $row['downtime_end'], // downtime end
                    $row['service_description'], // descr
                 ……
Comme précédemment, ajoutons les sections action_ dans le fichier de configuration Nagvis.
Editez le fichier
vi /usr/share/nagvis/etc/nagvis.ini.php
Ajoutez ceci
[action_rdp]
action_type="rdp"
obj_type="host,service"
condition="TAGS~windows"

[action_ssh_url]
action_type="ssh_url"
obj_type="host,service"
condition="TAGS~linux"
Et voici les exemples de menu contextuel sous Nagvis et pour finir vous trouverez le fichier backend complet avec ce lien.
Stacks Image 43730
Exemple de menu contextuel différent en fonction de la macro TAGS
 Vous êtes ici: