Script de salvas de logs en servidor proxy

Programacion en Bash

Moderadores: frank, dxfiles

Responder
Avatar de Usuario
KZKG^Gaara
Mensajes: 463
Registrado: Sab, 07 Ago 2010, 14:09
Ubicación: /dev/kzkggaara
Contactar:

Script de salvas de logs en servidor proxy

Mensaje por KZKG^Gaara » Lun, 27 Dic 2010, 15:52

Hola,
Dejo este script... su función es simple:
Salvar los logs de navegación y los de autentificación (acceso ssh por ejemplo) de un servidor de mi trabajo. Dejo detalles del mismo, más abajo está el script.

- Un script mediante el cual, salvase los logs de navegación y otros, los comprimiera, los almacenara en una carpeta del HDD y además, lo mandara por SCP hacia otro servidor.
- Este script debía generar logs, mandarlos por email, avisar a los administradores cuando el backup se efectuara y, si había dado error o no (siempre incluir el log).
- Además, como primero copia los logs hacia una carpeta (que luego comprimirá en un .tar.gz), y una vez pasado el paso de copiarlos los vá a borrar, como es así... si se daba el caso que por X problema no pudo copiar los logs, los borrará en el próximo paso. Esto no era aceptable, se debía hacer un ciclo para que compruebe si se efectuó bien la copia, entonces siga, de lo contrario (o sea, si da error) nos mande un email a los admins con el log y no continúe con los próximos pasos.
- También, en el paso de comprimir, se debía hacer un ciclo para comprobar que el .tar.gz se creó sin problemas.
- Y más cosas.

Para los conocedores de esto... el script no está lo más optimizado posible, le faltan varias cosas que aún no se le han agregado, etc etc... estoy trabajando en eso. Cualquier crítica constructiva, sugerencia, idea, duda o pregunta, es bien recibida.
Ahora sí el script:

Código: Seleccionar todo

#!/bin/sh
#
# -*- ENCODING: UTF-8 -*-
#
# Script para backup de Logs
#
# Este script es software libre. Puede redistribuirlo y/o
# modificarlo bajo los términos de la Licencia Pública General
# de GNU según es publicada por la Free Software Foundation,
# bien de la versión 2 de dicha Licencia o bien (según su
# elección) de cualquier versión posterior.
#
# Cualquier cambio hecho en el script, debe dejarse bien claro,
# de forma tal que no pueda perjudicar de ninguna forma la
# imagen o reputación del autor original.
# Si se toma parte de este script para crear otro, se debe
# reconocer en todos los casos o dejar referencia al autor de
# este script
#
#
# Copyleft 2010, Instituto Politécnico de Informática Raúl Cepero Bonilla. Ciudad Habana, Cuba.
# Autores:	KZKG^Gaara <kzkggaara.mcanime@gmail.com> <http://kzkggaara.wordpress.com>
#			Ernesto Luis Acosta <elavdeveloper@gmail.com> <http://elavdeveloper.wordpress.com>
#

NAME="Virtue_Backup-Script_Logs"										# Nombre del script.
VERSION=0.1																# Versión del script.
#Descripción: 	Script mediante el cual se salvan los logs					#
#				del servidor Virtue (192.168.200.3).						#
#				Este script depende de "tar" y "postfix", así como			#
#				una adecuada configuración para SSH/SCP sin				#
#				autentificación.											#
: ${DATE:=$(date +'%Y-%m-%d')}											# Fecha.
: ${TIME:=$(date +'%r')}													# Hora.
: ${SERVER_DIR:=/home/backups/Servers/Virtue}							# Directorio donde se almacenan salvas del servidor.
: ${WORK_DIR:=/home/backups/Servers/Virtue/$DATE.logs/}				# Directorio de Trabajo.
: ${WORK_CREATE:=/home/backups/Servers/Virtue/$DATE.logs/1}		# Variable para crear el directorio de trabajo si no existe.
: ${LOG_FILE:=/home/backups/Servers/Virtue/record.log}					# Archivo de Log.
: ${LOG_FILE2:=/home/backups/Servers/Virtue/record2.log}				# Archivo de Log2.
: ${CONTROL1:=0}															# Variable para Ciclo Condicional No.1 (CP).
: ${CONTROL2:=0}															# Variable para Ciclo Condicional No.2 (TAR.GZ).
: ${ADMIN1:=kzkggaara@ipichcb.rimed.cu}									# Email de Administrador No.1
: ${ADMIN2:=elav@ipichcb.rimed.cu}										# Email de Administrador No.2

# Limpiando los logs de salva anterior.
rm $LOG_FILE
rm $LOG_FILE2
touch $LOG_FILE
touch $LOG_FILE2

# Creando directorio donde se trabajará, si es que no existe.
if [ ! -d "`dirname $WORK_CREATE`" ] ; then mkdir -p "`dirname $WORK_CREATE`"; fi

# Cambiando a directorio donde trabajaremos.
cd $WORK_DIR

# Deteniendo SQUID.
/etc/init.d/squid stop

#####_Empezando ciclo para salva y posterior eliminación de logs_#####
while [ $CONTROL1=0 ] ; do
# Copiando logs de SQUID hacia directorio de trabajo actual.
cp -v /var/log/squid/access.* $WORK_DIR >> $LOG_FILE 2>&1
	if [ $? -ne 0 ]; then
		CONTADOR=0
		echo ERROR !!!. Cerrando Script y notificando a los administradores.
		# Imprimiendo en BODY.TXT fecha y hora actual, así como el log de error.
		echo "La salva de logs del servidor Virtue (192.168.200.3) ha dado ERROR, se adjunta log. Esto ha ocurrido hoy, "$DATE "a las" $TIME > $SERVER_DIR/body.txt
		cat $LOG_FILE >> $SERVER_DIR/body.txt
		# Enviando emails a administradores con notificación de error y log del mismo.
		mail -s "[Virtue] | [ERROR] Status de salva de logs." $ADMIN1 <  $SERVER_DIR/body.txt
		mail -s "[Virtue] | [ERROR] Status de salva de logs." $ADMIN2 <  $SERVER_DIR/body.txt
	exit
	else
      		CONTADOR=1

		# Copiando logs de autentificación hacia directorio de trabajo actual.
		cp -v /var/log/auth.* $WORK_DIR >> $LOG_FILE 2>&1

		# Borrando logs ya copiados.
		rm -v /var/log/squid/access.* >> $LOG_FILE 2>&1
		rm -v /var/log/auth.* >> $LOG_FILE 2>&1

		# Iniciando SQUID.
		/etc/init.d/squid start

		# Creando manualmente log de autentificación.
		touch /var/log/auth.log
		chgrp adm /var/log/auth.log
		chmod 640 /var/log/auth.log

		# Copiando archivo RECORD.LOG hacia directorio de trabajo.
		cp $LOG_FILE $WORK_DIR
	
		# Saliendo un nivel más arriba (/home/backups/Servers/Virtue/).
		cd ..

# ------------------------------------------------------------------------
#####_Empezando ciclo para compresión y posterior eliminación del directorio de trabajo (WORK_DIR)_#####
		while [ $CONTROL2=0 ] ; do
		# Comprimiendo directorio de trabajo actual.
		tar czvf "$DATE.logs.tar.gz" "$DATE.logs" >> $LOG_FILE2 2>&1
			if [ $? -ne 0 ]; then
			CONTADOR=0
			echo ERROR !!!. Cerrando Script y notificando a los administradores.
			# Imprimiendo en BODY.TXT fecha y hora actual, así como el log de error.
			echo "La salva de logs del servidor Virtue (192.168.200.3) ha dado ERROR. Especificamente a la hora de COMPRIMIR el directorio, se adjunta log. Esto ha ocurrido hoy, "$DATE "a las" $TIME > $SERVER_DIR/body.txt
			cat $LOG_FILE >> $SERVER_DIR/body.txt
			cat $LOG_FILE2 >> $SERVER_DIR/body.txt
			# Enviando emails a administradores con notificación de error y log del mismo.
			mail -s "[Virtue] | [ERROR] Status de salva de logs." $ADMIN1 <  $SERVER_DIR/body.txt
			mail -s "[Virtue] | [ERROR] Status de salva de logs." $ADMIN2 <  $SERVER_DIR/body.txt
		exit
		else
      			CONTADOR=1
		
			# Eliminando directorio una vez comprimido.
			rm -R "$WORK_DIR"

			# Enviando por SCP archivo .TAR.GZ al servidor principal de salvas Freedom (192.168.200.4).
			scp -v "/home/backups/Servers/Virtue/$DATE.logs.tar.gz" root@192.168.200.4:/home/backups/Servers/Virtue/ >> $LOG_FILE 2>&1

			# Enviando emails a administradores informando que la salva se efectuó correctamente.
			echo "La salva de logs del servidor Virtue (192.168.200.3) se ha efectuado satisfactoriamente. Hoy, "$DATE "a las" $TIME > $SERVER_DIR/body.txt
			cat $LOG_FILE >> $SERVER_DIR/body.txt
			mail -s "[Virtue] | [OK] Status de salva de logs." $ADMIN1 <  $SERVER_DIR/body.txt
			mail -s "[Virtue] | [OK] Status de salva de logs." $ADMIN2 <  $SERVER_DIR/body.txt

			# Eliminando y creando el archivo body.txt
			rm $SERVER_DIR/body.txt
			touch $SERVER_DIR/body.txt

		###_Finalizando y cerrando ciclo referente a TAR.GZ_###
		exit
	    	fi
		done
# ------------------------------------------------------------------------

###_Finalizando y cerrando ciclo referente a CP_###
exit
fi
done

# Fin del script.
exit 0
~~» KZKG^Gaara «~~
Usuario #518082 de GNU/Linux
Windows ha detectado que no tiene teclado... presione [F9] para continuar.

Metal
Mensajes: 32
Registrado: Sab, 07 Ago 2010, 14:09
Ubicación: Python
Contactar:

Re: Script de salvas de logs en servidor proxy

Mensaje por Metal » Lun, 27 Dic 2010, 16:52

Me parece bueno el aporte, sobre todo para los q están aprendiendo bash. Por esa razón lo voy a tratar de hacer en python (q me encanta) para ayudar a los novatos y aprender de las criticas.
Axioma de Espinosa
Si funciona, no lo toque.

Avatar de Usuario
KZKG^Gaara
Mensajes: 463
Registrado: Sab, 07 Ago 2010, 14:09
Ubicación: /dev/kzkggaara
Contactar:

Re: Script de salvas de logs en servidor proxy

Mensaje por KZKG^Gaara » Lun, 27 Dic 2010, 19:13

Metal escribió:Me parece bueno el aporte, sobre todo para los q están aprendiendo bash. Por esa razón lo voy a tratar de hacer en python (q me encanta) para ayudar a los novatos y aprender de las criticas.
Gracias socio, a ver si logro entender lo que haces, de pyhton estoy nulo en conocimientos :lol:

Este script no es que sea la gran cosa, declaración de variables y uso de ellas mediante comandos básicos :roll:
Pero funciona, que es para lo que se hizo.

Saludos
~~» KZKG^Gaara «~~
Usuario #518082 de GNU/Linux
Windows ha detectado que no tiene teclado... presione [F9] para continuar.

Responder