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 << EOFUSO: $0 -p proyecto -e entorno -u URL -A IP
Script para agregar nuevas URL al balanceadorOPCIONES:
-p Proyecto
-e Entorno (prov o dev )
-w Enlace documentacion
-m mail de contactoejemplo 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
fiif [ $inputentorno != prod -a $inputentorno != dev ]
thenecho -e «\e[0;31m ERROR: no se definio correctamente el entorno. debe ser prod o dev \e[0m»
exit 1
fiif [ -d /usr/local/nagios/etc/projects/$inputproject ];
thenecho -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.cfgsed -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.cfgfi
por ultimo solo queda el script el cual agrega nuevos servidores al proyecto.
cat /usr/bin/addmonitoring.sh
#!/bin/bash
usage()
{
cat << EOFUSO: $0 -p PUERTO -P PROYECTO -u URL -A IP
Script para agregar nuevas URL al balanceadorOPCIONES:
-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
fiif [ ! -d «/usr/local/nagios/etc/projects/$inputproject» ]
thenecho -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 ]
thenecho -e «\e[0;31m ERROR: no se definio correctamente el entorno. debe ser prod o dev \e[0m»
exit 1
fiif [ $inputso != linux -a $inputso != win ]
thenecho -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 ]
thenecho -e «\e[0;31m ERROR: se a detectado que el servidor /usr/local/nagios/etc/projects/$inputproject/linux/$inputserver.cfg existe \e[0m»
exitelse
#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.cfgfi
checksnmp=`snmpwalk -v2c -c $inputcommunity $inputaddress .1.3.6.1.4.1.2021.9 | wc -l`if [ $checksnmp = 0 ]
thenecho -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/salidadone
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 ]
thensed -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 ]
thensed -i «4 s|$|,$inputserver|» /usr/local/nagios/etc/projects/grupos_linux_prod.cfg
fi
if [ $inputentorno = dev ]
thensed -i «4 s|$|,$inputserver|» /usr/local/nagios/etc/projects/grupos_linux_dev.cfg
fi
}
if [ $inputso = linux ]
thenif [ -d /usr/local/nagios/etc/projects/$inputproject/linux ]
thenconfiglinux
else
#Creamos la carpeta
mkdir /usr/local/nagios/etc/projects/$inputproject/linux
configlinuxfi
fi################################################################################################################################
######################Funcion configuracion windows #################################################
function configwindows (){
if [ -f /usr/local/nagios/etc/projects/$inputproject/windows/$inputserver.cfg ]
thenecho -e «\e[0;31m ERROR: se a detectado que el servidor /usr/local/nagios/etc/projects/$inputproject/windows/$inputserver.cfg existe \e[0m»
exitelse
#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.cfgfi
#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 ]
thensed -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 ]
thensed -i «4 s|$|,$inputserver|» /usr/local/nagios/etc/projects/grupos_win_prod.cfg
fi
if [ $inputentorno = dev ]
thensed -i «4 s|$|,$inputserver|» /usr/local/nagios/etc/projects/grupos_win_dev.cfg
fi
}
if [ $inputso = win ]
thenif [ -d /usr/local/nagios/etc/projects/$inputproject/windows ]
thenconfigwindows
else
#Creamos la carpeta
mkdir /usr/local/nagios/etc/projects/$inputproject/windows
configwindowsfi
fi################################################################################################################################
/etc/init.d/nagios configtest
Un saludo
:wq!
Una respuesta a “Script para automatizar monitorización en nagios”