Mostrando entradas con la etiqueta scripts. Mostrar todas las entradas
Mostrando entradas con la etiqueta scripts. Mostrar todas las entradas

viernes, 9 de diciembre de 2011

Monitorizar XAPI XenServer Nagios

Hola! hoy traigo un nuevo script para comprobar que la XAPI de vuestros XenServer están funcionando correctamente. Totalmente probado :) Lo puedes descargar desde github aquí.

A grandes rasgos el script chequea que la XAPI esta operativa tanto a nivel de procesos como a nivel de consultas
check_xapi.sh
#!/bin/bash
#Check que comprueba el estado de la XAPI

#contamos los procesos que hay de xapi
procs=`ps -elf | grep xapi | grep -v grep | wc -l`

#Verificamos que haya algun proc xapi y si no lo hay, critical
if [ -z "$procs" ] ; then
   echo "Critical: No hay procesos de Xapi"
   exit=2

else #Hay procesos, pues lanzamos una peticion para ver si respnde ok

 #Vemos si es capaz de conectar con la Xapi y extramos el numero de hosts del pool
   test_xapi=`sudo xe host-list | grep name-label | wc -l`
 #test_xapi="1" #Fuerza a warning
 if [ $test_xapi -gt 0 ]; then
    ok_test=$(sudo xe host-list name-label=`hostname` params=name-label --minimal)
    echo "OK: XAPI respondiendo en $ok_test "
    exit=0
else
    new_test=$(sudo xe host-list name-label=`hostname` params=name-label --minimal)
    echo "Warning: Hay procs de XAPI pero algo falla $new_test"
    exit=1
 fi
fi

#Salida con el codigo de error para Nagios
exit $exit

viernes, 30 de septiembre de 2011

XenServer Nagios Check

Para los fans de Nagios y Citrix XenServer, hoy he subido en mi github un script en python que interroga la XAPI para ver el estado de los hosts físicos. En el mismo script hay la web donde se expone la versión original, esta es la adaptación para mi entorno. check_XenServer.py
     
Básicamente se conecta al host que le definimos en la  primera línea y si este no es el master, se conecta al master e interroga mediante host_metrics el estado de cada servidor.

Establecemos una política de n+1 es decir, si el numero de hosts "vivos" es inferior al valor de todos los hosts -1 nos aparecerá Critical.
       
Espero que les sea de utilidad :)
Saludos

miércoles, 27 de julio de 2011

XenSever - Backup con Snapshots

Este método permite realizar backups de tus máquinas virtuales en formato nativo de Citrix XenServer.

Básicamente el proceso es hacer un snapshot de cada maquina virtual especificada en el fichero de configuración (backup2.cfg) y exportarla a un filesystem del domain0, ese puede ser NFS, SMB, Local... Una vez exportada la maquina virtual la comprime usando gzip. Cada vez que se ejecuta el script comprueba que no haya maquinas más antiguas de siete días en el FS de destino.

Se compone de 3 ficheros:

-backup2.cfg #Fichero de configuración donde se define el disco/directorio de destino del backup y las maquinas virtuales que queremos hacer backup.

-backup2.sh #La shell que lanza el proceso, se puede poner en un cron.

-backup2.log #El log de la shell

Puedes descargarlos desde: https://github.com/fsmsystems/stuff/tree/master/XEN-Backup o mediante git.

martes, 7 de septiembre de 2010

expect - automatizador de tareas

 ¿Como automatizar una sesión de telnet? Con este ejemplo en bash
#!/bin/bash
expect << EOF
set timeout 1
spawn telnet 192.168.1.1
expect "login: "
send "admin\r"
expect "Password: "
send "unpwdchungo\r"
expect "*#"
send "get config | include $1 \r"
expect "*#"
send "exit"
exit
EOF
echo

En este ejemplo nos conectamos a un fw juniper y vemos la config que le pasemos como parametro al script.

ferran@myhost $ ./fw.sh mailserver
fwcapto-> get config | include mailserver
set address "DMZ" "mailserver" 192.168.2.1 255.255.255.0 


jueves, 5 de agosto de 2010

Wrapper sobre ncsvc cliente vpn juniper

Nueva forma de conectarme sin usar el cliente de juniper network connect. Un sencillo wrapper que ahorra usar java. Solo es necesario el binario de ncsvc y ejecutar el script como root.


#!/bin/bash
# Wrapper sobre ncsvc.
set +o posix

ok() { echo -ne "\e[32m#\n#\t$1\n#\e[m\n"; }
nk() { echo -ne "\e[31m#\n#\t$1\n#\e[m\n"; exit 1; }

USER="usuario"
HOST="hostvpn.dominio.com"
REALM="sistemas"
[ $HOST ] && [ $REALM ] || nk "Falta especificar HOST y/o REALM en el script."

PATH=$PATH:$(dirname $0)
ok "Verificando binarios wvdial pppd y grep:"
which ncsvc pgrep openssl kill || nk "Faltan binarios!"
[ $(uname -m) = "x86_64" ] && ok ": Se necesita comp. 32 bits. Arch: pacman -S lib32-glibc lib32-gcc-libs lib32-zlib"

pgrep ncsvc > /dev/null && {
ok "Procesos ncscv corriendo, los mato..."
ncsvc -K || for i in `pgrep ncsvc`; do kill -9 $i; done
ok "OK!"
} || {
[ $USER ] || { ok "Usuario: "; read -r USER; }
[ $USER ] || nk "El usuario no puede ser nulo!"
ok "Conectando..."
ncsvc -u $USER -h $HOST -r $REALM -f <(openssl x509 -in <(openssl s_client -connect secure.dominio.com:443 /dev/null | sed -n '1h;1!H;${;g;s/.*\(-----BE.*TE-----\).*/\1/p;}') -outform der)    reset } 
Gracias Oscar por esta solucion :)

jueves, 29 de abril de 2010

Open Chorizo - Un automatizador de tareas para servidores

Quiza el programita más chorra...
Cuando nos encontram
os con tareas repetitivas que hay que hacer en por ejemplo 200 servidores como añadir un nuevo disco de red, hacerlo manualmente es duro duro. Para ello mi siguiente script.

Para que sea automatico del todo hay que tener la clave pública ssh en los servidores de destino.



Mediante una lista de servidores como esta
:

servidor1
servidor2
servidor3
...
servidorN

y una lista de tareas como
ls -l
echo Hola
...
Va ejecutar cada comando en cada servidor, por ssh, mostrando por pantalla los resultados de cada comando.

Asi de simple.











/usr/bin/python
#
# 28/04/2010 by Ferran Serafini
import os
import sys
import getopt


list_servers=[]
list_tasks=[]

#-------------------------------------------------------------------------------
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
#-------------------------------------------------------------------------------
def disable(self):
self.HEADER = ''
self.OKBLUE = ''
self.OKGREEN = ''
self.WARNING = ''
self.FAIL = ''
self.ENDC = ''
#-------------------------------------------------------------------------------
def req_servers():
print "Lo que voy a ejecutar"
print
print bcolors.OKGREEN + "--------------------------" + bcolors.ENDC
print bcolors.OKGREEN + "Lista servidores" + bcolors.ENDC
print bcolors.OKGREEN + "--------------------------" + bcolors.ENDC
#-------------------------------------------------------------------------------
def req_commands():
print bcolors.OKGREEN + "--------------------------" + bcolors.ENDC
print
print bcolors.OKBLUE + "--------------------------" + bcolors.ENDC
print bcolors.OKBLUE + "Lista Comandos" + bcolors.ENDC
print bcolors.OKBLUE + "--------------------------" + bcolors.ENDC
#-------------------------------------------------------------------------------
def hello():
print "Open Chorizo. 0.1 stable"
print "---------------------------------------------------"
print "Executa una llista de tasques en els equips remots que hi hagin en una llista"
print "[EXEMPLE] chorizo -s llista_servers.txt -t llista_tasques.txt"
#-------------------------------------------------------------------------------
def usage():
print "Usage: " + sys.argv[0] + " [ -h | --help ] [ -s | --servers ] [ -t | --tasques ] "
#-------------------------------------------------------------------------------
def check_file(f):
return os.path.isfile(f)
#-------------------------------------------------------------------------------
def file_read(f):
llista=[]
if check_file(f) == True:
f_read=open(f,"r")
for line in f_read:
line_r=str.split(line,"\n")
llista.append(line_r)
f_read.close
return llista
else:
print "Chorizo no trova el fitxer!: "+ f
#-------------------------------------------------------------------------------
def execute_chorix():
for server in list_servers:
counter=1
print bcolors.OKGREEN + "--------------------------" + bcolors.ENDC
print ">>: Executant en: "+ bcolors.OKGREEN + server[0] + bcolors.ENDC
print bcolors.OKGREEN + "--------------------------" + bcolors.ENDC
for command in list_tasks:
print "(" + str(counter) + "/" + str(len(list_tasks)) + ") " + bcolors.OKGREEN + "#" + server[0] + bcolors.OKBLUE + " >>>> " + command[0] + bcolors.ENDC
c="ssh root@" + server[0] + " -C '" + command[0] + "'"
com=os.popen(c).read()
counter=counter+1
print com
#print bcolors.OKBLUE + "--------------------------" + bcolors.ENDC
return com
#-------------------------------------------------------------------------------
try:
optlist, args = getopt.getopt(sys.argv[1:], 't:s:h' , ["tasques","servers","help"])
except getopt.GetoptError, err:
print str(err) # will print something like "option -a not recognized"
usage()
sys.exit(2)

for k,v in optlist:
if k in ('-h','--help'):
hello()
sys.exit(0)
elif k in ('-s','--servers'):
list_servers=file_read(str(v)) #print list_servers
elif k in ('-t','--tasques'):
list_tasks=file_read(str(v)) #print list_tasks
req_servers()
for server in list_servers:
print ">> | " + server[0]
req_commands()
for command in list_tasks:
print "<< | " + command[0] print bcolors.OKBLUE + "--------------------------" + bcolors.ENDC print print bcolors.WARNING + "Tot Ok? [s/n]" + bcolors.ENDC go=raw_input("> ")
if go=="s":
output = execute_chorix()
else:
print "no s'ha executat res"


miércoles, 17 de marzo de 2010

Monitorizar Xen con Nagios - Memoria Virtual Machines





Otro script del mismo estilo para alertar en caso que la memoria de una maquina virtual llegue a warning/critical.

#!/bin/bash

#" parametres entrada nivell de warning i de critical
if [ $# -ne 2 ] ; then
echo "Error es requereixen 2 parametres, el percentatge de warning i de critical"
exit 2
fi

PECRIT=$2
PEWARN=$1
RETORN=0
TEXTRETORN=""
TEMPFILE=`mktemp`

llistat=`sudo /usr/sbin/xentop -bi1 | awk '{ print $1}' | grep -wv "NAME" | grep -v "Domain-0" `
nombre_dominis=`sudo /usr/sbin/xm list | grep -wv "Name" | wc -l`

sudo /usr/sbin/xentop -bi3 >$TEMPFILE
for ite in $llistat ; do
nivell_cpu=`grep "$ite" $TEMPFILE| awk '{ print $6 }' | tail -1| cut -d'.' -f1`

if [ $nivell_cpu -ge $PECRIT ] ; then
RETORN=2
TEXTRETORN="$TEXTRETORN Crit($ite),"
elif [ $nivell_cpu -ge $PEWARN ] ; then
if [ $RETORN -ne 2 ] ; then
RETORN=1
fi
TEXTRETORN="$TEXTRETORN Warn($ite),"
fi
done
if [ $RETORN -eq 0 ] ; then
TEXTRETORN="OK. Totes maquines ($nombre_dominis) per sota limits memoria."
fi
if [ $RETORN -eq 1 ] ; then
TEXTRETORN="WARNING. $TEXTRETORN"
fi
if [ $RETORN -eq 2 ] ; then
TEXTRETORN="ERROR. $TEXTRETORN"
fi

rm -f $TEMPFILE
echo $TEXTRETORN
exit $RETORN


martes, 16 de marzo de 2010

Monitorizar Xen con Nagios - CPUs





Un pequeño script que comprueba que las cpus de las maquinas virtuales no exceden del warning y critical.

#!/bin/bash

#" parametres entrada nivell de warning i de critical
if [ $# -ne 2 ] ; then
echo "Error es requereixen 2 parametres, el percentatge de warning i de critical"
exit 2
fi

PECRIT=$2
PEWARN=$1
RETORN=0
TEXTRETORN=""
TEMPFILE=`mktemp`

nombre_dominis=`sudo /usr/sbin/xm list | grep -wv "Name" | wc -l`
llistat=`sudo /usr/sbin/xentop -bi1 | awk '{ print $1}' | grep -wv "NAME"`

sudo /usr/sbin/xentop -bi2 >$TEMPFILE
for ite in $llistat ; do
nivell_cpu=`grep "$ite" $TEMPFILE | awk '{ print $4 }' | tail -1 | cut -d'.' -f1`

if [ $nivell_cpu -ge $PECRIT ] ; then
RETORN=2
TEXTRETORN="$TEXTRETORN Crit($ite),"
elif [ $nivell_cpu -ge $PEWARN ] ; then
if [ $RETORN -ne 2 ] ; then
RETORN=1
fi
TEXTRETORN="$TEXTRETORN Warn($ite),"
fi
done
if [ $RETORN -eq 0 ] ; then
TEXTRETORN="OK. Totes maquines ($nombre_dominis) per sota limits CPU."
fi
if [ $RETORN -eq 1 ] ; then
TEXTRETORN="WARNING. $TEXTRETORN"
fi
if [ $RETORN -eq 2 ] ; then
TEXTRETORN="ERROR. $TEXTRETORN"
fi

rm -f $TEMPFILE
echo $TEXTRETORN
exit $RETORN

La salida si todo esta Ok seria:
OK. Totes maquines (5) per sota limits CPU.

Luego hay que añadir el comando para hacer sudo en el usuario nagios para los comandos xentop y xm list

nagios ALL=(ALL) NOPASSWD:/usr/sbin/xm list
nagios ALL=(ALL) NOPASSWD:/usr/sbin/xentop

VirtualBox- Arranque de VM automatico

Con este sencillo bat podemos arrancar las maquinas virtuales cuando inicia el sistema. La forma más sencilla es ponerlo en el menu inicio y asi siempre que entremos en nuestra sesión se abriran automaticamente.
C:\Archivos de programa\Sun\VirtualBox
C:\Archivos de Programa\Oracle\VirtualBox
VBoxManage startvm "server-web"
VBoxManage startvm "server-mail"
VBoxManage startvm "server-nagios"
Este mismo comando tambien nos sirve para GNU/linux.
También hay más parametros como:
  • VBoxManage showvminfo nos mostrara toda la info sobre una vm
  • VBoxManage modifyvm “Windows XP” -memory “512MB” Modifica las propiedades de la vm
  • VBoxManage controlvm server-nagios acpipowerbutton Apaga la vm
  • VBoxManage controlvm server-nagios savestate Guarda su estado

Y si alguna vm es un Windows la podemos apagar así:
net rpc SHUTDOWN -t 0 -C "Apagado desde el servidor VBox" -f -I xxx.xxx.xxx.xxx -U Administrador%password



jueves, 18 de febrero de 2010

Borrar correos en cola Postfix

Me ha resultado muy útl el siguiente script. Ha sido la solución para borrar correos que me entraban de un servidor web comprometido. Me entraban con la dirección apache@dominio.com. con este script pasandole una dirección de correo, borra todos los correos en cola de dicha dirección.

#!/usr/bin/perl

$REGEXP = shift || die "no email-adress given (regexp-style, e.g. bl.*\@yahoo.com)!";

@data = qx;
for (@data) {
if (/^(\w+)(\*|\!)?\s/) {
  $queue_id = $1;
}
if($queue_id) {
 if (/$REGEXP/i) {
   $Q{$queue_id} = 1;
   $queue_id = "";
 }
}
}

#open(POSTSUPER,"|cat") || die "couldn't open postsuper" ;
open(POSTSUPER,"|postsuper -d -") || die "couldn't open postsuper" ;

foreach (keys %Q) {
print POSTSUPER "$_\n";
};
close(POSTSUPER);
Y si queremos ir más a piñón y borrar toda la cola...


/usr/sbin/postsuper -d ALL

viernes, 8 de enero de 2010

Novell login script de ejemplo

NO_DEFAULT

MAP R Z:=\\Svoes02\VLADM\APLICACIONS\Utilitats
MAP R G:=SRVOES01\GLOBAL:
@wscript.exe //B Z:\renameDrive.vbs G: "Global"
MAP R T:=SRVOES01\VLTRANSFER:transfer
@wscript.exe //B Z:\renameDrive.vbs T: "Transferència"

IF MEMBER OF ".jedis.fsmsystems.org" THEN

MAP R H:="\\SRVOES01\VLDEPHOME\Usuaris departaments\_Espai de treball - Caps Departament\%CN"
MAP R K:="\\SRVOES01\VLDEPGROUP\Grups departaments"
MAP R N:="\\SRVOES01\VLADMGROUP\Grups administració\Comptabilitat"

ELSE

MAP R H:="SRVOES01\VLADMHOME:Usuaris administració\%CN"
@wscript.exe //B Z:\renameDrive.vbs H: "Individual: %CN"
END

Write " Comprovant antivirus"
@Z:\scripts\etrust.bat

Write "."
Write ".."
Write "..."
Write "Hola %CN,"
Write " estem fent proves i és provable que t'hagi"
Write " sortit un missatge d'error anterior a aquest."
Write " No et preocupis ara mateix per ell, sempre i quan"
Write " puguis obrir totes les carpetes que necessites"
Write " per treballar."
Write ""

lunes, 4 de enero de 2010

Limpiador de ficheros de más de 30 dias

Tan útil como simple:
Elimina los ficheros de más de 30 de un directorio

find /path/to/files* -mtime +30 -exec rm {} \;