Introdução
A ACI segue a switching cut-through, o que significa que o pacote já foi encaminhado antes que o CRC possa ser computado. Esses pacotes são normalmente estompados e encaminhados como erros de saída. Como a ACI não descarta esses pacotes, o mesmo pacote atravessa o pacote e os contadores CRC de stomp são incrementados no caminho. Isso não significa que todas as interfaces que veem o CRC estão com defeito. Portanto, a triagem apropriada é necessária para isolar a porta/SFP/fibra problemática. O processo de triagem agora é automatizado através de scripts Python, o que resulta em uma solução de problemas mais fácil e evita tarefas manuais. O escopo deste documento é explicar como usar os scripts de automação a serem usados (consulte em anexo).
Pré-requisitos Para executar o Script Manualmente
O computador cliente a partir do qual o script será executado deve atender aos seguintes requisitos
a. O Python3 deve estar instalado
b. Acesso à rede para o domínio ACI
c. ACI_CRC_requirements.txt (anexado) a ser instalado. Este arquivo está localizado aqui.
Faça o download do arquivo (ACI_CRC_requirements.txt) para a máquina cliente
Abra o Terminal e execute o 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
Pré-requisitos para executar o Script do Contêiner
Um recipiente é preparado com os Pacotes Python acima pré-instalados.
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
Etapas para executar os scripts
Observe que há um total de dois scripts python (ACI_CRC_Poller.py e ACI_CRC_Parser.py). Esses scripts estão disponíveis para download no Cisco DevNet Code Exchange usando o URL abaixo.
https://developer.cisco.com/codeexchange/github/repo/CiscoDevNet/ACI-CRC-FCS-Checker
Faça o download dos dois no computador, de onde deseja executar os scripts.
Neste documento, script-1 refere-se a ACI_CRC_Poller.py e script-2 refere-se a ACI_CRC_Parser.py.
1. ACI_CRC_Poller.py coletará dados de erros do CRC e do FCS em arquivos a cada cinco minutos, com um máximo de duração de sete dias.
Execute script-1 (ACI_CRC_Poller.py) a partir do Terminal. Insira o endereço IP OOB de um dos APICs em um determinado cluster e suas credenciais.
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. O script-1 solicita a localização/caminho na máquina/computador local, onde armazenará os registros. Insira um caminho válido, caso contrário, o script não será executado.
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. O script solicitará o horário de término da execução.
Insira a hora no formato aaaa-mm-dd hh:mm (por fuso horário local da malha), com no mínimo 5 minutos e no máximo 7 dias.
Nesse momento, o script-1 começa a coletar erros de FCS/CRC da estrutura a cada cinco minutos (até a hora de término especificada anteriormente pelo usuário) e salva os dados em arquivos no caminho especificado na 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. Após a execução bem-sucedida do primeiro script, ele armazenará os arquivos de dados brutos no local especificado pelo usuário na etapa 2.
Verifique o mesmo como mostrado no exemplo abaixo.
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. Agora é o momento de executar o segundo script (ACI_CRC_Parser.py) .
Script-2 usará os arquivos criados por script-1 e trabalhará mais.
Insira o endereço IP OOB para um dos APICs em um determinado cluster e suas credenciais.
Além disso, insira o mesmo local de arquivo que você inseriu na etapa 2 ao executar o primeiro 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 imprimirá os dados em um formato tabular, conforme mostrado no exemplo abaixo.
Basicamente, ele listará as interfaces de nó com erros CRC e FCS diferentes de zero, juntamente com a diferença em seus contadores CRC/FCS, durante o intervalo de tempo especificado pelo usuário. Usando o LLDP, o script também determinará o dispositivo vizinho conectado a determinadas interfaces e, mais importante, indicará qual nó/interface é a origem de erros do ponto de vista da estrutura e quais interfaces de nó estão apenas vendo CRCs devido ao Stomp.
Do ponto de vista da solução de problemas do FCS, aquele destacado em "Vermelho" e marcado como "Local" é onde a solução de problemas adicional deve ser enfocada.
Provavelmente são as interfaces, de onde os pacotes corrompidos/incorretos estão entrando na estrutura e fazendo com que os CRCs sejam inundados na estrutura.
+--------+---------+--------------------+-----------+-----------+---------------+---------------+---------------+---------------+-------------------------------------------------------------------------------------+--------------+
| 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. Além disso, o script fornecerá as seguintes opções aos usuários para classificar e exibir dados granulares, que foram coletados pelos scripts 1 e 2.
O usuário pode escolher uma opção entre o número 1 e 3 como entrada. Veja o exemplo abaixo.
1.Sort the data further
2.View the granular data of an interface
3.Exit
Input the number:
No exemplo abaixo, vamos para a opção 2, que nos ajuda a visualizar dados granulares para qualquer interface específica.
O script solicitará que o usuário insira o respectivo número POD , ID do nó e ID da interface na tabela impressa acima (etapa 6).
Neste exemplo, estamos usando 1-302-eth1/44, onde o ID do POD é 1, o ID do nó é 302 e o ID da interface eth1/44. Essa é a interface
onde o FCS local foi relatado pelo script, como mostrado na etapa 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)):
Em nosso exemplo, coletamos os dados apenas por alguns minutos de um dia, portanto, vemos apenas uma opção para o dia 27 de setembro.
Portanto, nossa entrada 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$