Script para automatizar monitorización en nagios

En esta ocasión traigo un pequeño script en el cual podemos dar de alta un nuevo proyecto y realizar la monitorización básica de servidores GNU/Linux y Windows

Este script consta de dos partes, la creación de un nuevo proyecto y la agregación de servidores para monitorizar en un proyecto.

Antes de nada debemos agregar los siguientes templates en la ruta /usr/local/nagios/templates (hosts.cfg, template.cfg, templatesrvlinux.cfg y templatesrvwin.cfg)

fichero  /usr/local/nagios/templates/hosts.cfg

 

#Hostgroup Definition

define hostgroup {
hostgroup_name todos-PROYECTO-ENTORNO
alias Todos los servidores de PROYECTO
members SERVIDOR
notes_url URLWIKI
}

#Ping to hosts

define service {
use PROYECTO-serv-ENTORNO
hostgroup_name todos-PROYECTO-ENTORNO
service_description PROYECTO – ping
check_command check_ping!100.0,10%!500.0,20%
}

fichero  /usr/local/nagios/templates/template.cfg

 

###############################################################################
###############################################################################
#
# CONTACT TEMPLATES
#
###############################################################################
###############################################################################

define contact{
contact_name PROYECTO
alias PROYECTO
service_notification_period 24×7
host_notification_period 24×7
service_notification_options u,c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email CONTACTEMAIL
}

define contactgroup{
contactgroup_name grupo-PROYECTO
alias Grupo de PROYECTO
members PROYECTO
}

###############################################################################
################################################################################
##
## HOST TEMPLATES
##
################################################################################
################################################################################

define host {
name PROYECTO-host-ENTORNO
flap_detection_enabled 1
notification_period 24×7
notification_options d,u,r
retain_status_information 1
retain_nonstatus_information 1
contact_groups grupo-PROYECTO
check_command check-host-alive
max_check_attempts 3
register 0
# notes_url URLWIKI
}

###############################################################################
################################################################################
##
## SERVICE TEMPLATES
##
################################################################################
################################################################################

define service {
name PROYECTO-serv-ENTORNO
check_period 24×7
flap_detection_enabled 1
notification_period 24×7
notification_options w,c,r
notification_interval 15
parallelize_check 1
retain_status_information 1
retain_nonstatus_information 1
max_check_attempts 3
normal_check_interval 3
retry_check_interval 1
contact_groups grupo-PROYECTO
register 0
}

 

fichero  /usr/local/nagios/templates/templatesrvlinux.cfg

define service {
use PROYECTO-serv-ENTORNO
host_name SERVIDOR
service_description SSH [No llamar a guardia]
check_command check_tcp!22
}
define service {
use PROYECTO-serv-ENTORNO
host_name SERVIDOR
service_description puerto apache TCP 80 [No llamar a guardia]
check_command check_tcp!80
}

define service {
use PROYECTO-serv-ENTORNO
host_name SERVIDOR
service_description Uso MEM [No llamar a guardia]
check_command check_lnxmem_snmp_porcentaje!SNMPCOMMUNITY!95!90
}

define service {
use PROYECTO-serv-ENTORNO
host_name SERVIDOR
service_description Carga CPU [No llamar a guardia]
check_command check_lnx_cpu!SNMPCOMMUNITY!90!95
}

#define service {
# use PROYECTO-serv-ENTORNO
# host_name SERVIDOR
# service_description Proceso – apache httpd[No llamar a guardia]
# check_command check_process_snmp!SNMPCOMMUNITY!httpd!0,50!0,100
#}

#define service {
# use PROYECTO-serv-ENTORNO
# host_name SERVIDOR
# service_description [URL] http://www. [No llamar a guardia]
# check_command check_http_public_urlize_ruta_exp!http://www.url.com!www.url.com!/!HTTP/1.1 200
#
#}

#define service {
# use PROYECTO-serv-ENTORNO
# host_name SERVIDOR [No llamar a guardia]
# service_description [Comprobacion Cadena -Texto de la cadena a comprobar- en http://www.url.com]
# check_command check_cadena!http://www.url.com/!»Texto de la cadena a comprobar»
#
#
#}

fichero  /usr/local/nagios/templates/templatesrvwin.cfg

define service {
use PROYECTO-serv-ENTORNO
host_name SERVIDOR
service_description Puerto 3389 [TS]
check_command check_tcp!3389
}

define service {
use PROYECTO-serv-ENTORNO
host_name SERVIDOR
service_description Uso CPU
check_command check_wincpu_snmp!SNMPCOMMUNITY!90!95

}

define service {
use PROYECTO-serv-ENTORNO
host_name SERVIDOR
service_description Uso MEM
check_command check_winmem_snmp!SNMPCOMMUNITY!MB!90%!95%

}

define service {
use PROYECTO-serv-ENTORNO
host_name SERVIDOR
service_description Disco C:
check_command check_disk_snmp!SNMPCOMMUNITY!C!MB!80%!90%
}

 

Una vez configurado todos los templates pasamos a los scripts, en primer lugar la creación de un nuevo proyecto.

cat /usr/bin/addproject.sh

#!/bin/bash

usage()
{
cat << EOF

USO: $0 -p proyecto -e entorno -u URL -A IP
Script para agregar nuevas URL al balanceador

OPCIONES:

-p Proyecto
-e Entorno (prov o dev )
-w Enlace documentacion
-m mail de contacto

ejemplo de uso: /usr/bin/addproject.sh -p balanceadores -e prod -w https://red-orbita.com/ -m rokitoh@red-robita.com

EOF
}

#Declaramos todas las variables que se van a usar para guardar los parametros
inputproject=
inputentorno=
inputwiki=
inputmail=

#Usamos el getopts para guardar los parametros en variables
while getopts «hH:p:e:w:» OPTION
do
case $OPTION in
h)
usage
exit 1
;;
p)
inputproject=$OPTARG
;;
e)
inputentorno=$OPTARG
;;
w)
inputwiki=$OPTARG
;;
m)
inputmail=$OPTARG
;

esac
done

#Comprobamos que se han introducido los parametros obligatorios
if [ -z $inputproject ] || [ -z $inputentorno ] || [ -z $inputwiki ] || [ -z $inputmail ]
then
usage
exit 1
fi

if [ $inputentorno != prod -a $inputentorno != dev ]
then

echo -e «\e[0;31m ERROR: no se definio correctamente el entorno. debe ser prod o dev \e[0m»

exit 1
fi

if [ -d /usr/local/nagios/etc/projects/$inputproject ];
then

echo -e «\e[0;31m ERROR: el proyecto /usr/local/nagios/etc/projects/$inputproject ya existe\e[0m»

exit 1

else

#Creamos el directorio del proyecto

mkdir /usr/local/nagios/etc/projects/$inputproject

#Copiamos el archivo template y hosts

cp /usr/local/nagios/templates/template.cfg /usr/local/nagios/etc/projects/$inputproject/
cp /usr/local/nagios/templates/hosts.cfg /usr/local/nagios/etc/projects/$inputproject/

#Configuramos el archivo hosts y template

sed -i -e «s|PROYECTO|$inputproject|g» /usr/local/nagios/etc/projects/$inputproject/template.cfg
sed -i -e «s|ENTORNO|$inputentorno|g» /usr/local/nagios/etc/projects/$inputproject/template.cfg
sed -i -e «s|URLWIKI|$inputwiki|g» /usr/local/nagios/etc/projects/$inputproject/template.cfg
sed -i -e «s|CONTACTEMAIL|$inputmail|g» /usr/local/nagios/etc/projects/$inputproject/template.cfg

sed -i -e «s|PROYECTO|$inputproject|g» /usr/local/nagios/etc/projects/$inputproject/hosts.cfg
sed -i -e «s|ENTORNO|$inputentorno|g» /usr/local/nagios/etc/projects/$inputproject/hosts.cfg
sed -i -e «s|URLWIKI|$inputwiki|g» /usr/local/nagios/etc/projects/$inputproject/hosts.cfg

fi

 

por ultimo solo queda el script el cual agrega nuevos servidores al proyecto.

cat /usr/bin/addmonitoring.sh

#!/bin/bash

usage()
{
cat << EOF

USO: $0 -p PUERTO -P PROYECTO -u URL -A IP
Script para agregar nuevas URL al balanceador

OPCIONES:

-p Proyecto
-e Entorno
-o Sistema operativo (linux o win)
-s Servidor
-i Direccion ip del servidor
-c Comunidad SNMP
-w Enlace wikipedia (Opcional)

ejemplo de uso: /usr/bin/addmonitoring.sh -p frontal -e prod -o linux -s srvorbita01 -i 172.20.0.14 -c redorbita -w https://red-orbita.com/

EOF
}

#Declaramos todas las variables que se van a usar para guardar los parametros
inputproject=
inputentorno=
inputso=
inputserver=
inputaddress=
inputcommunity=
inputwiki=

#Usamos el getopts para guardar los parametros en variables
while getopts «hH:p:e:o:s:i:w:» OPTION
do
case $OPTION in
h)
usage
exit 1
;;
p)
inputproject=$OPTARG
;;
e)
inputentorno=$OPTARG
;;
o)
inputso=$OPTARG
;;
s)
inputserver=$OPTARG
;;
i)
inputaddress=$OPTARG
;;
c)
inputcommunity=$OPTARG
;;
w)
inputwiki=$OPTARG
;;

esac
done

#Comprobamos que se han introducido los parametros obligatorios
if [ -z $inputproject ] || [ -z $inputentorno ] || [ -z $inputso ] || [ -z $inputserver ] || [ -z $inputaddress ] || [ -z $inputcommunity ]
then
usage
exit 1
fi

if [ ! -d «/usr/local/nagios/etc/projects/$inputproject» ]
then

echo -e «\e[0;31m ERROR: no se a encontrado el proyecto $inputproject ejecuta el comando /usr/bin/addproject.sh para crear el proyecto\e[0m»

exit 1

fi

if [ $inputentorno != prod -a $inputentorno != dev ]
then

echo -e «\e[0;31m ERROR: no se definio correctamente el entorno. debe ser prod o dev \e[0m»

exit 1
fi

if [ $inputso != linux -a $inputso != win ]
then

echo -e «\e[0;31m ERROR: no se definio el sistema operativo. debe ser linux o win \e[0m»

exit 1
fi

######################Funcion configuracion linux #################################################

function configlinux (){
if [ -f /usr/local/nagios/etc/projects/$inputproject/linux/$inputserver.cfg ]
then

echo -e «\e[0;31m ERROR: se a detectado que el servidor /usr/local/nagios/etc/projects/$inputproject/linux/$inputserver.cfg existe \e[0m»
exit

else

#Agregamos la configuracion del servidor

cp /usr/local/nagios/templates/templatesrvlinux.cfg /usr/local/nagios/etc/projects/$inputproject/linux/$inputserver.cfg

sed -i -e «s|PROYECTO|$inputproject|g» /usr/local/nagios/etc/projects/$inputproject/linux/$inputserver.cfg
sed -i -e «s|ENTORNO|$inputentorno|g» /usr/local/nagios/etc/projects/$inputproject/linux/$inputserver.cfg
sed -i -e «s|URLWIKI|$inputwiki|g» /usr/local/nagios/etc/projects/$inputproject/linux/$inputserver.cfg
sed -i -e «s|SERVIDOR|$inputserver|g» /usr/local/nagios/etc/projects/$inputproject/linux/$inputserver.cfg
sed -i -e «s|DIRIP|$inputaddress|g» /usr/local/nagios/etc/projects/$inputproject/linux/$inputserver.cfg
sed -i -e «s|SNMPCOMMUNITY|$inputcommunity|g» /usr/local/nagios/etc/projects/$inputproject/linux/$inputserver.cfg

fi
checksnmp=`snmpwalk -v2c -c $inputcommunity $inputaddress .1.3.6.1.4.1.2021.9 | wc -l`

if [ $checksnmp = 0 ]
then

echo -e «\e[0;31m ERROR: no se llega mediante snmp a $inputaddress. No se podra realizar toda la configuracion \e[0m»

else

for i in $( snmpwalk -v2c -c $inputcommunity $inputaddress .1.3.6.1.4.1.2021.9 | grep ‘STRING: «/’ | grep -v «mapper» | awk ‘{print $4}’ | sed ‘s/»/ /g’ ); do

echo «define service {» >> /usr/local/nagios/etc/projects/$inputproject/linux/$inputserver.cfg
echo «use $inputproject-serv-$inputentorno» >> /usr/local/nagios/etc/projects/$inputproject/linux/$inputserver.cfg
echo «host_name $inputserver» >> /usr/local/nagios/etc/projects/$inputproject/linux/$inputserver.cfg
echo «service_description FileSystem $i [No llamar a guardia]» >> /usr/local/nagios/etc/projects/$inputproject/linux/$inputserver.cfg
echo «check_command check_disk_snmp!techedge!$i!MB!80%!90%» >> /usr/local/nagios/etc/projects/$inputproject/linux/$inputserver.cfg
echo «}» >> /tmp/salida

done
fi

#Agregamos la configuracion en el fichero hosts.cfg

#Realizamos backup

cp /usr/local/nagios/etc/projects/$inputproject/hosts.cfg /usr/local/nagios/etc/projects/$inputproject/hosts.cfg-bck

cat << EOF >> /usr/local/nagios/etc/projects/$inputproject/hosts.cfg

define host {
use $inputproject-host-$inputentorno
host_name $inputserver
alias $inputserver
address $inputaddress
notes_url $inputwiki
}

EOF

configtemplate=`cat /usr/local/nagios/etc/projects/$inputproject/hosts.cfg | grep SERVIDOR | wc -l`

if [ $configtemplate = 0 ]
then

sed -i «6 s|$|,$inputserver|» /usr/local/nagios/etc/projects/$inputproject/hosts.cfg

else

sed -i -e «s|SERVIDOR|$inputserver|g» /usr/local/nagios/etc/projects/$inputproject/hosts.cfg

fi

if [ $inputentorno = prod ]
then

sed -i «4 s|$|,$inputserver|» /usr/local/nagios/etc/projects/grupos_linux_prod.cfg

fi

if [ $inputentorno = dev ]
then

sed -i «4 s|$|,$inputserver|» /usr/local/nagios/etc/projects/grupos_linux_dev.cfg

fi

}

if [ $inputso = linux ]
then

if [ -d /usr/local/nagios/etc/projects/$inputproject/linux ]
then

configlinux

else

#Creamos la carpeta

mkdir /usr/local/nagios/etc/projects/$inputproject/linux
configlinux

fi
fi

################################################################################################################################

######################Funcion configuracion windows #################################################

function configwindows (){
if [ -f /usr/local/nagios/etc/projects/$inputproject/windows/$inputserver.cfg ]
then

echo -e «\e[0;31m ERROR: se a detectado que el servidor /usr/local/nagios/etc/projects/$inputproject/windows/$inputserver.cfg existe \e[0m»
exit

else

#Agregamos la configuracion del servidor

cp /usr/local/nagios/templates/templatesrvwin.cfg /usr/local/nagios/etc/projects/$inputproject/windows/$inputserver.cfg

sed -i -e «s|PROYECTO|$inputproject|g» /usr/local/nagios/etc/projects/$inputproject/windows/$inputserver.cfg
sed -i -e «s|ENTORNO|$inputentorno|g» /usr/local/nagios/etc/projects/$inputproject/windows/$inputserver.cfg
sed -i -e «s|URLWIKI|$inputwiki|g» /usr/local/nagios/etc/projects/$inputproject/windows/$inputserver.cfg
sed -i -e «s|SERVIDOR|$inputserver|g» /usr/local/nagios/etc/projects/$inputproject/windows/$inputserver.cfg
sed -i -e «s|DIRIP|$inputaddress|g» /usr/local/nagios/etc/projects/$inputproject/windows/$inputserver.cfg
sed -i -e «s|SNMPCOMMUNITY|$inputcommunity|g» /usr/local/nagios/etc/projects/$inputproject/windows/$inputserver.cfg

fi

#Agregamos la configuracion en el fichero hosts.cfg

#Realizamos backup

cp /usr/local/nagios/etc/projects/$inputproject/hosts.cfg /usr/local/nagios/etc/projects/$inputproject/hosts.cfg-bck

cat << EOF >> /usr/local/nagios/etc/projects/$inputproject/hosts.cfg

define host {
use $inputproject-host-$inputentorno
host_name $inputserver
alias $inputserver
address $inputaddress
notes_url $inputwiki
}

EOF

configtemplate=`cat /usr/local/nagios/etc/projects/$inputproject/hosts.cfg | grep SERVIDOR | wc -l`

if [ $configtemplate = 0 ]
then

sed -i «6 s|$|,$inputserver|» /usr/local/nagios/etc/projects/$inputproject/hosts.cfg

else

sed -i -e «s|SERVIDOR|$inputserver|g» /usr/local/nagios/etc/projects/$inputproject/hosts.cfg

fi

if [ $inputentorno = prod ]
then

sed -i «4 s|$|,$inputserver|» /usr/local/nagios/etc/projects/grupos_win_prod.cfg

fi

if [ $inputentorno = dev ]
then

sed -i «4 s|$|,$inputserver|» /usr/local/nagios/etc/projects/grupos_win_dev.cfg

fi

}

if [ $inputso = win ]
then

if [ -d /usr/local/nagios/etc/projects/$inputproject/windows ]
then

configwindows

else

#Creamos la carpeta

mkdir /usr/local/nagios/etc/projects/$inputproject/windows
configwindows

fi
fi

################################################################################################################################

/etc/init.d/nagios configtest

 

 

 

 

 

Un saludo

:wq!

 

 

Una respuesta a “Script para automatizar monitorización en nagios”

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *