Introducción
ACI sigue a Cut-Through Switching, lo que significa que el paquete ya se ha reenviado antes de que se pueda calcular la CRC. Estos paquetes son típicamente pisoteados y reenviados como errores de salida. Debido a que ACI no descarta estos paquetes, el mismo paquete atraviesa el paquete y los contadores de CRC stomp se incrementan en el trayecto. Esto no significa que todas las interfaces que ven el CRC sean defectuosas. Por lo tanto, se necesita un triaje adecuado para aislar el puerto/SFP/fibra problemático. El proceso de clasificación ahora está automatizado a través de scripts Python, lo que facilita la resolución de problemas y evita las tareas manuales. El objetivo de este documento es explicar cómo utilizar las secuencias de comandos de automatización que se van a utilizar (véase adjunto).
Prerrequisitos Para ejecutar el Script Manualmente
El equipo cliente desde el que se ejecutará la secuencia de comandos debe cumplir los siguientes requisitos
a. Se debe instalar Python3
b. Acceso de red al dominio ACI
c. ACI_CRC_requirements.txt (adjunto) que se instalará. Este archivo se encuentra aquí.
Descargue el archivo (ACI_CRC_requirements.txt) en el equipo cliente
Abra Terminal y ejecute el comando 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
Prerrequisitos para ejecutar el script desde Container
Se prepara un contenedor con los paquetes de Python anteriores preinstalados.
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
Pasos para ejecutar los scripts
Tenga en cuenta que hay un total de dos scripts de Python (ACI_CRC_Poller.py y ACI_CRC_Parser.py). Estas secuencias de comandos están disponibles para su descarga desde Cisco DevNet Code Exchange mediante la siguiente URL.
https://developer.cisco.com/codeexchange/github/repo/CiscoDevNet/ACI-CRC-FCS-Checker
Descárguelos en la máquina/computadora, desde donde desea ejecutar las secuencias de comandos.
En este documento script-1 se refiere a ACI_CRC_Poller.py y script-2 se refiere a ACI_CRC_Parser.py.
1. ACI_CRC_Poller.py recopilará datos de errores CRC y FCS en archivos cada cinco minutos durante un máximo de siete días.
Ejecute script-1 (ACI_CRC_Poller.py) desde el terminal. Introduzca la dirección IP OOB para uno de los APIC en el clúster dado y sus credenciales.
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. Script-1 solicita la ubicación/ruta de acceso en el equipo/equipo local, donde almacenará los registros. Especifique una ruta de acceso válida; de lo contrario, el script no se ejecutará.
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. El script solicitará ahora la hora de finalización de la ejecución.
Introduzca la hora con el formato aaaa-mm-dd hh:mm (por zona horaria local del fabric), 5 minutos como mínimo y 7 días como máximo.
En este momento, script-1 comienza a recopilar errores FCS/CRC del fabric cada cinco minutos (hasta la hora de finalización especificada anteriormente por el usuario) y guarda los datos en los archivos en la ruta especificada en la entrada anterior.
----------------------------------------------------------------
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. Una vez ejecutada correctamente la primera secuencia de comandos, almacenará los archivos de datos sin procesar en la ubicación especificada por el usuario en el paso 2.
Verifique lo mismo que se muestra en el siguiente ejemplo.
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. Ahora es el momento de ejecutar el segundo script (ACI_CRC_Parser.py) .
Script-2 utilizará los archivos creados por script-1 y seguirá trabajando.
Introduzca la dirección IP OOB de uno de los APIC del clúster y sus credenciales.
Además, introduzca la misma ubicación de archivo que introdujo en el paso 2 al ejecutar la primera secuencia de comandos.
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 a imprimir los datos en un formato tabular como se muestra en el siguiente ejemplo.
Principalmente, enumerará las interfaces de nodo con errores CRC y FCS distintos de cero, junto con la diferencia en sus contadores CRC/FCS, durante el intervalo de tiempo especificado por el usuario. Usando LLDP, el script también va a determinar el dispositivo vecino conectado con interfaces dadas y, lo más importante, va a indicar qué nodo/interfaz es el origen de errores desde el punto de vista del fabric y qué interfaces de nodo están viendo CRC debido a Stomp.
Desde el punto de vista de la resolución de problemas de FCS, el resaltado en "Rojo" y marcado como "Local" es donde debe centrarse la resolución de problemas.
Es probable que esto ocurra en las interfaces, en las que los paquetes dañados o defectuosos entran en el fabric y provocan que los CRC se inunden en el 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. Además, la secuencia de comandos va a proporcionar las siguientes opciones a los usuarios para ordenar y ver datos granulares, lo que fue recogido por la secuencia de comandos 1 y 2.
El usuario puede elegir una opción entre el número 1-3 como entrada. Consulte el ejemplo siguiente.
1.Sort the data further
2.View the granular data of an interface
3.Exit
Input the number:
En el siguiente ejemplo, vamos por la opción 2 que nos ayuda a ver datos granulares para cualquier interfaz dada.
El script le pedirá al usuario que ingrese el número de POD respectivo, el ID de nodo y el ID de interfaz de la tabla impresa arriba (paso 6).
Aquí en este ejemplo, estamos usando 1-302-eth1/44, donde POD ID es 1, Node ID es 302 e Interface ID eth1/44. Esta es la interfaz
donde el script notificó el FCS local, como se muestra en el paso 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)):
En nuestro ejemplo, recopilamos los datos solo durante unos minutos del día, por lo que solo vemos una opción para el 27 de septiembre.
Por lo tanto, nuestra aportación será "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$