lua logoLoriotPro WEB site Documentation scripting LoriotPro
Extensions du language LUA

Table des matières    Liste de fonctions

Imprimer la page en cours Mail this  link UTUBE Channel

Exemple de mise en œuvre des Global Objects dans la supervision avec LoriotPro

Le but de cette étude de cas est d'obtenir une carte de réseau IP étendu présentant l'état courant des interfaces réseau des routeurs et par extensions des liens. Pour cela, nous allons utiliser une des nouvelles fonctionnalités de la version 7 de LoriotPro: les Global Objects.

Les objets globaux (GO) dans le logiciel de supervision LoriotPro peuvent être associés à  n’importe quels indicateurs de statut ou de performance de votre infrastructure informatique.

Ils peuvent être par exemple: un état ​​d’une interface réseau, un espace disque, un état ​​de fonctionnement, une température, coordonnées GPS ...*

Les Global Objects sont utilisées comme référentiel interne pour LoriotPro pour stocker tout ce que vous souhaitez surveiller. Ce référentiel peut être réparti entre plusieurs LoriotPro pour assurer la redondance et/ou la répartition de charge. Ils ont l’énorme avantage d’être présents en mémoire et non sur disque et offrent ainsi à LoriotPro la capacité de traitement à la seconde de milliers d’indicateurs.

Dans cette étude de cas,  nous utiliserons un seul LoriotPro et donc nous n’aurons pas la notion de redondance ou de distribution des collectes.

Voici pour commencer le visuel de supervision que nous allons développer dans la suite de cette étude de cas.

AV&GlobalObjects.png     RouterSpace.png

Le réseau couvre quatre pays, dont la France, L’Australie, le Brésil et le Japon. Les sites dans ces différents pays sont interconnectés par des liens point à point WAN. Chaque site dispose d’un réseau local et d’un routeur d’accès au WAN. Le MAP est construit avec une image de fond importée de Microsoft Visio, quelques objets graphiques ont été ajoutés pour afficher l'état actuel (couleur et texte) des interfaces réseau.

Avant de plonger dans les étapes de configuration, nous allons examiner le principe de la surveillance des périphériques SNMP ainsi que les concepts d'objets globaux.

Les composants de l'architecture sont présentés dans le schéma ci-dessous:

GlobalObjectsConceptV2fj.png

Sur le côté gauche, les routeurs sur lesquels les collectes de données SNMP sont effectuées, sur le côté droit, la carte (MAP) qui doit refléter le plus rapidement possible l'état de fonctionnement des interfaces réseau.

Entre les deux, il y a les Global Object qui contiennent les valeurs courantes des indicateurs SNMP collectés.

Pour les traitements, il y a les Audits. Les Audits sont des sortes de travailleurs qui sont constamment à la recherche de tâches à effectuer. Les tâches sont « scriptées » par des fonctions LUA définies dans l'objet global.

Ces scripts réalisent la collecte des données auprès des équipements (en SNMP ou par d’autres moyens) ainsi que la corrélation des données.

Les Audits sont en temps réel à la recherche d'objets globaux qui doivent être mis à jour (intervalle de temps écoulé).

Les Audits sont contrôlés par un chef d’orchestre (Audit Process), un processus qui fonctionne en tâche de fond et qui attribue du temps CPU (thread) à chaque Audit à partir d’une réserve.

Les cartes  ActiveView pour leur part ont leur propre processus interne de collecte de données qui recueillent, sur la base d'un intervalle de collecte positionné sur chaque objet graphique, les valeurs actuelles des objets globaux. Selon les valeurs renvoyées de l'objet global, les objets graphiques sont modifiés (couleur de fond, le texte, la position, des cliparts, etc.) .

Procédons maintenant à la mis en œuvre

Il faut en premier bien définir les Global Object nécessaires, dans notre exemple nous disposons de routeurs, les routeurs sont situés dans différents pays, et ils disposent d’interfaces réseau.

Nous devons identifier dans les indicateur SNMP celui qui permet de connaitre le statut de fonctionnement d’une interface. Nous utiliserons ici l’objet standard ifoperstatus de la MIB2.

Object Name          : [ ifOperStatus ]

Children of Object   : [ ifEntry ]

From MIB Description : [ IF-MIB ]

Registered in File   : [ IF-MIB-200006140000Z-rfc2863.mib ]

MIB File Directory   : [ C:\LORIOT~3\LO1363~1\bin/mibs/0_MIB_KERNEL ]

The File is loaded

---------------------------------------------------------------

Father Indexed By    :

                       [ IfIndex,INTEGER(6) ]

---------------------------------------------------------------

SYNTAX : [6] INTEGER,(INTEGER)

 INTEGER Sequence    :

                       [ up(1)]

                       [ down(2)]

                       [ testing(3)]

                       [ unknown(4)]

                       [ dormant(5)]

                       [ notPresent(6)]

                       [ lowerLayerDown(7)]

---------------------------------------------------------------

ACCESS : READONLY

STATUS : CURRENT

---------------------------------------------------------------

OID LEN (10) : 1.3.6.1.2.1.2.2.1.8.

iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).interfaces(2).ifTable(2).ifEntry(1).ifOperStatus(8)

LoriotPro Extentions :

Dup name found: 0 IOD Marked Deleted : 0

Flag: 1 Flagof: 0 Locked: 0

OID_len: 11 OID Pointer: 173958560

---------------------------------------------------------------

DESCRIPTION :

 

"The current operational state of the interface.  The testing(3) state indicates that no operational packets can be passed.  If ifAdminStatus is down(2) then ifOperStatus should be down(2).  If ifAdminStatus is changed to up(1) then ifOperStatus should change to up(1) if the interface is ready to transmit and receive network traffic; it should change to dormant(5) if the interface is waiting for

external actions (such as a serial line waiting for an incoming connection); it should remain in the down(2) state if and only if there is a fault that prevents it from going to the up(1) state; it should remain in the notPresent(6) state if the interface has missing (typically, hardware)

components."

 

Pour le nommage une convention simple est définie :

·         RTR - pour Routeur

·         FRA, AUS - 3 lettres du code pays

·         IFx - précise le numéro de l’interface réseau

·         OperStatus – précise l’indicateur attaché à ce GO

Exemple : RTR-FRA-IF1 pour interface 1 du routeur situé en France

La première étape consiste à créer  les Objets Globaux. Pour accéder à l’environnement de création des Objets Globaux il faut sélectionner l’option Configuration -> Global Object du menu principal. La fenêtre suivante s’ouvre :

Global Object Monitor

Cliquer sur New, la fenêtre suivante s’ouvre :

On y entre le nom de notre Global Object en respectant notre convention de nommage.

La fenêtre de propriété d’un Global Objet apparait.

GOPropertieEx1.png

En premier nous allons créer un groupe appelé WAN qui nous servira ensuite à mieux distribuer les traitements des processus Audit.

Ce groupe à pour objectif de rassembler tous les indicateurs disponibles pour les surveillances du réseau WAN.

On entre la valeur dans le champ Group Name puis on clique sur Edit Group Scheduler function

La fenêtre suivante apparait :

GO groupe scheduler function

C’est un script LUA que l’on va sauvegarder tel quel en fermant la fenêtre. Ce script est utilisé par un processus central pour traiter les objets de ce groupe.

On entre ensuite les deux valeurs pour Param 1 et Param2

Ces valeurs seront utilisées comme arguments passés à la fonction de collecte liée à ce Global Object.

Dans  notre contexte nous avons décidé que Param 1  devait contenir l’adresse IP du routeur et Param 2 l’objet SNMP et son index.

La valeur du champ Schedule est ensuite modifiée pour la valeur 1, indiquant que cet objet est à traiter par un ou des processus Audit.

Cliquer ensuite sur le bouton Edit Global Object LUA function. L’éditeur LUA de LoriotPro s’ouvre avec la fonction attachée.

GO-LUAFunction.png

Cette fonction est vide, il est donc nécessaire d’y ajouter le code en charge de faire la collecte SNMP et de retourner les valeurs collectées dans les variables du Global Object (String, Double,Status)..

Voici le code réalisant ces objectifs :

GOFunctionExampleIfoperStat.png

function func_RTR_AUS_IF0_OperStatus (var)

lp.GetIPInformation(VAR.param1,'HostInfo')

            if HostInfo.status == 2 then

                        SNMPval,SNMPbuf=lp.Get(VAR.param1,VAR.param2)

                        if SNMPval ~= nil then

                                   lp.SetGObjectString(VAR.name,SNMPbuf) -- Global Object String variable

                                   lp.SetGObjectDouble(VAR.name,SNMPval)-- Global Object Double variable

                                   lp.SetGObjectStatus(VAR.name,1)-- Global Object Status variable

                        else

                                   lp.SetGObjectString(VAR.name,"SNMP Error")

                                   lp.SetGObjectDouble(VAR.name,0)

                                   lp.SetGObjectStatus(VAR.name,0)

                        end                 

            else

                        lp.SetGObjectString(VAR.name,"Not SNMP")

                        lp.SetGObjectDouble(VAR.name,0)

                        lp.SetGObjectStatus(VAR.name,0)

            end

end

Cette fonction réalise les tâches suivantes :
  1. Collecte du statut du routeur dans l’annuaire
  2. Test de ce statut, si l’équipement réponds à SNMP  (statut vert, valeur =2 ) alors on continu sinon on quitte avec des valeurs à 0 dans les variables String, Double et Status.
  3. On réalise la collecte de l’objet SNMP passé en argument Param 2
  4. Si la collecte SNMP s’est bien déroulée,  on enrichi les variables String, Double et Status avec ces valeurs sinon on quitte avec des valeurs à 0
  5. On quitte

Comme cette fonction est utilisée par tous les Global Objet du même modèle nous allons extérioriser celle-ci. Cela nous évitera de créer systématiquement ce code pour tous nos objets et sera plus facile à maintenir.

Nous remplaçons tout notre code par une simple ligne d’appel d’un fichier externe Getifoperstatus.lua. Le répertoire CompanyScripts a été créé pour nos scripts propriétaires.

function func_RTR_FRA_IF0_OperStatus (var)
dofile(lp.GetPath().."/config/script/myCompanyScripts/Getifoperstatus.lua")
end

Quitter l’environnement de développement en sauvegardant le fichier.

Vous devez avoir maintenant une fenêtre similaire :

GOPropertieEx.png

L’intervalle par défaut (champ Interval) doit être précisé, il définit la fréquence à laquelle la fonction doit être exécutée par le/les Audits.

Choisissez la valeur la plus élevée possible, mais qui correspond à votre besoin. Cette valeur doit être supérieure à la valeur de l’intervalle des Audits 902 qui traite le groupe des Global Object.

Pour avoir la persistance des Global Object, c.a.d. retrouver sa configuration au redémarrage il faut cocher AutoLoad puis cliquer ensuite sur Apply and Save.

Comme nous faisons appel à un script externe, il faut le créer.

Dans le chemin précisé, nous devons créer ce fichier et y ajouter le code générique créé précédemment.

Le Global Objet est créé. Nous répétons les mêmes étapes pour toutes les interfaces de tous nos routeurs.

Il existe aussi la possibilité de créer les Global Object par des scripts LUA quand la quantité à créer est importante, mais nous n’aborderons pas ce sujet dans ce document.

L’étape suivante consiste à ajouter des Audits dans l’annuaire de LoriotPro. Nous les ajoutons habituellement sous l’Objet LoriotPro.

Appelez le menu contextuel de LoriotPro, sélectionnez Insert Task puis Advanced TCP/AUDIT

GO_AddAudit.png

La fenêtre de configuration des Audit s’ouvre, sélectionnez Audit Process

AUdit 902 loriotpro

Par défaut l’intervalle d’exécution est de 60 secondes. Cette valeur doit être inférieure dans tous les cas à l’intervalle défini dans les propriétés du Global Object.

Nous la positionnons à 5 secondes, car la valeur de Interval des Global Object est de 15 secondes

time interval setting

Ensuite appelez l’assistant  Wizard32x32.png puis sélectionnez le script 902 ou entrez la valeur 902 dans Audit Ref et le nom du group dans Parameters

GOAudit02Config.png

Un second Audit peut être ajouté exactement de la même façon pour distribuer le travail entre deux processus distincts (thread). Selon la charge de travail, vous pouvez augmenter le nombre d’Audits en charge d’un groupe de GO. C'est là que ce concept novateur prend sa valeur.

Une fois cela fini, on constate que dans notre annuaire 2 Audits sont présents.

 

Pas contre ils peuvent être en statut violet et pas vert. Ceci indique que le processus de gestion des Audit (Audit Process) n’est pas démarré.

À partir du menu principal, sélectionner Configure puis Audit Process, cliquez sur Start pour le démarrer.

Audit Process

Les Audits passent en vert, il est possible aussi de les renommer pour mieux les identifier.

Si nous ouvrons notre monitor de Global Object nous constatons que ceux-ci sont mis à jour régulièrement.

Global Object Monitor

En plus des GO que nous avons créés, on remarque deux GO commençant par Thread. Ceux-ci sont créés automatiquement par l’Audit Proccess pour chaque Audit présent dans l’annuaire, le numéro fait référence à l’UID de l’Audit dans l’annuaire. Un click sur ce GO sélectionne l’audit dans l’annuaire.

Nous pouvons maintenant créer la carte pour visualiser l’état de nos liens WAN.

Ajoutons une Active View dans l’annuaire. On sélectionne l’objet LoriotPro puis par le menu contextuel on sélectionne Insert Task puis Active View.

Après avoir ajouté la carte de fond, on crée les objets graphiques liés à nos Global Objects

On utilise l’objet Outlined Text que l’on glisse et dépose sur la carte, puis par son menu contextuel on édite ses propriétés.

add graphical object on Active View

Se reporter à la documentation pour la maitrise des paramètres d’objet d’active View.

Sélectionnons ensuite l’onglet Dynamic Aspect.

GO_AV_OperStatusObject.png

Cocher les cases « Activate Dynamic Aspect » and « Fill text Object » comme sur notre exemple

Dans le Wizard, sélectionner l’option Get Global Object. (Get Global value in older version)

Ensuite vous pouvez directement entrer le nom du Global Object ou ne passez par le Wizard pour le sélectionner.

Les règles de coloriage de l’objet graphique sont ensuite ajoutées, ici on reprend exactement ce que l’objet SNMP ifoperstatus renvoie et les cas ou le routeur ne répond pas en SNMP.

Valeurs possibles : up, down, testing, unknown, dormant, notPresent, lowerLayerDown, SNMP error, Not SNMP

Les règles de coloriage peuvent être sauvegardées dans des fichiers « template » ayant l’extension cte pour être réutilisés lors de la configuration d’autres objets graphiques d’Active View.

Fichier ifoperstatus.cte contenant les règles de coloriage

object filter 0 "up" 8454016 0 1 16777343 0 "(null)" 0
object filter 0 "testing" 33023 0 1 16777343 0 "(null)" 0
object filter 0 "down" 255 0 1 16777343 0 "(null)" 0
object filter 0 "unknown" 16744703 0 1 0 0 "(null)" 0
object filter 0 "notPresent" 16777088 0 1 0 0 "(null)" 0
object filter 0 "lowerLayerDown" 255 0 1 0 0 "(null)" 0
object filter 0 "SNMP error" 65535 0 1 0 0 "(null)" 0
object filter 0 "Not SNMP" 8454143 0 1 0 0 "(null)" 0

On répète l’opération pour chaque interface de routeur de notre carte.

La carte lorsque vous avez terminé affiche l'état de nos interfaces. Si une interface de routeur passe hors service, la carte l’affiche dans les 15 prochaines secondes.

Cette convergence, si nécessaire, peut être réduite à la seconde, mais gardez à l'esprit que cela génère des flux sur vos liens WAN, car les paquets SNMP doivent être échangés avec les routeurs.

GO_WanSimulationMap.png

Nous avons terminé cette étude de cas de mise en œuvre de Global Object avec LoriotPro. Les Global Object introduisent une séparation entre les collectes de données qu’elles soient en SNMP ou non et leur utilisation comme ici dans notre exemple dans des visuel Active View. Cette logique permet de gérer de très grandes quantités de collectes avec des intervalles pouvant descendre à la seconde, sur des équipements où les temps de réponse sont très variables.

 


www.loriotpro.com