Controlar la salida de un fichero & Mesurar el % de uso de cpu a mano

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.

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.