Pues aquí otro caso de script para hacer cosas que podríamos hacer perfectamente con SNMP u otras herramientas avanzadas, la cuestión aquí es usar el mínimo de recursos posibles, así que vamos a tirar de cats y comandos muy básicos, ya que este script sirve para ejecutarse en casos de mucho estrés y para identificar un error que pueda salir detectar a que se debe.
Además nunca deja de ser interesante como acceder a información super básica de nuestro sistema :)
En este caso estamos buscando un error chungo el cual no tenemos explicación para qué pasa, a diferencia de las peticiones http o mysql, oracle mantiene una conexión abierta en todo momento con el cliente hasta que éste la cierra, para establecer la conexión el cliente llama al servidor y luego el servidor le dice al cliente que ok, que ya está creado el túnel y ya puede empezar a preguntar, por algún motivo cuando la maquina le pasa algo el servidor no es capaz de contactar con el cliente y se pierde la conexión, es entonces cuando aparece este molesto error, el ORA-12170 (¡quiero una camiseta con este error! es de lo mas freak que estoy viendo estos días!!!).
#!/bin/bash
. /ORACLE/home/oracle/oraenv.sh
LOGD="/ORACLE/home/oracle/bin/check_hw"
LOGF1="$LOGD/12170.txt"
LOGF2="$LOGD/12170_ext.txt"
tail -f $listlog | grep --line-buffered 12170 | while read line; do
echo "**********************************"
echo "**********************************" >> $LOGF1
echo "[Data] `date`" >> $LOGF1
echo "********* LOG **********" >> $LOGF1
echo "22 ultimas lineas del fichero $alert" >> $LOGF1
echo "" >> $LOGF1
tail -22 $alert >> $LOGF1
echo " " >> $LOGF1
echo "********* RAM **********" >> $LOGF1
free -m >> $LOGF1
echo " " >> $LOGF1
echo "********* CPU **********" >> $LOGF1
cat /proc/stat | grep cpu | while read -r line2; do
#cuenta el numero de procesadores
c="$( echo "$line2" | awk '{print $1}' )"
n="$( echo "$line2" | awk '{print $2}' )"
m="$( echo "$line2" | awk '{print $3}' )"
o="$( echo "$line2" | awk '{print $4}' )"
p="$( echo "$line2" | awk '{print $5}' )"
NPROC=`echo $n |wc -w`
echo "CPU:" $c >> $LOGF1
#echo "n: " $n >> $LOGF1
#echo "m: " $m >> $LOGF1
#echo "o: " $o >> $LOGF1
#echo "p: " $p >> $LOGF1
((x=$n+$m+$o))
((y=$n+$m+$o+$p))
z=`echo 100*$x/$y |bc -l`
#echo "carga CPU: " $x >> $LOGF1
#echo "uso total CPU:" $y >> $LOGF1
echo "% uso CPU: " $z >> $LOGF1
echo " *** " >> $LOGF1
done
echo "" >> $LOGF1
echo "***** VMSTAT *****" >> $LOGF1
vmstat -s -S M >> $LOGF1
echo "" >> $LOGF1
done
El cálculo de la CPU viene dado por el cálculo del contenido del fichero /proc/stat.
El LOGF2 que no uso, es por si me pica más aún este error ;)
En este blog encontraréis mas detalles.
Pingback: Blog de Hardware » Blog Archive » Controlar la salida de un fichero & Mesurar el % de uso de cpu a …