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 …