SCOM: Surveillance des équipements réseau (Partie 1: alias des interfaces)

Microsoft a grandement amélioré la surveillance des appareils réseau avec SCOM 2012 par rapport à 2007 R2, notamment par l’intégration de la technologie « Smarts » d’EMC. Par contre, il existe toujours certaines lacunes dont la plupart peuvent être facilement corrigées par des managements packs simples. Cet article est le premier d’une série dédiée à améliorer la surveillance des équipements réseau.

La découverte des appareils, même si elle est exécutée régulièrement, ne met pas à jour les propriétés des interfaces. Un de nos clients devait construire des groupes dynamiques en utilisant l’alias des interfaces réseau mais la propriété n’est jamais mise à jour après la découverte initiale de l’appareil.

Premièrement, vérifions si c’est possible de mettre à jour la propriété de la classe en examinant sa définition :

[sourcecode language= »xml » highlight= »7″]<ClassType ID= »System.NetworkManagement.NetworkAdapter » Accessibility= »Public » Abstract= »false » Base= »System!System.NetworkAdapter » Hosted= »true » Singleton= »false »>
<Property ID= »ConnectionType » Type= »string » Key= »false » CaseSensitive= »true » Length= »256″ MinLength= »0″ />
<Property ID= »Description » Type= »string » Key= »false » CaseSensitive= »true » Length= »256″ MinLength= »0″ />
<Property ID= »DuplexMode » Type= »string » Key= »false » CaseSensitive= »true » Length= »256″ MinLength= »0″ />
<Property ID= »DuplexSource » Type= »string » Key= »false » CaseSensitive= »true » Length= »256″ MinLength= »0″ />
<Property ID= »Index » Type= »string » Key= »false » CaseSensitive= »true » Length= »256″ MinLength= »0″ />
<Property ID= »InterfaceAlias » Type= »string » Key= »false » CaseSensitive= »true » Length= »256″ MinLength= »0″ />
<Property ID= »InterfaceNumber » Type= »string » Key= »false » CaseSensitive= »false » Length= »38″ MinLength= »0″ />
<Property ID= »IsConnector » Type= »bool » Key= »false » CaseSensitive= »false » Length= »256″ MinLength= »0″ />
<Property ID= »MaxSpeed » Type= »double » Key= »false » CaseSensitive= »false » Length= »256″ MinLength= »0″ />
<Property ID= »MaxTransferUnit » Type= »int » Key= »false » CaseSensitive= »false » Length= »256″ MinLength= »0″ />
<Property ID= »Mib2IfType » Type= »int » Key= »false » CaseSensitive= »false » Length= »256″ MinLength= »0″ />
<Property ID= »Mode » Type= »string » Key= »false » CaseSensitive= »true » Length= »256″ MinLength= »0″ />
<Property ID= »Key » Type= »string » Key= »true » CaseSensitive= »true » Length= »256″ MinLength= »0″ />
<Property ID= »Type » Type= »string » Key= »false » CaseSensitive= »true » Length= »256″ MinLength= »0″ />
</ClassType>[/sourcecode]

Comme la propriété « InterfaceAlias » n’est pas une clé de la classe, on peut la mettre à jour après son initialisation. En s’inspirant d’un management pack pour des switch Brocade (http://gallery.technet.microsoft.com/Sample-Network-Management-a061608c), nous avons écrit une découverte qui met à jour la propriété dans SCOM toutes les 24h avec SNMP. L’OID de l’alias d’une interface est « 1.3.6.1.2.1.31.1.1.1.18.<NuméroDeL’interface> ». En ayant cette information, il est possible de créer un « DataSourceModuleType » qui exécute une requête SNMP à cet OID. La découverte devrait cibler la classe « System.NetworkManagement.NetworkAdapter » pour qu’elle soit appliquée à toutes les interfaces.

[sourcecode language= »xml » collapse= »true » title= »Cliquer pour afficher l’élément ‘DataSourceModuleType' »]
<DataSourceModuleType ID= »NetworkMonitoring.Extended.DataSourceModule.RediscoverInterface » Accessibility= »Internal » Batching= »false »>
<Configuration>
<xsd:element minOccurs= »1″ name= »IntervalSeconds » type= »xsd:integer » xmlns:xsd= »http://www.w3.org/2001/XMLSchema » />
<xsd:element minOccurs= »0″ name= »SyncTime » type= »xsd:string » xmlns:xsd= »http://www.w3.org/2001/XMLSchema » />
<xsd:element minOccurs= »1″ name= »DeviceKey » type= »xsd:string » xmlns:xsd= »http://www.w3.org/2001/XMLSchema » />
<xsd:element minOccurs= »1″ name= »IPAddress » type= »xsd:string » xmlns:xsd= »http://www.w3.org/2001/XMLSchema » />
<xsd:element minOccurs= »1″ name= »Community » type= »xsd:string » xmlns:xsd= »http://www.w3.org/2001/XMLSchema » />
<xsd:element minOccurs= »1″ name= »Version » type= »xsd:string » xmlns:xsd= »http://www.w3.org/2001/XMLSchema » />
<xsd:element minOccurs= »1″ name= »PortKey » type= »xsd:string » xmlns:xsd= »http://www.w3.org/2001/XMLSchema » />
<xsd:element minOccurs= »1″ name= »PortIndex » type= »xsd:string » xmlns:xsd= »http://www.w3.org/2001/XMLSchema » />
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID= »IntervalSeconds » Selector= »$Config/IntervalSeconds$ » ParameterType= »int » />
<OverrideableParameter ID= »SyncTime » Selector= »$Config/SyncTime$ » ParameterType= »string » />
</OverrideableParameters>
<ModuleImplementation Isolation= »Any »>
<Composite>
<MemberModules>
<DataSource ID= »Scheduler » TypeID= »System!System.Discovery.Scheduler »>
<Scheduler>
<SimpleReccuringSchedule>
<Interval>$Config/IntervalSeconds$</Interval>
<SyncTime>$Config/SyncTime$</SyncTime>
</SimpleReccuringSchedule>
<ExcludeDates />
</Scheduler>
</DataSource>
<ProbeAction ID= »Probe » TypeID= »NetworkLibrary!System.NetworkManagement.SnmpProbe »>
<Walk>false</Walk>
<WalkReturnMultipleItems>false</WalkReturnMultipleItems>
<IsWriteAction>false</IsWriteAction>
<IP>$Config/IPAddress$</IP>
<CommunityString>$Config/Community$</CommunityString>
<SnmpVarBinds>
<SnmpVarBind>
<OID>.1.3.6.1.2.1.31.1.1.1.18.$Config/PortIndex$</OID>
<Syntax>0</Syntax>
<Value VariantType= »8″ />
</SnmpVarBind>
</SnmpVarBinds>
</ProbeAction>
<ConditionDetection ID= »MapToDiscovery » TypeID= »System!System.Discovery.ClassSnapshotDataMapper »>
<ClassId>$MPElement[Name=’NetworkLibrary!System.NetworkManagement.NetworkAdapter’]$</ClassId>
<InstanceSettings>
<Settings>
<Setting>
<Name>$MPElement[Name=’NetworkLibrary!System.NetworkManagement.Node’]/DeviceKey$</Name>
<Value>$Config/DeviceKey$</Value>
</Setting>
<Setting>
<Name>$MPElement[Name=’NetworkLibrary!System.NetworkManagement.NetworkAdapter’]/Key$</Name>
<Value>$Config/PortKey$</Value>
</Setting>
<Setting>
<Name>$MPElement[Name=’NetworkLibrary!System.NetworkManagement.NetworkAdapter’]/InterfaceAlias$</Name>
<Value>$Data/SnmpVarBinds/SnmpVarBind[1]/Value$</Value>
</Setting>
</Settings>
</InstanceSettings>
</ConditionDetection>
</MemberModules>
<Composition>
<Node ID= »MapToDiscovery »>
<Node ID= »Probe »>
<Node ID= »Scheduler » />
</Node>
</Node>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
</DataSourceModuleType>[/sourcecode]

 

[sourcecode language= »xml » collapse= »true » title= »Cliquer pour afficher l’élément ‘Discovery' »]<Discovery ID= »NetworkMonitoring.Extended.Discovery.RediscoverInterface » Target= »NetworkLibrary!System.NetworkManagement.NetworkAdapter » Enabled= »true » ConfirmDelivery= »false » Remotable= »true » Priority= »Normal »>
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID= »NetworkLibrary!System.NetworkManagement.NetworkAdapter » />
</DiscoveryTypes>
<DataSource ID= »DS » TypeID= »NetworkMonitoring.Extended.DataSourceModule.RediscoverInterface »>
<IntervalSeconds>86400</IntervalSeconds>
<SyncTime>23:00</SyncTime>
<DeviceKey>$Target/Host/Property[Type= »NetworkLibrary!System.NetworkManagement.Node »]/DeviceKey$</DeviceKey>
<IPAddress>$Target/Host/Property[Type= »NetworkLibrary!System.NetworkManagement.Node »]/SNMPAddress$</IPAddress>
<Community>$RunAs[Name= »NetworkLibrary!System.NetworkManagement.Snmp.MonitoringAccount »]/CommunityString$</Community>
<Version>$Target/Host/Property[Type= »NetworkLibrary!System.NetworkManagement.Node »]/SNMPVersion$/</Version>
<PortKey>$Target/Property[Type= »NetworkLibrary!System.NetworkManagement.NetworkAdapter »]/Key$</PortKey>
<PortIndex>$Target/Property[Type= »NetworkLibrary!System.NetworkManagement.NetworkAdapter »]/Index$</PortIndex>
</DataSource>
</Discovery>[/sourcecode]

Malheureusement, il est impossible de céduler un flux de travail SCOM à un intervalle plus grand que 24h ou 86400 secondes. Lorsque la propriété « IntervalSeconds » est plus grande que 86400, le flux ne démarre jamais. Avant de déployer le management pack, il faut s’assurer que le travail est cédulé en dehors des heures de pointe (propriété « synctime ») et que le trafic SNMP n’aura pas d’impact sur le réseau. Pendant la découverte, il y aura également un impact significatif sur la performance des serveurs de gestion.

Avec ces informations, la même mécanique peut être appliquée pour mettre à jour n’importe quelle propriété d’une interface. La force de l’engin de surveillance de Microsoft est sa flexibilité par les management packs. Rappelez-vous de toujours évaluer l’impact d’un management pack dans un environnement de tests avant de l’importer dans l’environnement de production.

Nos services

test3

Analytique avancée

test

Intelligence Artificielle

test2

Infrastructure

Nos partenaires

Nos services

Microsoft Dynamics 365 Business Central

Microsoft Dynamics 365 Finance & Operations​

Microsoft Dynamics GP

Microsoft Dynamics 365 Customer Engagement

Unit4 solution de gestion de projet

Nos produits complémentaires