F5. Monitorización de tmm mem con snmp

Para poder extraer el valor de la memoria que usa un f5 bigip tmm en un momento dado desde nagios, se ha desarrollado a medida un script que usa los valores de la MIB propia de f5.

Para hacer búsquedas de valores en la MIB de f5, os recomiendo mibbrowser  y cargar las MIBS propias de los f5.

Los OID que yo he utilizado para este script son:

  • .1.3.6.1.4.1.3375.2.1.1.2.21.37.0  sysGlobalTmmStatMemoryUsedKb.0
  • .1.3.6.1.4.1.3375.2.1.1.2.21.38.0 sysGlobalTmmStatMemoryTotalKb.0

Finalmente, el script / plugin / check para nagios es:

check_bigip_snmp_mem.sh

Para funcionar, requiere que tengamos cargados las MIBS de f5 en el directorio de snmp:

/usr/share/snmp/mibs/F5-BIGIP-APM-MIB.txt
/usr/share/snmp/mibs/F5-BIGIP-LOCAL-MIB.txt
/usr/share/snmp/mibs/F5-EM-MIB.txt
/usr/share/snmp/mibs/F5-BIGIP-COMMON-MIB.txt
/usr/share/snmp/mibs/F5-BIGIP-SYSTEM-MIB.txt
/usr/share/snmp/mibs/F5-BIGIP-GLOBAL-MIB.txt
/usr/share/snmp/mibs/F5-BIGIP-WAM-MIB.txt

Nagios Centreon. Instalación desde repositorio CES-Standard Repo

Primero hay que añadir el repositorio CES-Standard Repo a nuestra lista de repositorios:

wget http://yum.centreon.com/standard/2.2/ces-standard.repo -O /etc/yum.repos.d/ces-standard.repo

yum clean all

yum update

A partir de este momento, ya tendremos los paquetes de Centreon listos para instalar con yum. Más información.

Nota: Yo estoy probando en CentOS 6.4 y parece que va mejor la instalación haciéndola desde los propios paquetes.

F5 Icontrol Powershell. Función para fijar una partición activa en los cmd-lets

A los scripts de devcentral, en el caso de estar usando particiones, será necesario en el inicio, la configuración de la partición activa como una carpeta.

#
# Set active partition
#
function  Set-Active-Partition (){

(Get-F5.iControl).SystemSession.set_active_folder($partition);
$folder = (Get-F5.iControl).SystemSession.get_active_folder();

}

Al igual que para tmsh, las particiones se ven como carpetas.

F5. Uso de api de Icontrol en poweshell

Es necesario descargar de la página de devcentral el componente iControlSnapInSetup.msi.

Tras el instalador, se abre power shell y se cambia la política de ejecución de Powershell como mínimo a RemoteSigned.

PS C:\Program Files> Set-ExecutionPolicy RemoteSigned

Se registra el componente en la consola de powershell, para poder usar sus llamadas. Para windows de 32 bits:

PS C:\Program Files> cd “C:\Program Files (x86)\F5 Networks\iControlSnapIn

PS C:\Program Files (x86)\F5 Networks\iControlSnapIn> .\setupSnapIn.ps1

En windows de 64 bits, hace falta copiar el archivo de 64 bits a mano. Por alguna razón el instalador por defecto no funciona. (Más información)

Si todo ha ido correcto, aparecerá en el listado de Componentes de powershell:

PS C:\Program Files (x86)\F5 Networks\iControlSnapIn> Get-PSSnapin

PS C:\Program Files (x86)\F5 Networks\iControlSnapIn> Get-PSSnapin -registered

Para borrar un snapin:

PS C:\Program Files (x86)\F5 Networks\iControlSnapIn> Remove-PSSnapin -name iControlSnapIn

Quitar el tiempo de espera en grub2 en el arranque

Para editar el tiempo de espera en grub editamos como root el archivo /

sudo emacs /etc/default/grub

En el que habrá que eliminar el timeout

 

# If you change this file, run ‘update-grub’ afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n ‘Simple configuration’

GRUB_DEFAULT=0
GRUB_TIMEOUT=0

Posteriormente, para guardar los cambios, se ejecuta

sudo update-grub

Configurar servidor pxe para instalación de windows en red

El objetivo, es montar un servidor pxe, para poder instalar un windows con arranque con red.

La máquina donde pondremos pxe tiene las siguientes características:

  • Ubuntu 11.10
  • kernel linux  3.0.0-14-generic

DNSMasq:

apt-get install dnsmasq-utils dnsmasq
mkdir -p /var/ftp/tftpboot
mkdir /var/ftp/tftpboot/pxelinux.cfg

Configuramos el fichero  /etc/dnsmasq.conf:

no-resolv
local=/localnet/
dhcp-range=192.168.0.50,192.168.0.150,255.255.255.0,12h
dhcp-option=3,10.1.10.1
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/var/ftp/tftpboot

Syslinux

Instalación:

apt-get install syslinux

Se copian a mano los ficheros pxelinux.0 y  la carpeta memdisk en los directorios preparados para ello:

find / -name  pxelinux.0
cp /usr/lib/syslinux/pxelinux.0 /var/ftp/tftpboot/
cp -rf /usr/lib/syslinux/memdisk  /var/ftp/tftpboot/

Imagen de windows.

Cogemos la imagen de windows,  y la cargamos en /var/ftp/tftpboot/

PXELinux

Creamos el fichero de configuración para pxe, que será el encargado del arranque por red.

touch /var/ftp/tftpboot/pxelinux.cfg/default

Esta configuración es la que me ha funcionado. Ojo, hay que cambiar el nombre de la imagen de arranque.

nano /var/ftp/tftpboot/pxelinux.cfg/default

DEFAULT pe
PROMPT 60

LABEL pe
LINUX /memdisk
APPEND iso
INITRD /winpe_x86.iso

Para esta instalación, nos hemos basado en las siguientes guías:

  • http://www.savelono.com/linux/how-to-install-windows-7-over-a-network-using-linux-pxe-dnsmasq-and-samba.html
  • http://www.linuxquestions.org/questions/linuxquestions-org-member-success-stories-23/building-a-windows-livecd-with-barts-pe-for-linux-users-243478/

Cuando usar ls y cuando usar find

En general, a la hora de hacer scripts con listados de archivos y directorios, el comando “ls” es más que suficiente.

Sin embargo, a la hora de querer hacer un listado con la ruta completa, haciendo ls -R,  el resultado es parecido a este:

# ls -R

dir:
arch1 arch2 arch 3 arch4

Este tipo de salida, es difícil de procesar, después en los scripts.  Lo deseable es contar  con salidas:

dir/arch1
dir/arch2
dir/arch3
dir/arch4

Para conseguir esto, lo útil es usar find con un modificador de profundidad, para evitar que se listen todos los niveles de la jerarquía:

find /dir/* -maxdepth 0′

Os dejo un enlace al manual, para ver otros modificadores: http://unixhelp.ed.ac.uk/CGI/man-cgi?find

Reducir el tamaño de la particion de swap en LVM

Por defecto, la instalación de CENTOS hace unas particiones inmensas de swap, que están muy lejos del tamaño que vamos a querer usar nosotros.

Vamos a hacerlo a través de la consola.

Primero, reducimos el tamaño de SWAP, desmontando la paginación, y volviendo al estado antiguo.

swapoff -v /dev/VolGroup00/LogVol01
lvreduce  /dev/VolGroup00/LogVol01 -L 512M
mkswap  /dev/VolGroup00/LogVol01
swapon -va
cat /proc/swaps

Más información: http://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-swap-removing.html

La gestión de los logs en bash script.

Tener trazas es vital para encontrar los problemas cuando ocurren. Y ocurren. Vamos a ver hoy como hacer una gestión de creación, trazado y borrado de logs en nuestros propios scripts.

Donde se guardan los logs

Por defecto, los ficheros de log se guardan en la carpeta /var/log/X, siendo X el programa que los generó.

En mi caso, por problemas de permisos en la máquina donde los ejecuto, los guardo en /tmp.

Crear el fichero de log

Para tener más información, mis ficheros de log contienen en su nombre qué usuario es el que generó la traza.

LOG=/tmp/$APP.$(whoami).log

Mensajes de log

Cada mensaje de log, está identificado por la aplicación que lo generó, así como la hora minuto y segundo en que se generó la línea:

function log {

echo [$APP $(date +%H:%M:%S)] $@ >> $LOG

}

El uso de esta función sería:

log ‘mensaje de prueba 1. Ejecuto en directorio’ $PWD

Sentíos libros de añadir cualquier información más a la traza.

Borrar las trazas cuando exceden de un determinado tamaño.

No se puede llenar el sistema de archivos. Sobre todo cuando es una tarea periódica que ejecuta, por ejemplo todos los días.

Por ello, antes de empezar cada ejecución yo tengo una función de validar si el log ya existe, y, si excede un determinado tamaño, se borra y se empieza uno nuevo

function openLog {

LOG_LOG=$1

LOG_APP=$2

# If log is bigger than maxsize, delete it

if [ -e $LOG_LOG ] ; then

SIZE=$(stat -c %s $LOG_LOG)

if [ $SIZE -gt $MAXSIZE ] ; then

echo ‘borrando log’

rm -rf $LOG_LOG

fi;

fi;

# Create log if it doesn’t exist.

if [ ! -e $LOG_LOG ]; then

touch $LOG_LOG

fi;

}

# Create log if it doesn’t exist.

if [ ! -e $LOG ]

touch $LOG

}

Conclusiones

Es, por tanto, necesario comenzar siempre la ejecución de nuestros script abriendo el fichero de log, que lo creará si no existe o lo borrará si es demasiado grande.

Sentíos libres de utilizar y mejorar estas funciones ampliando su funcionalidad o la cantidad de información que vuelcan al sistema.

Lo mínimo indispensable para depurar un script en perl

“Yo no quiero saber perl. No quiero desarrollar nada nuevo. Sólo quiero depurar un script “

Aquí está lo mínimo para ser capaces de depurar en poco tiempo un script. Para empezar, para lanzar el script usamos el flag -d:

perl -d SCRIPT

Una vez dentro del depurador, observamos que se parece muchísimo al gdb. Aquí está lo mínimo para ser capaces de depurar con cierta soltura:

  • q: quit
  • l: lista n lineas
  • n: next
  • s:step. Ejecuta la siguiente línea sin entrar en el propio código.
  • p: print. Imprime los valores de las variables.