SUR CETTE PAGE
Vue d’ensemble : Mappage d’overlay sous-jacent à l’aide de Contrail Analytics
Analyse de superposition de sous-couche disponible dans Contrail
Nouveaux processus/services pour le mappage d’overlay sous-jacent
Configuration d’interfaces externes pour le mappage d’overlay sous-jacent
Configuration du protocole LLDP (Link Layer Discovery Protocol)
Envoi des informations pRouter au collecteur SNMP dans Contrail
Interface utilisateur Contrail pour l’analyse de la superposition sous-jacente
Activation de la topologie physique sur l’interface utilisateur Web
Opérations du module pour le mappage de superposition sous-jacente
Mappage d’overlay sous-jacent dans Contrail
Vue d’ensemble : Mappage d’overlay sous-jacent à l’aide de Contrail Analytics
Aujourd’hui, les centres de données cloud sont constitués d’un grand ensemble de serveurs interconnectés qui fournissent la capacité de calcul et de stockage nécessaire à l’exécution d’une variété d’applications. Les serveurs sont connectés à des commutateurs TOR redondants, qui à leur tour sont connectés à des routeurs spine. Le déploiement cloud est généralement partagé entre plusieurs locataires, chacun d’entre eux ayant généralement besoin de plusieurs réseaux isolés. Plusieurs réseaux isolés peuvent être fournis par des réseaux de superposition créés en formant des tunnels (par exemple, gre, ip-in-ip, mac-in-mac) sur la connectivité physique ou sous-jacente.
Au fur et à mesure que les données circulent dans le réseau superposé, Contrail peut fournir des statistiques et visualiser le trafic dans le réseau sous-jacent.
Analyse de superposition de sous-couche disponible dans Contrail
À partir de la version 2.20 de Contrail, vous pouvez afficher une variété d’analyses liées au trafic underlay et overlay dans l’interface utilisateur de Contrail Web. Voici quelques-unes des analyses fournies par Contrail pour les statistiques et la visualisation du trafic overlay, underlay.
Affichez la topologie du réseau sous-jacent.
Vue de l’interface utilisateur du réseau physique sous-jacent avec un mécanisme d’exploration pour afficher les serveurs connectés (calculs Contrail) et les machines virtuelles sur les serveurs.
Affichez les détails de n’importe quel élément de la topologie.
Vous pouvez afficher les détails d’une liaison pRouter, vRouter ou de machine virtuelle entre deux éléments. Vous pouvez également consulter les statistiques de trafic dans une vue graphique correspondant à l’élément sélectionné.
Affichez le chemin de sous-couche d’un flux de superposition.
À partir d’un flux de superposition, vous pouvez obtenir le chemin de sous-couche utilisé pour ce flux et mapper le chemin dans la vue topologique.
Architecture et collecte de données
L’accumulation des données pour mapper un flux d’overlay à son chemin d’underlay s’effectue en plusieurs étapes dans les modules Contrail.
Voici les étapes essentielles :
Nouveaux processus/services pour le mappage d’overlay sous-jacent
Le contrail-snmp-collector et le contrail-topology sont de nouveaux démons qui sont tous deux ajoutés au contrail-analytics nœud. Le contrail-analytics package contient ces nouvelles fonctionnalités et leurs fichiers associés. Le contrail-status affiche les nouveaux services.
Exemple : contrail-status
Voici un exemple d’utilisation contrail-status pour afficher l’état du nouveau processus et service pour le mappage de superposition sous-jacente.
user@host:~# contrail-status == Contrail Control == supervisor-control: active contrail-control active … == Contrail Analytics == supervisor-analytics: active … contrail-query-engine active contrail-snmp-collector active contrail-topology active
Exemple : Commande de service
La service commande peut être utilisée pour démarrer, arrêter et redémarrer les nouveaux services. Reportez-vous à l’exemple suivant.
user@host:~# service contrail-snmp-collector status contrail-snmp-collector RUNNING pid 12179, uptime 1 day, 14:59:11
Configuration d’interfaces externes pour le mappage d’overlay sous-jacent
Cette section décrit les configurations d’interface externe nécessaires à la réussite du mappage d’overlay underlay pour Contrail Analytics.
Topologie physique
La topologie physique typique comprend :
Serveurs connectés aux commutateurs ToR.
Commutateurs ToR connectés à des commutateurs centraux.
Commutateurs centraux connectés aux commutateurs centraux.
Voici un exemple de la façon dont la topologie est représentée dans l’analyse de l’interface utilisateur Web Contrail.
analytique
SNMP Configuration
Configurez SNMP sur les périphériques physiques afin que le puisse contrail-snmp-collector lire les données SNMP.
Voici un exemple de configuration SNMP à partir d’un équipement Juniper Networks.
set snmp community public authorization read-only
Configuration du protocole LLDP (Link Layer Discovery Protocol)
Configurez LLDP sur l’équipement physique afin que le contrail-snmp-collector puisse lire les informations de voisinage des routeurs.
Voici un exemple de configuration LLDP sur un équipement Juniper Networks.
set protocols lldp interface all
set protocols lldp-med interface all
Configuration IPFIX et sFlow
Les échantillons de flux sont envoyés à par contrail-collector les appareils physiques. Étant donné que le contrail-collector prend en charge les protocoles sFlow et IPFIX pour la réception d’échantillons de flux, les périphériques physiques, tels que les périphériques MX Series ou les commutateurs ToR, doivent être configurés pour envoyer des échantillons à l’aide de l’un de ces protocoles.
Exemple : configuration sFlow
Voici un exemple de configuration sFlow. Dans l’exemple, la variable <source ip>IP fait référence au bouclage ou à l’adresse IP accessible de l’équipement qui agit comme source de flux, et l’autre variable <collector_IP_data> IP est l’adresse de l’équipement collecteur.
root@host> show configuration protocols sflow | display set set protocols sflow polling-interval 0 set protocols sflow sample-rate ingress 10 set protocols sflow source-ip <source ip>4 set protocols sflow collector <collector_IP_data> udp-port 6343 set protocols sflow interfaces ge-0/0/0.0 set protocols sflow interfaces ge-0/0/1.0 set protocols sflow interfaces ge-0/0/2.0 set protocols sflow interfaces ge-0/0/3.0 set protocols sflow interfaces ge-0/0/4.0
Exemple : Configuration IPFIX
Voici un exemple de configuration IPFIX d’un équipement Juniper Networks. La variable <ip_sflow collector> d’adresse IP représente le collecteur sflow (nœud d’analyse contrôle-collecteur) et <source ip> représente l’interface source (sortante) sur le routeur/commutateur utilisé pour envoyer les données de flux au collecteur. Il peut également s’agir de l’adresse lo0, si elle est accessible à partir du cluster Contrail.
root@host> show configuration chassis | display set set chassis tfeb slot 0 sampling-instance sample-ins1 set chassis network-services root@host> show configuration chassis tfeb | display set set chassis tfeb slot 0 sampling-instance sample-ins1 root@host > show configuration services flow-monitoring | display set set services flow-monitoring version-ipfix template t1 flow-active-timeout 30 set services flow-monitoring version-ipfix template t1 flow-inactive-timeout 30 set services flow-monitoring version-ipfix template t1 template-refresh-rate packets 10 set services flow-monitoring version-ipfix template t1 ipv4-template root@host > show configuration interfaces | display set | match sampling set interfaces ge-1/0/0 unit 0 family inet sampling input set interfaces ge-1/0/1 unit 0 family inet sampling input root@host> show configuration forwarding-options sampling | display set set forwarding-options sampling instance sample-ins1 input rate 1 set forwarding-options sampling instance sample-ins1 family inet output flow-server <ip_sflow collector> port 4739 set forwarding-options sampling instance sample-ins1 family inet output flow-server <ip_sflow collector> version-ipfix template t1 set forwarding-options sampling instance sample-ins1 family inet output inline-jflow source-address <source ip>
Envoi des informations pRouter au collecteur SNMP dans Contrail
Les informations sur les périphériques physiques doivent être envoyées au collecteur SNMP avant que les informations d’analyse complètes puissent être lues et affichées. En règle générale, les informations du pRouter sont extraites du contrail-config fichier.
Collecteur SNMP obtenant des informations sur le pRouter à partir du fichier contrail-config
Les routeurs physiques sont ajoutés à l’à contrail-config l’aide de l’interface utilisateur de Contrail ou à l’aide d’API directe, au moyen de scripts de provisionnement ou autres. Une fois la configuration dans le contrail-config, le contrail-snmp-collector récupère les informations du routeur physique à partir de contrail-config. Le collecteur SNMP utilise cette liste et les autres paramètres de configuration pour effectuer des requêtes SNMP et remplir les UVE pRouter.
de routeur physique
UVE pRouter
Les UVE pRouter sont accessibles à partir des API REST de votre système à partir de , à l’aide contrail-analytics-apid’une URL de la forme :
http://<host ip>:8081/analytics/uves/prouters
Voici un exemple de sortie d’une API REST pRouter :
REST pRouter
Les détails d’un pRouter UVE peuvent être obtenus à partir de votre système, à l’aide d’une URL de la forme suivante :
http://<host ip>:8081/analytics/uves/prouter/a7-ex3?flat
Voici un exemple de sortie d’un pRouter UVE.
Interface utilisateur Contrail pour l’analyse de la superposition sous-jacente
La vue topologique et les fonctionnalités associées sont accessibles à partir de l’interface utilisateur Web de Contrail, Monitor > Physical Topology.
Activation de la topologie physique sur l’interface utilisateur Web
Pour activer la section Topologie physique dans l’interface utilisateur Web de Contrail :
Affichage de la topologie au niveau de la machine virtuelle
Dans l’interface utilisateur de Contrail, il est possible d’explorer la topologie affichée jusqu’au niveau de la machine virtuelle. Le diagramme suivant montre les machines virtuelles instanciées sur le vRouter a7s36 et la topologie physique complète associée à chacune d’entre elles.
Affichage du trafic de n’importe quel lien
Dans Monitor > Physical Topology, double-cliquez sur n’importe quel lien de la topologie pour afficher le graphique des statistiques de trafic de ce lien. Voici un exemple.
des statistiques de trafic
Flux de traces
Cliquez sur l’onglet Flux de suivi pour afficher la liste des flux actifs. Pour afficher le chemin d’accès d’un flux, cliquez sur un flux dans la liste des flux actifs, puis cliquez sur le bouton Suivre le flux . Le chemin emprunté dans le calque sous-jacent par le flux sélectionné s’affiche. Voici un exemple.
actifs
Limites de la fonction Trace Flow
Étant donné que la fonctionnalité Trace Flow utilise ip traceroute pour déterminer le chemin entre les deux vRouters impliqués dans le flux, elle présente les mêmes limitations que ip traceroute, notamment le fait que les routeurs de couche 2 du chemin ne sont pas répertoriés et n’apparaissent donc pas dans la topologie.
Flux de recherche et flux cartographiques
Cliquez sur l’onglet Flux de recherche pour ouvrir une boîte de dialogue de recherche, puis cliquez sur le bouton Rechercher pour répertorier les flux qui correspondent aux critères de recherche. Vous pouvez sélectionner un flux dans la liste et cliquer sur Mapper le flux pour afficher le chemin de sous-couche emprunté par le flux sélectionné dans la topologie. Voici un exemple.
couche inférieure
Schémas de carte de flux de superposition vers sous-couche
Le schéma permettant d’interroger les informations de mappage underlay pour un flux de superposition est obtenu à partir d’une API REST, accessible sur votre système à l’aide d’une URL de la forme suivante :
http://<host ip>:8081/analytics/table/OverlayToUnderlayFlowMap/schema
Exemple : schéma de carte de flux de superposition vers sous-couche
{"type": "FLOW",
"columns": [
{"datatype": "string", "index": true, "name": "o_svn", "select": false, "suffixes": ["o_sip"]},
{"datatype": "string", "index": false, "name": "o_sip", "select": false, "suffixes": null},
{"datatype": "string", "index": true, "name": "o_dvn", "select": false, "suffixes": ["o_dip"]},
{"datatype": "string", "index": false, "name": "o_dip", "select": false, "suffixes": null},
{"datatype": "int", "index": false, "name": "o_sport", "select": false, "suffixes": null},
{"datatype": "int", "index": false, "name": "o_dport", "select": false, "suffixes": null},
{"datatype": "int", "index": true, "name": "o_protocol", "select": false, "suffixes": ["o_sport", "o_dport"]},
{"datatype": "string", "index": true, "name": "o_vrouter", "select": false, "suffixes": null},
{"datatype": "string", "index": false, "name": "u_prouter", "select": null, "suffixes": null},
{"datatype": "int", "index": false, "name": "u_pifindex", "select": null, "suffixes": null},
{"datatype": "int", "index": false, "name": "u_vlan", "select": null, "suffixes": null},
{"datatype": "string", "index": false, "name": "u_sip", "select": null, "suffixes": null},
{"datatype": "string", "index": false, "name": "u_dip", "select": null, "suffixes": null},
{"datatype": "int", "index": false, "name": "u_sport", "select": null, "suffixes": null},
{"datatype": "int", "index": false, "name": "u_dport", "select": null, "suffixes": null},
{"datatype": "int", "index": false, "name": "u_protocol", "select": null, "suffixes": null},
{"datatype": "string", "index": false, "name": "u_flowtype", "select": null, "suffixes": null},
{"datatype": "string", "index": false, "name": "u_otherinfo", "select": null, "suffixes": null}]}
Le schéma pour les données sous-jacentes sur les pRouters est défini dans l’installation de Contrail à l’adresse suivante :
http://<host ip>:8081/analytics/table/StatTable.UFlowData.flow/schema
Exemple : schéma de données de flux pour underlay
{"type": "STAT",
"columns": [
{"datatype": "string", "index": true, "name": "Source", "suffixes": null},
{"datatype": "int", "index": false, "name": "T", "suffixes": null},
{"datatype": "int", "index": false, "name": "CLASS(T)", "suffixes": null},
{"datatype": "int", "index": false, "name": "T=", "suffixes": null},
{"datatype": "int", "index": false, "name": "CLASS(T=)", "suffixes": null},
{"datatype": "uuid", "index": false, "name": "UUID", "suffixes": null},
{"datatype": "int", "index": false, "name": "COUNT(flow)", "suffixes": null},
{"datatype": "string", "index": true, "name": "name", "suffixes": ["flow.pifindex"]},
{"datatype": "int", "index": false, "name": "flow.pifindex", "suffixes": null},
{"datatype": "int", "index": false, "name": "SUM(flow.pifindex)", "suffixes": null},
{"datatype": "int", "index": false, "name": "CLASS(flow.pifindex)", "suffixes": null},
{"datatype": "int", "index": false, "name": "flow.sport", "suffixes": null},
{"datatype": "int", "index": false, "name": "SUM(flow.sport)", "suffixes": null},
{"datatype": "int", "index": false, "name": "CLASS(flow.sport)", "suffixes": null},
{"datatype": "int", "index": false, "name": "flow.dport", "suffixes": null},
{"datatype": "int", "index": false, "name": "SUM(flow.dport)", "suffixes": null},
{"datatype": "int", "index": false, "name": "CLASS(flow.dport)", "suffixes": null},
{"datatype": "int", "index": true, "name": "flow.protocol", "suffixes": ["flow.sport", "flow.dport"]},
{"datatype": "int", "index": false, "name": "SUM(flow.protocol)", "suffixes": null},
{"datatype": "int", "index": false, "name": "CLASS(flow.protocol)", "suffixes": null},
{"datatype": "string", "index": true, "name": "flow.sip", "suffixes": null},
{"datatype": "string", "index": true, "name": "flow.dip", "suffixes": null},
{"datatype": "string", "index": true, "name": "flow.vlan", "suffixes": null},
{"datatype": "string", "index": false, "name": "flow.flowtype", "suffixes": null},
{"datatype": "string", "index": false, "name": "flow.otherinfo", "suffixes": null}]}
Exemple : requête classique pour la carte de flux
Voici une requête typique. En interne, le analytics-api effectue une requête dans , FlowRecordTablepuis dans , StatTable.UFlowData.flowpour renvoyer la liste des paires qui donnent le chemin de sous-couche emprunté pour le flux de (prouter, pifindex) superposition donné.
FROM OverlayToUnderlayFlowMap SELECT prouter, pifindex WHERE o_svn, o_sip, o_dvn, o_dip, o_sport, o_dport, o_protocol = <overlay flow>
Opérations du module pour le mappage de superposition sous-jacente
Fonctionnement du collecteur SNMP
Le collecteur SNMP Contrail utilise une bibliothèque Net-SNMP pour communiquer avec un routeur physique ou n’importe quel agent SNMP. Lors de la réception des paquets SNMP, les données sont traduites dans le dictionnaire Python et les objets UVE correspondants sont créés. Les objets UVE sont ensuite postés dans le collecteur SNMP.
Le module SNMP se met en veille pendant une période configurable, puis duplique un processus de collecteur et attend que le processus se termine. Le processus de collecte passe par une liste de périphériques à interroger. Pour chaque appareil, il duplique une tâche greenlet (coroutine Python), accumule les données SNMP, écrit le résumé dans un fichier JSON et se ferme. Le processus parent lit ensuite le fichier JSON, crée des UVE, envoie les UVE au collecteur, puis se met à nouveau en veille.
L’UVE pRouter envoyé par le collecteur SNMP ne transporte que les informations MIB brutes.
Exemple : Entrée pRouter transportée dans pRouter UVE
La définition ci-dessous montre le pRouterEntry porté dans le pRouterUVEfichier . De plus, un exemple LldpTable de définition est présenté.
Les éléments suivants permettent de créer une table virtuelle telle que définie par :
http://<host ip>:8081/analytics/table/StatTable.UFlowData.flow/schema
struct LldpTable {
1: LldpLocalSystemData lldpLocalSystemData
2: optional list<LldpRemoteSystemsData> lldpRemoteSystemsData
}
struct PRouterEntry {
1: string name (key="ObjectPRouter")
2: optional bool deleted
3: optional LldpTable lldpTable
4: optional list<ArpTable> arpTable
5: optional list<IfTable> ifTable
6: optional list<IfXTable> ifXTable
7: optional list<IfStats> ifStats (tags="name:.ifIndex")
8: optional list<IpMib> ipMib
}
uve sandesh PRouterUVE {
1: PRouterEntry data
}
Fonctionnement du module de topologie
Le module de topologie lit les UVE postés par le collecteur SNMP et calcule la table voisine, en remplissant la table avec le nom du système distant, les noms des interfaces locales et distantes, le type distant (pRouter ou vRouter) et les ifindex locaux et distants. Le module de topologie se met en veille pendant un certain temps, lit les UVE, puis calcule la table voisine et poste les UVE sur le collecteur.
L’UVE pRouter envoyé par le module de topologie contient la liste des voisins, de sorte que les clients peuvent assembler toutes les listes de voisins pRouter pour calculer la topologie complète.
La définition de l’UVE pRouter correspondante est la suivante.
struct LinkEntry {
1: string remote_system_name
2: string local_interface_name
3: string remote_interface_name
4: RemoteType type
5: i32 local_interface_index
6: i32 remote_interface_index
}
struct PRouterLinkEntry {
1: string name (key="ObjectPRouter")
2: optional bool deleted
3: optional list<LinkEntry> link_table
}
uve sandesh PRouterLinkUVE {
1: PRouterLinkEntry data
}
Fonctionnement du collecteur IPFIX et sFlow
Un collecteur IPFIX et sFlow a été implémenté dans le collecteur Contrail. Le collecteur reçoit les échantillons IPFIX et sFlow et les stocke en tant qu’échantillons statistiques dans la base de données d’analyse.
Exemple : données du collecteur IPFIX sFlow
La définition suivante montre les données stockées pour les échantillons statistiques et les index qui peuvent être utilisés pour effectuer des requêtes.
struct UFlowSample {
1: u64 pifindex
2: string sip
3: string dip
4: u16 sport
5: u16 dport
6: u16 protocol
7: u16 vlan
8: string flowtype
9: string otherinfo
}
struct UFlowData {
1: string name (key="ObjectPRouterIP")
2: optional bool deleted
3: optional list<UFlowSample> flow (tags="name:.pifindex, .sip, .dip, .protocol:.sport, .protocol:.dport, .vlan")
}
Dépannage du mappage de superposition de sous-couche
Cette section fournit une variété de liens où vous pouvez rechercher les erreurs qui peuvent se produire avec le mappage de superposition sous-jacente.
Journaux système
Se connecte et contrail-snmp-collector contrail-topology se trouve aux emplacements suivants sur un système Contrail installé :
/var/log/contrail/contrail-snmp-collector-stdout.log
/var/log/contrail/contrail-topology.log
Utilitaire Introspect
Utilisez les URL des formulaires suivants sur votre système Contrail pour accéder aux utilitaires introspect pour les données SNMP et pour les données de topologie.
Introspection des données SNMP
http://<host ip>:5920/Snh_SandeshUVECacheReq?x=PRouterEntryIntrospection des données topologiques
http://<host ip>:5921/Snh_SandeshUVECacheReq?x=PRouterLinkEntry
Script pour ajouter des objets pRouter
Le mécanisme habituel pour ajouter des objets pRouter à est via l’interface contrail-config utilisateur Contrail. Mais vous avez également la possibilité d’ajouter ces objets à l’aide de la commande Contrail vnc-api. Pour ajouter un pRouter, enregistrez le fichier avec le nom cfg-snmp.py, puis exécutez la commande comme indiqué :
python cfg-snmp.py
Exemple : Du contenu pour cfg-snmp.py
#!python
from vnc_api import vnc_api
from vnc_api.gen.resource_xsd import SNMPCredentials
vnc = vnc_api.VncApi('admin', 'abcde123', 'admin')
apr = vnc_api.gen.resource_client.PhysicalRouter(name='a7-mx80-1')
apr.set_physical_router_management_ip('ip_address')
apr.set_physical_router_dataplane_ip(''ip_address')
apr.set_physical_router_snmp_credentials(SNMPCredentials(version=2, v2_community='public'))
vnc.physical_router_create(apr)
#$ABC123
apr = vnc_api.gen.resource_client.PhysicalRouter(name='a7-mx80-2')
apr.set_physical_router_management_ip('ip_address')
apr.set_physical_router_dataplane_ip('ip_address')
apr.set_physical_router_snmp_credentials(SNMPCredentials(version=2, v2_community='public'))
vnc.physical_router_create(apr)
#$ABC123'
apr = vnc_api.gen.resource_client.PhysicalRouter(name='a7-ex3')
apr.set_physical_router_management_ip('source_ip')
apr.set_physical_router_dataplane_ip('source_ip'')
apr.set_physical_router_snmp_credentials(SNMPCredentials(version=2, v2_community='public'))
vnc.physical_router_create(apr)
#$ABC123'
apr = vnc_api.gen.resource_client.PhysicalRouter(name='a7-ex2')
apr.set_physical_router_management_ip('ip_address')
apr.set_physical_router_dataplane_ip('ip_address')
apr.set_physical_router_snmp_credentials(SNMPCredentials(version=2, v2_community='public'))
vnc.physical_router_create(apr)
#$ABC123'