top of page

listado_servidores.txt

192.xxx.xxx.001

192.xxx.xxx.002

192.xxx.xxx.003

192.xxx.xxx.004

192.xxx.xxx.005

...

Recoge ficheros de varios equipos por FTP, comprueba errores y envía correo.


# ========================================================================================
# Nombre:                                               Enviologservidores.sh
# ---------------------------------------------------------------------------------------------------------------

# Este script recoge ficheros de varios servidores, comprueba si tienen errores y envía un correo de aviso.

# ---------------------------------------------------------------------------------------------------------------

# El script necesita que exista previamente un fichero con las direcciones IP de los servidores (listado_servidores.txt)

# El script extrae las direcciones IP del fichero de servidores (listado_servidores.txt)
# Se conecta una por una a cada máquina (por su IP)
# De cada servidor se descarga el log /usr/log/fichero01.log
# y lo renombra como la direccion IP del equipo
# Se busca un "error" en todos los ficheros de log importados
# Se envía un email con el error (si existe), o con OK si no existe.
# ========================================================================================

# ---------------------------------------------------------------------------------------------------------------
# Nos posicionamos en el directorio de los logs (para que al extraer la informacion aparezca limpia)
# se define el path del directorio en una variable
# ---------------------------------------------------------------------------------------------------------------

cd /home/directorio01/logservidores
directorio_fichero="/home/directorio01/logservidores"


# ---------------------------------------------------------------------------------------------------------------
# se extraen las IPs de cada servidor del fichero de servidores, y se guardan en el ARRAY "direccionesIP"
# extraemos 4 bloques que contienen de 1 a 3 caracteres cada uno.
# -oe = extrae solo el texto que coincida con lo que buscamos
# [0-9] = debe haber números del 0 al 9
# {\1,3\} = contiene de 1 a 3 caracteres
# . = separa cada uno de los 4 bloques
# -------------------------------------------
# Un array se define con datos separados por un espacio en blanco dentro de un paréntesis: 

# array=(dato1 dato2 dato3)
# pero en un script, además de los paréntesis, hay que usar comillas invertidas: array=(`datos o variable`)
# ---------------------------------------------------------------------------------------------------------------

direccionesIP=(`grep -oe '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}' listado_servidores.txt`)

# ---------------------------------------------------------------------------------------------------------------
# Si queremos recoger ficheros de un solo servidor, podemos usar su IP, sin el array.
# Se recoge el log del servidor local 192.168.xxx.xxx y se deja en mismo directorio que el resto de logs
# ---------------------------------------------------------------------------------------------------------------

cp /var/log/fichero01.log /home/directorio01/logservidores/errores/192.168.xxx.xxx.log

# ---------------------------------------------------------------------------------------------------------------
# se leen las IPs del array una por una  = for i in ${array[@]}  o también    for i in ${array[*]}
# se conecta al servidor con el usuario "directorio01" y la IP leida = directorio01@$i
# se trae el fichero de log cambiando el nombre a la IP del servidor que contenía el log
# ---------------------------------------------------------------------------------------------------------------

for i in ${direccionesIP[@]}; do
        scp -i ~/.ssh/id_rsa directorio01@$i:/var/log/fichero01.log /home/directorio01/logservidores/errores/$i.log
done



# ---------------------------------------------------------------------------------------------------------------
# se extraen las líneas con error y se asignan a un array de variables
# ---------------------------------------------------------------------------------------------------------------
# Se extraen las líneas que contengan la palabra "error" y las dos líneas siguientes "-a2" de todos los logs
# "grep -a2 error /home/directorio01/borrame/fichero.log" extrae, además, las dos líneas posteriores a la encontrada
# -i = ignorar mayusculas/minusculas
# -w = buscar la palabra exacta
# -o = selecciona solo el texto buscado
# -n = numero de linea en el que está la palabra
# -v = buscar las líneas que NO contienen la palabra
# -l = muestra solo el nombre del fichero en el que se encuentra la palabra
# -H = muestra el nombre del fichero  -h = no muestra el nombre del fichero
# --color = muestra en COLOR la palabra que buscamos
# 'palabra1|palabra2' = buscar dos palabras
# ---------------------------------------------------------------------------------------------------------------

cd /home/directorio01/logservidores/errores
grep --color -i -w -n -H 'error' *.log > errores.txt



# ---------------------------------------------------------------------------------------------------------------
# Si hay errores, se envía un correo con los errores extraidos de los log
# ---------------------------------------------------------------------------------------------------------------
# -i ignora mayusculas/minusculas
# -o selecciona la palabra solo si la coincidencia es exacta (selecciona "error" pero no selecciona "errores")
# -w selecciona solo la palabra exacta
# Se busca la palabra "error" y se guarda en la variable "erroresLOG"
# Si la variable $erroresLOG contiene (**) la palabra "error" o ( || ) "ERROR" entonces...
# ---------------------------------------------------------------------------------------------------------------

erroresLOG=(`grep -i -w -o 'error' errores.txt`)
if [[ $erroresLOG == *error* ]] || [[ $erroresLOG == *ERROR* ]]
then


# ---------------------------------------------------------------------------------------------------------------
# Mediante comandos telnet al puerto 25 del servidor SMTP (no hace falta usuario ni contraseña)
# se envia un correo con los errores extraidos de los log
# ---------------------------------------------------------------------------------------------------------------~
# El correo de envío puede ser inventado. Vale cualquiera, por ejemplo: correodeenvio@dominio.com
# El correo de destino debe existir de verdad y estar correctamente configurado.
# el comando telnet va fuera del paréntesis separado por una barra (pipe), mientras que todos sus parámetros van dentro
# ---------------------------------------------------------------------------------------------------------------


count=1
    while [ $count -le 1 ]
    do
        ( echo open 192.168.xxx.xxx               
#dirección IP del servidor SMTP
        sleep 8
        echo helo smtp.dominio.dominio            
#nombre del servidor SMTP
        echo mail from: correodeenvio@dominio.com
        sleep 2
        echo rcpt to: correodedestino@dominio.com
        sleep 2
        echo data                                             
#aquí comienza el correo
        sleep 2
        echo subject:  Existen ERRORES en la monitorizacion de servidores.
        echo
        echo | cat /home/directorio01/logservidores/errores/errores.txt
        sleep 5
        echo .
        sleep 5
        echo quit ) | telnet
        count=$[$count+1]
    done

#elif [ $CLAVE != $erroresLOG ]; then
# ---------------------------------------------------------------------------------------------------------------
# Si no existen errores, se envía un correo indicando que todo está OK
# ---------------------------------------------------------------------------------------------------------------

else
count=1
    while [ $count -le 1 ]
    do
        ( echo open 192.168.xxx.xxx               
#dirección IP del servidor SMTP
        sleep 8
        echo helo smtp.dominio.dominio            
#nombre del servidor SMTP
        echo mail from: correodeenvio@dominio.com
        sleep 2
        echo rcpt to: correodedestino@dominio.com
        sleep 2
        echo data
        sleep 2
        echo subject:  OK. No existen errores en la monitorizacion de servidores
        echo
        echo "Todo OK. Ningun servidor contiene errores."
        sleep 5
        echo .
        sleep 5
        echo quit ) | telnet
        count=$[$count+1]
    done
fi


# ---------------------------------------------------------------------------------------------------------------
# se borran los ficheros log para que no ocupen espacio
# ---------------------------------------------------------------------------------------------------------------
# rm /home/directorio01/logservidores/errores/*.*


exit 0

Extraer caracteres
ConectaraServidor
EnvioCorreo
letras.png

©  Informática para romanos de trinchera. Siglo I ae.

bottom of page