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
fipor 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 configtestUn saludo
:wq!
Comentarios