Introduction
L'ACI suit la commutation cut-through, ce qui signifie que le paquet est déjà transféré avant que le CRC puisse être calculé. Ces paquets sont généralement piétinés et transférés en tant qu'erreurs de sortie. Étant donné que l'ACI ne supprime pas ces paquets, le même paquet traverse le paquet et les compteurs de CRC Stop sont incrémentés sur le chemin. Cela ne signifie pas que toutes les interfaces qui voient le CRC sont défectueuses. Par conséquent, un triage approprié est nécessaire pour isoler le port/SFP/fibre problématique. Le processus de triage est désormais automatisé via des scripts Python, ce qui facilite le dépannage et évite les tâches manuelles. L'objectif de ce document est d'expliquer comment utiliser les scripts d'automatisation (voir ci-joint).
Conditions préalables Pour exécuter le script manuellement
La machine cliente à partir de laquelle le script sera exécuté doit répondre aux exigences suivantes
a. Python3 doit être installé
b. Accès réseau au domaine ACI
c. ACI_CRC_requirements.txt (joint) à installer. Ce fichier se trouve ici.
Téléchargez le fichier (ACI_CRC_requirements.txt) sur l'ordinateur client
Ouvrez Terminal et exécutez la commande- pip3 install -r ACI_CRC_requirements.txt
ABCD-M-G24X:downloads abcd$ pip3 install -r ACI_CRC_requirements.txt
Collecting bcrypt==3.2.0 (from -r ACI_CRC_requirements.txt (line 1))
Downloading https://files.pythonhosted.org/packages/bf/6a/0afb1e04aebd4c3ceae630a87a55fbfbbd94dea4eaf01e53d36743c85f02/bcrypt-3.2.0-cp36-abi3-macosx_10_9_x86_64.whl
Collecting cffi==1.14.6 (from -r ACI_CRC_requirements.txt (line 2))
Downloading https://files.pythonhosted.org/packages/ca/e1/015e2ae23230d9de8597e9ad8c0b81d5ac181f08f2e6e75774b7f5301677/cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl (176kB)
|████████████████████████████████| 184kB 1.4MB/s
**snip**
Successfully installed DateTime-4.3 Pillow-8.3.2 bcrypt-3.2.0 cffi-1.14.6 cryptography-3.4.8 cycler-0.10.0 kiwisolver-1.3.2
matplotlib-3.4.3 numpy-1.21.2 pandas-1.3.2 paramiko-2.7.2 pyparsing-2.4.7 python-dateutil-2.8.2 pytz-2021.1 six-1.16.0
stdiomask-0.0.5 tabulate-0.8.9 termcolor-1.1.0 zope.interface-5.4.0
Conditions préalables à l'exécution du script à partir du conteneur
Un conteneur est préparé avec les Packages Python ci-dessus préinstallés.
docker login docker.io
docker pull aci-stomper
docker run -d --name -p :80 aci-stomper (on your browser http://ContainerIP:someport)
docker ps
docker exec -it /bin/bash
root@6df99d5dbbad:/# cd /home/scripts/
root@6df99d5dbbad:/home/scripts# ls
ACI_CRC_Parser.py ACI_CRC_Poller.py
Étapes d'exécution des scripts
Veuillez noter qu'il y a au total deux scripts python (ACI_CRC_Poller.py et ACI_CRC_Parser.py). Ces scripts peuvent être téléchargés à partir de Cisco DevNet Code Exchange à l'aide de l'URL ci-dessous.
https://developer.cisco.com/codeexchange/github/repo/CiscoDevNet/ACI-CRC-FCS-Checker
Téléchargez les deux sur la machine/l'ordinateur à partir duquel vous souhaitez exécuter ces scripts.
Dans ce document, script-1 fait référence à ACI_CRC_Poller.py et script-2 fait référence à ACI_CRC_Parser.py.
1. ACI_CRC_Poller.py recueillera les données d'erreur CRC et FCS dans des fichiers toutes les cinq minutes pour une durée maximale de sept jours.
Exécutez script-1 (ACI_CRC_Poller.py) à partir du terminal. Entrez l'adresse IP OOB de l'un des APIC dans le cluster donné et ses informations d'identification.
ABCD-M-G24X:downloads abcd$ python3 ACI_CRC_Poller.py
Enter the IP address or DNS Name of APIC: 10.197.204.184
__________________________________________________________
Enter the username: admin
___________________________________________________________
Enter the password: **********
Trying to connect to APIC
Connection established to the APIC
___________________________________________________________
2. Le script 1 demande la localisation/le chemin sur l'ordinateur local, où il stockera les enregistrements. Entrez un chemin d'accès valide, sinon le script ne s'exécutera pas.
Please enter the folder where files have to be stored
_____________________________________________________________
VALID folder format:
EXAMPLE:
Windows-> C:\Users\Admin\Desktop\ACI\
MAC -> /User/admin/Desktop/ACI/
---------------------------------------------------------------------------------------------------
PLEASE NOTE that data collection and script execution might get impacted if folder format is not as below
--------------------------------------------------------------------------------------------------------
Enter the absolute path of the folder where the files have to be stored:/Users/abcd/Downloads/FCS_Checker/ <<<<<<<<<<<<<<
3. Le script demande maintenant l'heure de fin de l'exécution.
Veuillez saisir l'heure au format yyy-mm-dd hh:mm (par fuseau horaire local du fabric), minimum 5 minutes et maximum jusqu'à 7 jours.
À ce stade, script-1 commence à collecter les erreurs FCS/CRC du fabric toutes les cinq minutes (jusqu'à l'heure de fin spécifiée précédemment par l'utilisateur) et enregistre les données dans des fichiers au niveau du chemin spécifié dans l'entrée précédente.
----------------------------------------------------------------
Enter the End Time until which the script runs(in the format of yyyy-mm-dd hh:mm, current time:2021-09-27 11:27.... maximum upto 2021-10-04 11:27): 2021-09-27 11:32 <<<<<
___________________________________________________________
The script is executing ........................
The script is executing ........................
ABCD-M-G24X:downloads abcd$
4. Une fois le premier script exécuté, il stocke les fichiers de données brutes à l'emplacement spécifié par l'utilisateur à l'étape 2.
Vérifiez la même chose que dans l'exemple ci-dessous.
ABCD-M-G24X:FCS_Checker kbosu$ pwd
/Users/abcd/Downloads/FCS_Checker
ls -l
total 16
-rw-r--r--@ 1 kbosu staff 1419 Sep 27 11:28 CRC_FCS_20210927_1128.txt
-rw-r--r--@ 1 kbosu staff 1419 Sep 27 11:33 CRC_FCS_20210927_1133.txt
ABCD-M-G24X:FCS_Checker abcd$
5. Maintenant, il est temps d'exécuter le deuxième script (ACI_CRC_Parser.py) .
Script-2 va utiliser les fichiers créés par script-1 et aller plus loin.
Entrez l'adresse IP OOB de l'un des APIC dans le cluster donné et ses informations d'identification.
Entrez également le même emplacement de fichier que celui que vous avez entré à l'étape 2 lors de l'exécution du premier script.
ABCD-M-G24X:downloads abcd$ python3 ACI_CRC_Parser.py
Enter the IP address or DNS Name of APIC: 10.197.204.184
__________________________________________________________
Enter the username: admin
___________________________________________________________
Enter the password: **********
Trying to connect to APIC
Connection established to the APIC
_____________________________________________________________
Please enter the folder where files are stored
Please make sure we have at least two files exists in the directory where you have saved data
_____________________________________________________________
--------------------------------------------------------------------------------------------------------
Enter the absolute path of the folder where the files are stored:/Users/abcd/Downloads/FCS_Checker/
___________________________________________________________
You have CRC and FCS for the below date range
1.2021-09-27
Fetching first and last file of the same date 20210927
CRC_FCS_20210927_1128.txt
CRC_FCS_20210927_1133.txt
__________________________________________________________
The script is executing.....
__________________________________________________________
The script execution has completed
6. Script-2 va imprimer les données sous forme de tableau, comme illustré ci-dessous.
Il va principalement répertorier les interfaces de noeud avec des erreurs CRC et FCS non nulles, ainsi que la différence dans leurs compteurs CRC/FCS, pendant l'intervalle de temps spécifié par l'utilisateur. Avec le protocole LLDP, le script va également déterminer le périphérique voisin connecté avec des interfaces données et, plus important encore, il va indiquer quel noeud/interface est la source d’erreurs du point de vue du fabric et quelles interfaces de noeud voient juste des CRC en raison de Stomp.
Du point de vue du dépannage FCS, celui mis en évidence en « Rouge » et marqué comme « Local » est celui sur lequel le dépannage doit se concentrer.
Il s'agit probablement de l'interface ou des interfaces à partir desquelles des paquets défectueux/endommagés pénètrent dans le fabric et provoquent l'inondation des CRC dans le fabric.
+--------+---------+--------------------+-----------+-----------+---------------+---------------+---------------+---------------+-------------------------------------------------------------------------------------+--------------+
| POD_ID | NODE_ID | NODE_NAME | NODE_ROLE | INTERFACE | 20210927_1128 | 20210927_1133 | 20210927_1128 | 20210927_1133 | NEIGHBOR | ERROR SOURCE |
+--------+---------+--------------------+-----------+-----------+-----CRC-------+----CRC Diff---+----FCS--------+---FCS Diff----+-------------------------------------------------------------------------------------+--------------+
| 1 | 302 | bgl-aci06-t2-leaf2 | leaf | eth1/44 | 5002806823759 | 127841888 | 5002806823759 | 127841888 | No LLDP /CDP neighbours found please check physically where this interface connects | Local |
| 1 | 101 | bgl-aci06-spine1 | spine | eth1/1 | 2981200154 | 132103050 | 0 | 0 | System:bgl-aci06-t1-leaf1.cisco.com,Interface:Eth1/49 | Stomp |
| 1 | 101 | bgl-aci06-spine1 | spine | eth1/2 | 968286 | 0 | 0 | 0 | | Historic |
| 1 | 201 | bgl-aci06-t1-leaf1 | leaf | eth1/1 | 12 | 0 | 0 | 0 | | Historic |
| 1 | 201 | bgl-aci06-t1-leaf1 | leaf | eth1/51 | 4999243774529 | 0 | 0 | 0 | | Historic |
| 1 | 201 | bgl-aci06-t1-leaf1 | leaf | eth1/52 | 5002807353809 | 127841212 | 0 | 0 | System:bgl-aci06-t2-leaf2.cisco.com,Interface:Eth1/49 | Stomp |
| 1 | 202 | bgl-aci06-t1-leaf2 | leaf | eth1/51 | 968286 | 0 | 0 | 0 | | Historic |
| 1 | 301 | bgl-aci06-t2-leaf1 | leaf | eth1/44 | 4999245287405 | 0 | 4999245287405 | 0 | | Historic |
| 1 | 301 | bgl-aci06-t2-leaf1 | leaf | eth1/49 | 4999823953891 | 0 | 0 | 0 | | Historic |
| 1 | 302 | bgl-aci06-t2-leaf2 | leaf | eth1/49 | 4999243774529 | 0 | 0 | 0 | | Historic |
+--------+---------+--------------------+-----------+-----------+---------------+---------------+---------------+---------------+-------------------------------------------------------------------------------------+--------------+
7. En outre, le script va fournir les options suivantes aux utilisateurs pour trier et afficher les données granulaires, ce qui a été collecté par script-1 et 2.
L'utilisateur peut choisir une option comprise entre 1 et 3 comme entrée. Voir l'exemple ci-dessous.
1.Sort the data further
2.View the granular data of an interface
3.Exit
Input the number:
Dans l'exemple ci-dessous, nous allons vers l'option 2 qui nous aide à afficher des données granulaires pour une interface donnée.
Le script invite l'utilisateur à saisir le numéro POD , l'ID de noeud et l'ID d'interface respectifs dans le tableau imprimé ci-dessus (étape 6).
Dans cet exemple, nous utilisons 1-302-eth1/44, où POD ID est 1, Node ID est 302 et Interface ID eth1/44. Il s’agit de l’interface
où la séquence de contrôle de trame locale a été signalée par le script, comme indiqué à l'étape 6.
Input the number:2
---------------------------------------------------------------------------
Enter an interface for which you need granular data(POD_ID-NODE_ID-INTERFACE Example:1-101-eth1/5): 1-302-eth1/44
----------------------------------------------------------------------
You have CRC and FCS data in the below date range
1.2021-09-27
Enter the date for which you need granular data(any number from the above list range(1-1)):
Dans notre exemple, nous avons recueilli les données seulement pour quelques minutes d'une journée, donc nous voyons juste une option pour daté 27 sept.
Par conséquent, notre entrée sera « 1 ».
Enter the date for which you need granular data(any number from the above list range(1-1)): 1
+-------+---------------+---------------+
| Time | CRC | FCS |
+-------+---------------+---------------+
| 11:28 | 5002806823759 | 5002806823759 |
| 11:33 | 5002934665647 | 5002934665647 |
+-------+---------------+---------------+
----------------------------------------------------------------
Do you want to continue viewing the granular data(0/1), 1-yes, 0-no:0
--------------------------------------------------------------------------------
Please select any number below to sort the data further or to view granular data of an interface
1.Sort the data further
2.View the granular data of an interface
3.Exit
Input the number:3
ABCD-M-G24X:downloads abcd$