Problemas de rendimiento en Switches

La verdad es que estos tíos (los de Cisco) no es que se preocupen mucho por facilitar las cosas a los administradores, los años pasan y las cosas se siguen haciendo como antaño … a mano. En este caso teníamos problemas de rendimiento en algunos equipos y estábamos intentando averiguar que pasaba.

Los síntomas eran … desconexiones de los usuarios de forma aleatoria (o eso decían ellos) así que …

Miramos a ver si los enlaces estaban sobrecargados show interface Gix/x mirando reliability, txload y rxload, pero estos datos son en tiempo real … y necesitábamos los agregados. Si, ya se que todos estáis pensando … joder … monitoriza los enlaces, pero es que la herramienta de monitorización que tenemos ahora no se puede usar para esto (WTF!).

Así que necesitaba algo mas de información. Parecía que la CPU de vez en cuando se ponia al 100% asi que nos pusimos a investigar por si esta era la causa.

http://www.cisco.com/c/en/us/support/docs/routers/10000-series-routers/15095-highcpu.html

https://supportforums.cisco.com/discussion/9915001/cisco-2600-router-high-cpu-utilization

http://www.cisco.com/c/en/us/support/docs/routers/7500-series-routers/41120-highcpu-interrupts.html

https://supportforums.cisco.com/discussion/10596416/hulc-led-process

https://supportforums.cisco.com/es/discussion/11723966

http://www.cisco.com/c/en/us/support/docs/switches/catalyst-3750-series-switches/68461-high-cpu-utilization-cat3750.html

Y otra vez lo mismo … había que pillarlo justo en el momento … así que necesitaba algo que ejecutara los comandos cada cierto tiempo … y como no puedo cambiar nada en el equipo … había que hacerlo desde fuera.

Y la solución estaba aquí …

http://nuone.blogspot.com.es/2013/09/a-perl-script-to-collect-information.html

Un bonito script en perl que entra a los equipos, ejecuta lo que necesites y guarda el resultado en un fichero de texto sujeto a ser GREPable.

Bueno, antes de ejecutarlo tuve que instalar algunos módulos que me faltaban, nada que un apt-get install libnet-ssh2-perl no solucione.

Unas mínimas modificaciones en el script para dejarlo mas o menos así (copy&paste no vaya a ser que lo necesite de nuevo y la web no exista).

#!/usr/bin/perl
# usage: perl cisco.pl (target_host) (ssl_password) (enable_password)
#
use Net::SSH2;
use warnings;
use strict;
my $host = $ARGV[0]; ### target host as input string1
my $user = “username”;
my $password = $ARGV[1]; ### ssh password as input string2
#my $secret = $ARGV[2]; ### enable password as input string3
my $ssh = Net::SSH2->new();
if(!$ssh->connect($host)){
print(“Connection Failed\n”);
exit(1);
}
if(!$ssh->auth_password($user,$password)){
print(“Authentication Failed”);
exit(1);
}
my $channel = $ssh->channel();
$channel->blocking(0);
$channel->shell();
#print $channel “enable\n”;
#print $channel “$secret\n”; ### enable password from input string3
#print $channel “term len 0\n”;
print $channel “show processes cpu sort \n”;
open (my $OUTPUTFILE, “>>/home/scripts/$host.log”) or die “Can’t open $host.log: $!”; ### target host as filename
while (<$channel>) {
chomp;
print $OUTPUTFILE “$_”;
}

close $OUTPUTFILE or die “$OUTPUTFILE: $!”;

Donde $user es el nombre del usuario para entrar en el switch (la passwd va en claro si …) en mi caso solo quería ejecutar show processes cpu sort.

Lo pones en el cron de alguna maquina 10,20,30,40,50,0 * * * * /home/scripts/data.pl xxx.xxx.xxx.xxx password y listo … empieza a generar un fichero con la salida del comando.

Curiosamente, después de 1 semana ejecutándolo … ni una sola desconexión, ni una sola queja y por supuesto … la CPU ni una sola vez al 100%. Así que, vuelve la magia a Howards. Pero siempre hay cosas positivas, el script es la caña … y ya tengo todos los módulos instalados para la próxima vez.

Be the first to leave a comment. Don’t be shy.

Join the Discussion

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>