Documentos de Académico
Documentos de Profesional
Documentos de Cultura
IMPLEMENTACIÓN DE UN SISTEMA DE
MONITORIZACIÓN EN TIEMPO REAL DE
EQUIPOS Y SERVICIOS UTILIZANDO NAGIOS
CORE EN UN ENTORNO DE PRODUCCIÓN
Página 2 de 65
Página 3 de 65
Resumen
Enfocado a tener una arquitectura extensible, y diseñado para contar con suficiente
flexibilidad y escalabilidad, nos provee con un API 1que permite que sus características
puedan ser extendidas a través del diseño y programación de complementos.
Demostrando que su arquitectura ha sido más que un éxito y dando lugar desde hace
años a la creación de miles de complementos que extienden todo lo que es su núcleo.
Por las razones mencionadas y otras que se darán a conocer, es que Nagios Core hoy
en día sigue siendo líder dentro de la industria, con más de 25 años de existencia y
varios aportes comunitarios en este proyecto que cuenta ya con una gran trayectoria.
Página 4 de 65
Summary
Real-time monitoring of computer networks has proven to be very useful for small
businesses to large corporations since Net Saint was released in 1999 as the first
software considered as the industry standard in computer’s cyber security.
Due to licensing issues, the name changed to Nagios in 2002. Since then, it became
known as the only reliable solution to guarantee stability and high availability of
computer systems. In 2007, SourceForge.net listed Nagios as the best tool for
sysadmins and also by LinuxQuestions.org as the network monitoring app of the year.
In addition, it was rated by eWeek as the most important open source app of all time.
For those and many more reasons, Nagios Core continues to be a leader within the
industry, with more than 25 years of successful experience and several community
contributions included into its repository.
Página 5 de 65
Introducción
Es importante destacar que Nagios Core cuenta con la licencia GNU GPL v2, lo que
significa que su código fuente es de libre acceso y que cualquier persona tiene el
derecho de modificarlo y distribuirlo. Los beneficios de contar con esta licencia son
muchos, ya que permite la colaboración y la mejora continua del software por parte
de una amplia comunidad de usuarios y desarrolladores, lo que puede resultar en un
software más seguro, estable y funcional. Además, al ser software libre, no se requiere
el pago de licencias costosas, lo que lo hace muy accesible para las PYMES en España.
En resumen, este proyecto tiene como objetivo ofrecer una solución de monitoreo en
tiempo real para los sistemas y servicios de red, utilizando software libre y tecnologías
bastante actuales para garantizar la disponibilidad y continuidad de un negocio.
Página 6 de 65
Justificación
Este proyecto justifica la integración del SIEM2 Nagios Core, un software que permite
a las organizaciones que lo hayan implementado el poder acceder a una solución todo
en uno para la detección de eventos en tiempo real y la generación de alertas, un
componente integral de la gestión de red proactiva y la toma de decisiones basada en
datos provenientes de las métricas obtenidas de los dispositivos de cualquier negocio.
Página 7 de 65
Objetivos
Página 8 de 65
4. Generar gráficos en base a las estadísticas recopiladas: Finalmente,
un objetivo importante de este proyecto es la generación de gráficos basados
en estadísticas recolectadas durante el monitoreo de la red. Para cumplir con
este objetivo, Nagios Core almacenará datos del estado de las máquinas y
servicios, mientras que se emplean herramientas de visualización para generar
gráficos de visualización que brinden una clara visibilidad del estado de la red.
Página 9 de 65
Planificación
Página 10 de 65
Supervisión de dispositivos de red con SNMP v3
Este plan de trabajo tiene como fin garantizar un sistema de monitoreo efectivo en
tiempo real utilizando Nagios Core dentro de un entorno que ya se encuentra
completamente operativo. Se recomienda que se respete el orden en el que se
encuentra descrito según se menciona en el desarrollo y el procedimiento en cada uno
de los capítulos para garantizar su correcta implementación y funcionamiento.
Página 11 de 65
Desarrollo
Página 12 de 65
chequear servicios en paralelo y permitir una rotación automática de los registros que
se almacenan en el sistema.
3
Common Graphic Interface
Página 13 de 65
Los archivos y directorios de configuración
1. Las líneas que empiezan con almohadilla # son comentarios en bloque y los
que comienzan con doble barra // son comentarios en línea.
Página 14 de 65
Archivos de configuración principal
Archivo de recursos
Página 15 de 65
Archivos de definición de objetos
Página 16 de 65
Archivo de plantillas
Servicios: Se definen los servicios como funciones que se ejecutan en hosts que serán
monitoreados. Un servicio podría ser, por ejemplo, monitorear el estado de un
servidor web, una base de datos o un servicio de correo electrónico. Al crear uno, se
debe especificar su host, el comando que lo monitoreará y otros detalles.
Comandos: Son las instrucciones que se ejecutan para monitorear un servicio o host,
como verificar el estado de su base de datos o extraer información referente al host
mediante NCPA o SNMP. Para definir uno con Nagios Core es necesario dar su
nombre, la ruta al script y los argumentos requeridos por el mismo.
Página 17 de 65
Contactos: Los contactos de Nagios Core son individuos o grupos que recibirán
notificaciones en caso de que surja un problema de monitoreo. Al crear contactos,
debe especificar nombre, dirección de correo electrónico, entre otras características.
Grupos: Los grupos son colecciones de hosts o servicios agrupados según alguna
característica común; por ejemplo, un ejemplo podría incluir todos los servidores web
dentro de una organización. Al configurar los grupos de Nagios Core, se deben
especificar sus nombres, así como las listas de hosts o servicios que los componen.
Hay que tener en cuenta la importancia de configurar objetos con precisión en Nagios
Core, ya que cualquier error en la configuración podría crear problemas. Por ello, se
aconseja tener un conocimiento sólido de los tipos de objeto y sus características.
Página 18 de 65
Instalación de Nagios
Página 19 de 65
2. A continuación, resulta recomendable reiniciar para garantizar un alto
rendimiento durante el funcionamiento del equipo.
cd nagios-4.4.11
Página 20 de 65
6. Y ejecutamos la tarea de configuración base previa, compilando a
continuación.
./configure
make all
Página 21 de 65
11. Después de ello, con esta orden creamos los archivos de configuración de
ejemplo que son requeridos por Nagios para poder funcionar en el arranque.
12. Para concluir con la instalación del Core, se procede instalar los archivos de
configuración de nuestro servidor web Apache, configurándolo en el proceso.
13. Si lo que nos apetece es darle un toque más contemporáneo a nuestra interfaz,
podemos utilizar este tema sugerido por la comunidad para este propósito.
Página 22 de 65
15. Con esto concluiría la instalación de Nagios Core, pero no es el final de
nuestro trabajo en este ámbito. Lo que sigue ahora es la instalación de los
complementos o CGI’s que le otorgan los músculos necesarios para poder
monitorizar la mayoría de los aspectos de nuestra equipos, red y servicios.
Página 23 de 65
Acomodando las CGI’s
Página 24 de 65
cd nagios-plugins-2.4.4
make
sudo rm /etc/apache2/sites-available/000-default.conf
Página 25 de 65
Monitoreo en remoto de un host
Combinado con Nagios Core, este agente brinda varias ventajas distintivas, como una
mayor flexibilidad de configuración y monitoreo, medidas de seguridad mejoradas,
mayor capacidad de automatización de tareas y un tiempo de respuesta de alerta más
rápido. Los administradores de sistemas que usan NCPA pueden monitorear los
factores de carga del sistema, como la utilización del espacio en disco, el uso de la
memoria RAM o el estado del servicio, entre otras métricas críticas del sistema.
Página 26 de 65
Como tal, este trabajo de investigación busca explorar y describir NCPA con Nagios
para el monitoreo remoto de hosts examinando sus posibles escenarios de
implementación para monitorear hosts en los sistemas operativos Windows y Linux.
3. Ahora se tiene que permitir el tráfico de NCPA a través del puerto 5693.
Página 27 de 65
sudo ufw allow 5693/tcp
sudo ufw reload
Página 28 de 65
Instalación de Check_NCPA en el servidor
cd check_ncpa/
Página 29 de 65
4. Para concluir, movemos el archivo hacia el directorio en donde se
encuentran el resto de ejecutables que corre Nagios para su correcto
funcionamiento.
Página 30 de 65
Monitoreo de clientes mediante NCPA
define command {
command_name nombre_del_comando
command_line $USER1$/comando_a_invocar
Nota:
cfg_file=/usr/local/nagios/etc/objects/mis-hosts.cfg
Página 31 de 65
Como siguiente paso, creamos el archivo mis-hosts.cfg en el directorio
/usr/local/nagios/etc/objects/ y agregamos nuestros clientes deseados con la
siguiente estructura:
define hostgroup {
hostgroup_name nombre_del_grupo_de_clientes
alias nombre_largo_del_grupo_de_clientes
members miembros_del_grupo_de_clientes
define host {
host_name nombre_del_cliente
alias nombre_largo_del_cliente
parents dispositivo_a_nivel_superior_jerarquico
hostgroups grupo_de_hosts_al_que_pertenece_el_host
address dirección_ip_del_cliente
Página 32 de 65
Para proceder a inspeccionar los servicios de cada cliente, estos tienen que ser
especificados mediante la siguiente estructura, respetando cada uno de sus campos:
define service {
host_name nombre_del_cliente
service_description nombre_del_servicio
check_command comando_a_invocar
max_check_attempts máxima_cantidad_de_chequeos
check_interval intervalo_de_chequeos_regulares
retry_interval intervalo_de_reintentos_de_un_chequeo
notification_interval intervalo_de_notificacion
notification_period período_de_notificaciones
Nota:
Página 33 de 65
A continuación, se dará una lista de los comandos que se pueden especificar en la
directiva check_command para hacer mucho más clara y concisa la explicación de
cada uno de los resultados que se pueden obtener mediante el agente de NCPA.
Página 34 de 65
Implementación de SNMP
4
Simple Network Management Protocol
Página 35 de 65
• Ahora podemos inspeccionar todos aquellos elementos a través de una
caminata SNMP haciendo uso de las credenciales que hemos habilitado
para el protocolo SNMPv3. En este comando utilizamos una base de datos
libre para el manejo de la información otorgada para tener una salida
mucho más legible de los mismos OID que nos devuelva esta consulta.
https://raw.githubusercontent.com/SteScho/manubulo
n-snmp/master/plugins/check_snmp_mem.pl \n
https://github.com/willixix/WL-
NagiosPlugins/blob/master/check_uptime.pl ' >
complementos_snmp
wget --input-file=complementos_snmp
Página 36 de 65
Comandos por definir en el archivo commands.cfg
Nombre del Comando por invocar
comando
Vigila $USER1$/check_snmp -H $HOSTADDRESS$ -P 3 -U $USER2$
cualquier -L authPriv -a SHA -A $USER3$ -x AES -X $USER3$ -o $ARG1$
OID
Vigilar el perl $USER1$/check_snmp_netint.pl -H $HOSTADDRESS$ -n
tráfico de la $ARG1$ -l $USER2$ -x $USER3$ -X $USER3$ -L "$ARG2$" -B -
red de una Y -k -d 120 -w 0,0 -c 0,0 --label
interfaz
Vigila el perl $USER1$/check_snmp_mem.pl -H $HOSTADDRESS$ -l
consumo de $USER2$ -X $USER3$ -L $ARG1$ -x $USER3$ -f -T $ARG1$ -w
la memoria $ARG2$ -c $ARG3$
RAM
Vigila el perl $USER1$/check_uptime.pl -f -w -H $HOSTADDRESS$ -l
tiempo que $USER2$ -x $USER3$ -X $USER3$ -L $ARG1$ -P
ha pasado "$SERVICEPERFDATA$"
activo el host
Nota:
$USER2$ = user
$USER3$ = password
Página 37 de 65
• Podemos comprobar el funcionamiento de estos complementos al
ejecutarlos manualmente dentro de la carpeta que los contiene.
Página 38 de 65
• Debido a la creación de registros en el directorio /tmp/ desde el
complemento check_snmp_netint.pl, tendremos que otorgar la
propiedad de un fichero al usuario nagios para que pueda funcionar.
• Para finalizar, lo que tenemos que hacer es agregar los servicios que
queremos monitorizar desde Nagios haciendo uso de nuestro protocolo
SNMP, esto lo realizaremos haciendo uso de la estructura planteada en el
punto anterior.
Página 39 de 65
Gráficos en Nagios
5
Affero General Public License
Página 40 de 65
libre de alto rendimiento, utilizado para almacenar y gestionar los datos recopilados
por Nagios con estampas de tiempo. Entre ellos se contará con un conector que
almacene todos los datos de Nagios en esta base de datos, siendo este mismo Nagflux.
1. Para proceder con la instalación, en primer lugar, tendremos que actualizar los
repositorios del sistema y proceder a instalar las siguientes dependencias.
curl -s https://repos.influxdata.com/influxdata-
archive_compat.key > influxdata-archive_compat.key
echo
'393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16
e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c
&& cat influxdata-archive_compat.key | gpg --dearmor |
sudo tee /etc/apt/trusted.gpg.d/influxdata-
archive_compat.gpg > /dev/null
Página 41 de 65
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-
archive_compat.gpg] https://repos.influxdata.com/debian
stable main' | sudo tee
/etc/apt/sources.list.d/influxdata.list
go get -v -u github.com/griesbacher/nagflux
go env -w GO111MODULE=off
go build github.com/griesbacher/nagflux
Página 42 de 65
c. Creamos el directorio en el que alojaremos el servicio, enviamos los
archivos que le son propios y otorgamos a Nagios la pertenencia de los
directorios en los que se almacenarán los datos de rendimiento.
sudo cp
$GOPATH/src/github.com/griesbacher/nagflux/nagflux.servi
ce /lib/systemd/system/
Nota:
Página 43 de 65
4. Para concluir con la instalación del software para los gráficos, procederíamos con
la instalación de Grafana, la herramienta de representación de los datos.
5. Para concluir con todo ello, solo quedaría actualizar nuestros repositorios y proceder con
la instalación del software.
Página 44 de 65
Configuración de Grafana + InfluxDB + Nagflux
Ahora que contamos con las aplicaciones instaladas para poder graficar, tendremos
que proceder con la configuración, siendo esto necesario para Nagflux y Nagios.
1. Para empezar, tendremos que conectar Nagflux con InfluxDB mediante los
siguientes parámetros de configuración que crearemos con esta sentencia.
echo '[main]
NagiosSpoolfileFolder =
"/usr/local/nagios/var/spool/nagfluxperfdata"
NagiosSpoolfileWorker = 1
InfluxWorker = 2
MaxInfluxWorker = 5
DumpFile = "nagflux.dump"
NagfluxSpoolfileFolder =
"/usr/local/nagios/var/nagflux"
FieldSeparator = "&"
Página 45 de 65
BufferSize = 10000
FileBufferSize = 65536
DefaultTarget = "all"
[Log]
LogFile = ""
MinSeverity = "INFO"
[InfluxDBGlobal]
CreateDatabaseIfNotExists = true
NastyString = ""
NastyStringToReplace = ""
HostcheckAlias = "hostcheck"
[InfluxDB "nagflux"]
Enabled = true
Version = 1.0
Address = "http://127.0.0.1:8086"
Arguments =
"precision=ms&u=root&p=root&db=nagflux"
StopPullingDataIfDown = true
[InfluxDB "fast"]
Página 46 de 65
3. Y verificamos que nuestro conector interactúe correctamente con InfluxDB.
curl -G "http://localhost:8086/query?pretty=true" --
data-urlencode "q=show databases"
sudo sh -c "sed -i
's/^process_performance_data=0/process_performance_data=
1/g' /usr/local/nagios/etc/nagios.cfg"
sudo sh -c "sed -i
's/^#host_perfdata_file=/host_perfdata_file=/g'
/usr/local/nagios/etc/nagios.cfg"
sudo sh -c "sed -i
's/^#host_perfdata_file_template=.*/host_perfdata_file_t
emplate=DATATYPE::HOSTPERFDATA\\\\tTIMET::\$TIMET\$\\\\t
HOSTNAME::\$HOSTNAME\$\\\\tHOSTPERFDATA::\$HOSTPERFDATA\
$\\\\tHOSTCHECKCOMMAND::\$HOSTCHECKCOMMAND\$/g'
/usr/local/nagios/etc/nagios.cfg"
sudo sh -c "sed -i
's/^#host_perfdata_file_mode=/host_perfdata_file_mode=/g
' /usr/local/nagios/etc/nagios.cfg"
sudo sh -c "sed -i
's/^#host_perfdata_file_processing_interval=.*/host_perf
data_file_processing_interval=15/g'
/usr/local/nagios/etc/nagios.cfg"
Página 47 de 65
sudo sh -c "sed -i
's/^#host_perfdata_file_processing_command=.*/host_perfd
ata_file_processing_command=process-host-perfdata-file-
nagflux/g' /usr/local/nagios/etc/nagios.cfg"
sudo sh -c "sed -i
's/^#service_perfdata_file=/service_perfdata_file=/g'
/usr/local/nagios/etc/nagios.cfg"
sudo sh -c "sed -i
's/^#service_perfdata_file_template=.*/service_perfdata_
file_template=DATATYPE::SERVICEPERFDATA\\\\tTIMET::\$TIM
ET\$\\\\tHOSTNAME::\$HOSTNAME\$\\\\tSERVICEDESC::\$SERVI
CEDESC\$\\\\tSERVICEPERFDATA::\$SERVICEPERFDATA\$\\\\tSE
RVICECHECKCOMMAND::\$SERVICECHECKCOMMAND\$/g'
/usr/local/nagios/etc/nagios.cfg"
sudo sh -c "sed -i
's/^#service_perfdata_file_mode=/service_perfdata_file_m
ode=/g' /usr/local/nagios/etc/nagios.cfg"
sudo sh -c "sed -i
's/^#service_perfdata_file_processing_interval=.*/servic
e_perfdata_file_processing_interval=15/g'
/usr/local/nagios/etc/nagios.cfg"
sudo sh -c "sed -i
's/^#service_perfdata_file_processing_command=.*/service
_perfdata_file_processing_command=process-service-
perfdata-file-nagflux/g'
/usr/local/nagios/etc/nagios.cfg"
Página 48 de 65
5. Después de esto, lo único que quedaría es reemplazar los comandos de
rendimiento en el archivo commands.cfg de Nagios.
define command {
command_name process-host-perfdata-file-nagflux
define command {
command_name process-service-perfdata-file-nagflux
command_line /bin/mv
/usr/local/nagios/var/service-perfdata
/usr/local/nagios/var/spool/nagfluxperfdata/$TIMET$.perf
data.service
curl -G
"http://localhost:8086/query?db=nagflux&pretty=true"
--data-urlencode "q=show series"
Página 49 de 65
7. No hay que olvidarnos de permitir el acceso al puerto 3000 a
las conexiones entrantes a nuestro servidor mediante UFW.
10. Esto sería todo para poder consultar datos de nuestra base de datos InfluxDB
que contiene a este momento la información que nos entrega Nagios Core.
Página 50 de 65
Exportando gráficos mediante Grafana Reporter
Página 51 de 65
Reporter se convierte en una herramienta invaluable para compartir información de
manera efectiva y brindar una mayor visibilidad a los resultados del análisis.
go get github.com/IzakMarais/reporter/...
export GO111MODULE=on
sudo go install
github.com/IzakMarais/reporter/cmd/grafana-
reporter@latest
Página 52 de 65
sudo ufw reload
curl -X POST
http://admin:admin@localhost:3000/api/user/using/1
curl -L -o reporte.pdf
http://192.168.5.32:8686/api/v5/report/civired-
5?apitoken=ApiToken
Página 53 de 65
Notificación de alertas vía Telegram
Página 54 de 65
3. Una vez que se le ha asignado un nombre, se generará automáticamente un
token de acceso que se podrá utilizar en la configuración de Nagios.
5. Accedemos a https://api.telegram.org/botTokenDeAcceso/getUpdates
para activarlo y darle uso a continuación.
define command
command_name notify-host-by-telegram
Página 55 de 65
define command {
command_name notify-service-by-telegram
Página 56 de 65
Línea futura de investigación
Los planes de investigación futuros apuntan a explorar cuatro aspectos cruciales que
podrían mejorar la implementación de este sistema de monitoreo en tiempo real que
implementa Nagios Core dentro de un entorno de un ambiente real de trabajo.
Los aspectos que se abarcan hacen referencia a lo que es extender sus capacidades de
descubrimiento y monitorización, referentes a la configuración o respuesta a eventos:
En última instancia, esta futura línea de investigación tiene como objetivo mejorar la
implementación del sistema de monitoreo en tiempo real para equipos y servicios. Al
investigar y aplicar los aspectos mencionados anteriormente, la eficiencia, la
Página 57 de 65
disponibilidad y el rendimiento se pueden mejorar aún más, lo que lleva a una mejor
experiencia de servicio al usuario, así como un aumento de la productividad.
Conclusiones
Además de lo anterior, Nagios Core nos ofrece poder ampliar sus capacidades con
herramientas como Grafana para poder graficar datos de rendimiento en tiempo real,
generar alertas en base a umbrales y tomar sabias decisiones basadas en estadísticas.
Siguiendo esta misma línea, la funcionalidad de exportar todos estos gráficos
previamente generados mediante Grafana Reporter desde un servicio tan actual como
Grafana, a diferencia de Nagios, aporta un gran valor a la organización que desee
hacer uso o compartir estos mismos ficheros a otras empresas, denotando que se
utilizan herramientas las mejores herramientas para cumplir los objetivos impuestos.
En lo que a las alertas respecta, los bots de Telegram han resultado ser una parte
sencilla de implementar, permitiendo a los equipos de respuesta estar informados
Página 58 de 65
rápidamente de los malos funcionamientos en los dispositivos que se encuentren
monitorizados, para que estos equipos sean siempre capaz de solucionar estas
incidencias lo antes posible, pensando a cada momento en la salud de cualquier host.
Página 59 de 65
Bibliografía
4. Instalación de Nagios
Página 60 de 65
5. Monitoreo en remoto de un host
Página 61 de 65
Installing NCPA. (s. f.). nagios.com.
https://assets.nagios.com/downloads/ncpa/docs/Installing-
NCPA.pdf
d. Implementación de SNMP
6. Gráficos en Nagios
Página 62 de 65
Go build: «Cannot find package» (even though GOPATH is set).
(s. f.). Stack Overflow.
https://stackoverflow.com/questions/13214029/go-build-
cannot-find-package-even-though-gopath-is-set
Sushruthan – Medium.
https://sushruthan.medium.com/export-grafana-dashboard-
as-pdf-e04550b0b64e
Página 63 de 65
Grafana Reports | Grafana Labs. (s. f.). Grafana Labs.
https://grafana.com/grafana/dashboards/11365-grafana-
reports/
Página 64 de 65
Página 65 de 65