Monitoreo de métricas en tiempo real y con historial [1era Parte]

El siguiente artículo es una colaboración entre Franco Díaz Hurtado (AKA @Franco_Sparrow) y mia Alexander Rivas Alpizar ([email protected]). También es un update del articulo que escribiera Franco hace un tiempo sobre NetData. En el mismo les mostraremos como implementar un sistema de monitoreo en tiempo real con muchísima información basado en Netdata y la forma de hacer que esas métricas se guarden por periodos de tiempos más largos. Bueno, manos a la obra.

ÍNDICE

¿Qué es lo que se quiere?

Netdata.

¿Qué es Netdata?

Implementación y configuración de Netdata.

Prerrequisitos de instalación de Netdata sin internet.

Instalación de Netdata.

Configuración de Netdata-master.

Configurando Netdata-slave.

Proxy inverso para autenticación de Netdata.

HTTPS con certificado SSL auto-firmado para Nginx.

Configurando Nginx para usar SSL.

Creando un Fragmento de Configuración Apuntando a la Llave y Certificado SSL.

Creando una Porción de Configuración con Fuertes Opciones de Encriptación.

Ajustando la Configuración de Nginx para usar SSL.

Script anticrash para Netdata.

Prometheus.

¿Qué es Prometheus?.

Implementación y configuración de Prometheus.

Configurando Prometheus.

Iniciando Prometheus.

Comprobando resultados en servidor Prometheus.

Grafana.

¿Qué es Grafana?.

Implementación y configuración de Grafana.

Iniciando Grafana.

Integrando Prometheus con Grafana.

UFW

Datos

Sistema Operativo de los servidores: Debian 10 (Buster)

Servidor Netdata: 192.168.120.203 (netdata.empresa.midominio.cu)

Servidor Prometheus: 192.168.120.205 (prometheus.empresa.midominio.cu)

Servidor Grafana: 192.168.120.207 (grafana.empresa.midominio.cu)

Versión de Netdata: v1.26.0

Versión de Prometheus: v2.23.0 (aunque también es compatible el procedimiento con la versión v2.21.0)

Versión de Grafana: v7.3.5

Puertos a tener en cuenta para su Firewall:

(19999) por el protocolo (TCP), para Netdata
(9090)
por el protocolo (TCP), para Prometheus
(9100)
por el protocolo (TCP), para Prometheus Node Exporter
(3000)
por el protocolo (TCP), para Grafana

¿Qué es lo que se quiere?

Se desea una solución que permita la monitorización de las métricas de los host Linux y que esta monitorización sea en tiempo real, pero que además brinde la posibilidad de históricos. Para resolver esta problemática se escogieron como soluciones: Netdata, Prometheus y Grafana. Estos servicios distribuidos en servidores independientes, propiciarán una solución conjunta que nos aportará los resultados esperados para métricas en tiempo real e históricos.

La siguiente arquitectura es una propuesta hecha en la documentación oficial de Netdata:

Todos los servidores deben estar sincronizados en tiempo con el PDC y usando la misma zona horaria, para que no haya inconsistencias en la representación gráfica en el tiempo de las métricas de Netdata.

NOTA: El procedimiento descrito en este tutorial ha de seguirse respetando las versiones de los softwares que serán utilizados en el mismo.

¿Qué es Netdata?

Netdata es una herramienta para visualizar y monitorear métricas en tiempo real, optimizada para acumular todo tipo de datos, como uso de CPU, actividad de disco, consultas SQL, visitas a un sitio web, entre otros. La herramienta está diseñada para visualizar el ahora en el mayor detalle posible, permitiendo al usuario obtener una visión de lo que está sucediendo y lo que acaba de suceder en su sistema o aplicación, siendo una opción ideal para solucionar problemas de desempeño en tiempo real. Su objetivo es brindar métricas en tiempo real.

Consiste en un demonio que, al ejecutarse, se encarga de obtener información en tiempo real, por segundo, y presentarla en un sitio web para su visualización y análisis. La presentación es interactiva y en tiempo real. Se trata de una herramienta ligera, en su mayor parte escrita en C, la cual presenta bajos niveles de consumo durante su ejecución: alrededor de 2% de uso para un CPU de un único hilo y unos pocos megabytes de RAM. Puede ejecutarse en cualquier kernel GNU/Linux para monitorear cualquier sistema o aplicación, siendo posible correrla en PCs, servidores o dispositivos embebidos Linux.

Implementación y configuración de Netdata.

Como mínimo, Netdata requiere las siguientes bibliotecas y herramientas para compilarse y ejecutarse correctamente:

libuuid
libuv version 1.0 o superior
zlib
GNU autoconf
GNU automake
GCC o Xcode (Clang se sabe que tiene problemas en ciertas configuraciones, consulte uso de Clang)
Una versión de make compatible con GNU automake
Git (usamos git en el sistema de compilación para generar información de la versión, no necesitamos una instalación completa, solo un comando git show que funcione)

Además, las siguientes características de tiempo de compilación requieren dependencias adicionales:

Soporte TLS para la GUI web:
OpenSSL 1.0.2 o más reciente o LibreSSL 3.0.0 o más reciente.
almacenamiento métrico dbengine:
liblz4 r129 o más reciente
OpenSSL 1.0 o más reciente (LibreSSL amy funciona, pero en gran parte no está probado).
libJudy
Soporte de Netdata Cloud:
Una conexión a Internet en funcionamiento
Una versión reciente de CMake
OpenSSL 1.0.2 o más reciente o LibreSSL 3.0.0 o más reciente.
JSON-C (puede ser proporcionado por el usuario como se muestra a continuación, o por el sistema)

En todos los hosts Linux, que van a implementar Netdata instalar los siguientes Pre-requisitos:

En dependencia del servidor que se instale puede que les advierta que ya muchos de esos paquetes ya estan instalados y actuales.

Prerrequisitos de instalación de Netdata sin internet

Para nuestro articulo usaremos la version 1.26.0 de NetData que es la actual en el momento que se realizó este tutorial. Las siguientes configuraciones son necesarias si se quiere instalar Netdata en un servidor que no cuente con acceso a internet. Se deberá preparar el escenario, mediante la modificación del script de instalación y se debe descargar el software necesario desde un host que sí cuente con acceso a internet. Desde un host con acceso a internet, descargamos el software de Netdata y algunas dependencias necesarias:

https://github.com/netdata/netdata/archive/v1.26.0.zip

https://github.com/netdata/mosquitto/archive/v.1.6.8_Netdata-5.tar.gz

https://github.com/warmcat/libwebsockets/archive/v3.2.2.tar.gz

https://github.com/json-c/json-c/archive/json-c-0.15.tar.gz

https://github.com/netdata/libbpf/archive/v0.0.9_netdata-1.tar.gz

https://github.com/netdata/dashboard/releases/download/v2.10.1/dashboard.tar.gz

https://github.com/netdata/kernel-collector/releases/download/v0.4.9/netdata-kernel-collector-glibc-v0.4.9.tar.xz

Los paquetes descargados anteriormente, se los subimos al servidor a su directorio “/tmp” y le cambiamos el nombre a algunos de ellos. Esto será necesario para que funcione el script de instalación que se modificará más adelante:

Creamos los siguientes directorios y les damos los permisos adecuados:

Movemos los paquetes a sus respectivos directorios:

Copiamos el software de Netdata al directorio “/opt” y lo descompactamos:

Dentro del contenido de la carpeta netdata encontraremos el script de instalación lo editaremos, adaptándolo a un sistema offline (sin salida a internet):

Comentamos la siguiente línea y la dejamos como sigue:

Comentamos la siguiente línea y la dejamos como sigue:

Comentamos las siguientes líneas y dejamos las demás como se muestran:

Comentamos la siguiente línea y la dejamos como sigue:

Comentamos la siguiente línea y la dejamos como sigue:

Comentamos la siguiente línea y la dejamos como sigue:

Comentamos las siguientes líneas y dejamos las demás como se muestran:

Comentamos la siguiente línea y la dejamos como sigue:

Comentamos la siguiente línea y la dejamos como sigue:

Comentamos las siguientes líneas y dejamos las demás como se muestran:

Comentamos la siguiente línea y la dejamos como sigue:

Comentamos la siguiente línea y la dejamos como sigue:

Comentamos la siguiente línea y la dejamos como sigue:

Comentamos las siguientes líneas y dejamos las demás como se muestran:

Comentamos la siguiente línea y la dejamos como sigue:

Comentamos la siguiente línea y la dejamos como sigue:

Comentamos las siguientes líneas y dejamos las demás como se muestran:

Comentamos la siguiente línea y la dejamos como sigue:

Comentamos la siguiente línea y la dejamos como sigue:

Comentamos las siguientes líneas:

Instalación de Netdata.

Si el servidor en el cual se va a instalar Netdata, cuenta con acceso a internet, no es necesario hacer ninguna de las modificaciones anteriores y se hace uso del script original. En mi caso particular que estoy detrás de un proxy padre tuve dificultades para correr el script. Investigando la razón me di cuenta que los repositorios de netdata usan certificados ssl (https) y el comando curl al parecer no se lleva muy bien con los certificados. Por lo que me di a la tarea de modificar los scripts para usar wget que es mucho más noble en ese sentido. A continuación les dejo los cambios que realice en los ficheros involucrados con la instalación automática de netdata.

Nota: Si usted no está detrás de un proxy padre y cuenta con conexión a internet no necesitara modificar nada. También si desea probar suerte con el comando curl que es el que por defecto usa el script podrá hacerlo.

Comenzaremos editando el fichero functions.sh donde se declaran todas las funciones que usara el script.

Dentro buscaremos la funcion get y editamos lo siguiente:

Dentro buscaremos la funcion download_file y editamos lo siguiente:

Ahora editaremos todos los ficheros que instalan las dependencias necesarias. Todos a aparecen bajo la etiqueta de bundle-dependencia

Una vez ya preparado todo ya sea sin modificar el script instalador y usando internet, modificándolo para que use wget con internet o modificándola para su uso offline procederemos a instalarlo.

Nota: El siguiente procedimiento se usará para todos los hosts (master o slaves) en los que se vaya a instalar Netdata.

Ejecutamos el script de instalación. La opción especificada “–disable-go” evitará que se intente descargar e instalar de internet el paquete «go.d.plugin», mientras que la opción “–disable-telemetry” evitará que se envíen estadísticas a Google.

Debe devolver algo como esto:

Presionamos ENTER para continuar con la instalación. Al finalizar debe devolver algo como esto:

Si se desea desinstalar Netdata, para actualizarlo a una versión superior, solo debe ejecutar la siguiente línea y seguir las instrucciones:

Si durante el proceso de corrida del script ven algún error fíjense bien cual es para luego arreglarlo y volver a correr el script. Casi siempre es errores de descarga en el caso de hacerlo online o errores de nombre en el caso de hacerlo offline. Tenga siempre en cuenta que cuando corre el script usando la variante offline se borran algunas de las carpetas y ficheros que copiamos en tmp, por lo q si desean correrlo de nuevo tendrá que crearlas y mover los ficheros otra vez.

Hay que destacar que el servicio de netdata al menos en esta versión y usando el script de instalación siempre nos dará error. Puede verlo al final de la corrida del script como se intenta levantarlo sin lograrlo. Por lo que, si reiniciamos el sistema, netdata no iniciara bien. Así luce el servicio:

Por lo que para poder iniciarlo usaremos siempre su binario que se encuentra en /usr/sbin/

Para ello usaremos cron:

NOTA: El script de instalación ofrece una opción para automatizar el servicio con la ejecución del mismo al iniciar el sistema; pero en este caso lo haremos nosotros mismos.

Agregar lo siguiente:

Reiniciamos el cron:

Si accedemos al siguiente enlace, podremos comprobar que ya se encuentra funcionando en su configuración por defecto:

http://netdata.empresa.midominio.cu:19999

http://IPnetdata:19999

Hasta aquí, usted cuenta con un servicio de Netdata para visualizar en los “dashboard” de la web, las métricas del servidor local, sin embargo, a continuación, se explica cómo configurar una estructura master-slave. En la arquitectura master-slave, el Netdata de los servidores clientes, enviarán sus métricas al servidor de Netdata master.

Como extra les mostrare como configurar las notificaciones de alarma. Si poseen una infraestructura mala que siempre lleva al límite a sus servidores pues su correo será invadido con miles de alarmas enviadas desde sus netdatas slaves. Debido a que cuando instala sus proxmox usted define el correo del usuario root muchas veces con su propio correo pues recibirá por parte de netdata las notificaciones de alarma. Por defecto netdata envía las notificaciones a root. En /usr/lib/netdata/conf.d encontraremos todas las configuraciones por defecto de netdata. Y ya conocemos que para configurarlo usamos edit-config el cual usa el editor interno del sistema y luego mueve el fichero a /etc/netdata una vez terminado de editar

La configuración que usaremos para el tema de las notificaciones será health_alarm_notify.conf

Buscamos las siguientes líneas:

Cambie el valor de DEFAULT_RECIPIENT_EMAIL a la dirección de correo electrónico en la que le gustaría recibir notificaciones.

Ahora si queremos deshabilitar por completo el envío de estas alarmas debemos modificar lo siguiente:

Esta opción esta justo encima de DEFAULT_RECIPIENT_EMAIL. También puede configurar por separado cada fichero de configuración de salud. Por ejemplo:

Cada archivo de configuración de salud contiene una o más entidades de salud, que siempre comienzan con alarm: o template:. Por ejemplo, aquí está la primera entidad de salud en health.d/cpu.conf:

Para ajustar esta alarma para que active las alarmas de advertencia y críticas con un uso de CPU más bajo, cambie las líneas de advertencia y crítica a los valores que elija. Por ejemplo:

Guarde el archivo y vuelva a cargar la configuración de salud de Netdata para que sus cambios estén activos.

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 5 / 5. Recuento de votos: 6

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Sobre Alexander Rivas Alpizar 53 artículos
Administrador de Redes EMPRESTUR Cienfuegos

Sé el primero en comentar

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*