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.
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 :
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.phpAjoutez 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.
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.phpAjoutez 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.