Cómo instalar y supervisar servicios con la herramienta de supervisión Netdata en Debian 12
Netdata es un sistema de supervisión de código abierto para sistemas operativos basados en Linux. Proporciona rendimiento y supervisión en tiempo real mediante paneles de control bonitos y detallados. Ofrece cientos de herramientas para supervisar servidores, CPU, uso de memoria, procesos del sistema, uso de disco, redes IPv4 e IPv6, cortafuegos del sistema y aplicaciones como Nginx, MySQL, MongoDB, Redis, ElasticSearch, PostgreSQL, PHP-FPM, etc. Se integra con otras herramientas de monitorización como Prometheus, Graphite, Kafka, Grafana, etc.
Este tutorial te mostrará cómo instalar y supervisar varios servicios utilizando Netdata en un servidor Debian 12. También lo utilizarás para hacer un seguimiento de las métricas de una pila LEMP y un motor Docker.
Requisitos previos
- Un servidor con Debian 12.
- Un usuario no root con privilegios sudo.
- Un Nombre de Dominio Completamente Cualificado (FQDN) como
netdata.example.com
que apunte a tu servidor. - Una cuenta SMTP con un servicio de correo electrónico como Amazon SES o Mailgun.
- Asegúrate de que todo está actualizado.
$ sudo apt update $ sudo apt upgrade
- Pocos paquetes que necesite tu sistema.
$ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y
Puede que algunos de estos paquetes ya estén instalados en tu sistema.
Paso 1 – Configurar el cortafuegos
El primer paso es configurar el cortafuegos. Debian viene con ufw (Uncomplicated Firewall) por defecto.
Comprueba si el cortafuegos se está ejecutando.
$ sudo ufw status
Obtendrás la siguiente salida.
Status: inactive
Permite el puerto SSH para que el cortafuegos no rompa la conexión actual al activarlo.
$ sudo ufw allow OpenSSH
Permite también los puertos HTTP y HTTPS.
$ sudo ufw allow http $ sudo ufw allow https
Habilita el cortafuegos
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Comprueba de nuevo el estado del cortafuegos.
$ sudo ufw status
Deberías ver un resultado similar.
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6)
Paso 2 – Instala NetData
Netdata viene con un script instalador que puede funcionar en cualquier distribución de Linux. Ejecuta el siguiente comando para descargar el script de instalación.
$ wget -O /tmp/netdata-kickstart.sh https://my-netdata.io/kickstart.sh
Ejecuta el script de instalación con el siguiente comando.
$ sudo sh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry
La bandera --stable-channel
instala la versión estable de Netdata. La bandera --disable-telemetry
impide que Netdata envíe estadísticas anónimas a su servidor. Hay otras banderas que puedes utilizar para personalizar tu instalador.
Introduce Y
para confirmar que has añadido el repositorio de Netdata y lo has instalado en tu servidor. Deberías recibir el siguiente mensaje si la instalación se ha realizado correctamente.
Successfully installed the Netdata Agent. Official documentation can be found online at https://learn.netdata.cloud/docs/. Looking to monitor all of your infrastructure with Netdata? Check out Netdata Cloud at https://app.netdata.cloud. Join our community and connect with us on: - GitHub: https://github.com/netdata/netdata/discussions - Discord: https://discord.gg/5ygS846fR6 - Our community forums: https://community.netdata.cloud/ [/root]# rm -rf /tmp/netdata-kickstart-wH4pebXveT OK
El instalador de Netdata habilita e inicia automáticamente el servicio. Comprueba el estado del servicio.
$ sudo systemctl status netdata ? netdata.service - Real time performance monitoring Loaded: loaded (/lib/systemd/system/netdata.service; enabled; preset: enabled) Active: active (running) since Thu 2023-08-24 10:26:56 UTC; 42s ago Main PID: 2811 (netdata) Tasks: 82 (limit: 1107) Memory: 108.2M CPU: 4.271s CGroup: /system.slice/netdata.service ??2811 /usr/sbin/netdata -D -P /var/run/netdata/netdata.pid ??2822 /usr/sbin/netdata --special-spawn-server ??3127 bash /usr/libexec/netdata/plugins.d/tc-qos-helper.sh 1 ??3137 /usr/libexec/netdata/plugins.d/go.d.plugin 1 ??3142 /usr/libexec/netdata/plugins.d/ebpf.plugin 1 ??3145 /usr/libexec/netdata/plugins.d/nfacct.plugin 1 ??3149 /usr/libexec/netdata/plugins.d/systemd-journal.plugin 1 ??3155 /usr/libexec/netdata/plugins.d/debugfs.plugin 1 ??3159 /usr/libexec/netdata/plugins.d/apps.plugin 1 Aug 24 10:26:58 netdata ebpf.plugin[3142]: set name of thread 3188 to EBPF SOFTIRQ .......
Si el servicio no está iniciado o habilitado, puedes hacerlo utilizando el siguiente comando.
$ sudo systemctl enable netdata --now
Ejecuta el siguiente comando para comprobar los puertos abiertos y el proceso que los utiliza.
$ sudo ss -plnt | grep netdata
Deberías obtener una salida similar. Netdata utiliza el puerto 19999 para su panel de control, como se ve en la salida siguiente. Netdata utiliza el puerto 8125 para recibir estadísticas de otras aplicaciones.
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 4096 0.0.0.0:19999 0.0.0.0:* users:(("netdata",pid=2811,fd=8)) LISTEN 0 4096 127.0.0.1:8125 0.0.0.0:* users:(("netdata",pid=2811,fd=47)) LISTEN 0 4096 [::1]:8125 [::]:* users:(("netdata",pid=2811,fd=46)) LISTEN 0 4096 [::]:19999 [::]:* users:(("netdata",pid=2811,fd=9))
Paso 3 – Instalar Nginx
Debian 12 incluye una versión antigua de Nginx. Para instalar la última versión, tienes que descargar el repositorio oficial de Nginx.
Importa la clave de firma de Nginx.
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Añade el repositorio de la versión estable de Nginx.
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ http://nginx.org/packages/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Actualiza los repositorios del sistema.
$ sudo apt update
Instala las utilidades de Nginx y Apache. El paquete de utilidades de Apache es necesario para la utilidad htpasswd
.
$ sudo apt install nginx apache2-utils
Verifica la instalación. En los sistemas Debian, el siguiente comando sólo funcionará con sudo
.
$ sudo nginx -v nginx version: nginx/1.24.0
Inicia el servidor Nginx.
$ sudo systemctl start nginx
Comprueba el estado del servicio.
$ sudo systemctl status nginx ? nginx.service - nginx - high performance web server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled) Active: active (running) since Thu 2023-08-24 11:36:34 UTC; 4s ago Docs: https://nginx.org/en/docs/ Process: 3657 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 3658 (nginx) Tasks: 2 (limit: 1107) Memory: 1.8M CPU: 12ms CGroup: /system.slice/nginx.service ??3658 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf" ??3659 "nginx: worker process"
Paso 4 – Instalar SSL
Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot utilizando el repositorio de Debian u obtener la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd.
Debian 12 no viene con Snapd instalado. Instala el paquete Snapd.
$ sudo apt install snapd
Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd está actualizada.
$ sudo snap install core && sudo snap refresh core
Instala Certbot.
$ sudo snap install --classic certbot
Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin
.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Comprueba si Certbot funciona correctamente.
$ certbot --version certbot 2.6.0
Genera el certificado SSL.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d netdata.example.com
El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/netdata.example.com
de tu servidor.
Genera un certificado de grupo Diffie-Hellman.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Comprueba el servicio programador de renovación de Certbot.
$ sudo systemctl list-timers
Encontrarás snap.certbot.renew.service
como uno de los servicios programados para ejecutarse.
NEXT LEFT LAST PASSED UNIT ACTIVATES ..... Thu 2023-08-24 13:40:00 UTC 1h 59min left - - snap.certbot.renew.timer snap.certbot.renew.service Thu 2023-08-24 18:47:23 UTC 7h left Thu 2023-08-24 09:30:41 UTC 2h 9min ago apt-daily.timer apt-daily.service Fri 2023-08-25 00:00:00 UTC 12h left - - dpkg-db-backup.timer dpkg-db-backup.service
Realiza una ejecución en seco del proceso para comprobar si la renovación SSL funciona correctamente.
$ sudo certbot renew --dry-run
Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.
Paso 5 – Configurar Nginx
Crea y abre el archivo /etc/nginx/conf.d/netdata.conf
para editarlo.
$ sudo nano /etc/nginx/conf.d/netdata.conf
Pega en él el siguiente código.
# Define netdata upstream upstream netdata { server 127.0.0.1:19999; keepalive 64; } # Redirect all non-encrypted to encrypted server { listen 80; listen [::]:80; server_name netdata.example.com; return 301 https://netdata.example.com$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name netdata.example.com; ssl_certificate /etc/letsencrypt/live/netdata.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/netdata.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/netdata.example.com/chain.pem; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_prefer_server_ciphers off; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s; resolver_timeout 2s; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; access_log /var/log/nginx/netdata.example.com.access.log main; error_log /var/log/nginx/netdata.example.com.error.log; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_pass http://netdata; proxy_http_version 1.1; proxy_pass_request_headers on; proxy_set_header Connection "keep-alive"; proxy_store off; auth_basic "NetData Private Area"; auth_basic_user_file /etc/nginx/.htpasswd; } }
Una vez terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Abre el archivo /etc/nginx/nginx.conf
para editarlo.
$ sudo nano /etc/nginx/nginx.conf
Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;
.
server_names_hash_bucket_size 64;
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Ejecuta el siguiente comando para generar un archivo de contraseñas para habilitar la autenticación HTTP.
$ sudo htpasswd -c /etc/nginx/.htpasswd netadmin New password: Re-type new password: Adding password for user netadmin
Verifica la sintaxis del archivo de configuración de Nginx.
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Reinicia el servicio Nginx para habilitar la nueva configuración.
$ sudo systemctl restart nginx
Paso 6 – Acceder y utilizar el Panel de Netdata
Deberías poder acceder a Netdata a través de la URL https://netdata.example.com
. La primera vez que accedas, se te pedirán tus datos de autenticación HTTP.
Obtendrás el siguiente panel de control.
Puedes pausar, detener e iniciar la monitorización en cualquier momento utilizando el botón Reproducir del panel de control.
Puedes acceder a varios paneles haciendo clic en las opciones de la barra lateral derecha.
Por defecto, Netdata puede realizar un seguimiento correcto de tu zona horaria. Si no lo hace, haz clic en el temporizador y selecciona la zona horaria correcta en la ventana emergente para cambiarla.
Paso 7 – Configurar NetData
Netdata almacena su configuración principal en el archivo /etc/netdata/netdata.conf
. Puedes ver esta configuración visitando la URL https://netdata.example.com/netdata.conf
en tu navegador.
El archivo está dividido en varias secciones, como [global], [db], [web], [registro], etc. La configuración por defecto es suficiente para empezar. Netdata recopila datos utilizando dos tipos de plugins:
- los pluginsinternos están escritos en lenguaje C y se ejecutan como hilos dentro del demonio
netdata
. - Los pluginsexternos están escritos en varios lenguajes, como Python, Go, etc., y el demonio
netdata
los genera como procesos independientes de larga duración. Se comunican con el demonio Netdata mediantepipes
.
Configurar el uso de memoria de NetData
El uso de RAM de NetData se decide en función del tiempo que quieras conservar los datos del gráfico grabado antes de que se pierdan.
- 3600 segundos o 1 hora de retención de datos de gráficos utiliza 15 MB de RAM.
- 7200 segundos o 2 horas de retención de datos de gráficos utiliza 30 MB de RAM.
- 14400 segundos o 4 horas de retención de datos del gráfico utilizan 60 MB de RAM.
Cada vez que duplicas el tiempo de retención de datos del gráfico, también se duplican los requisitos de RAM. Estos requisitos de RAM se basan en el número de gráficos que utiliza el panel de acciones. Añadir más gráficos y aplicaciones cambiará estas estimaciones.
Abre el archivo de configuración de Netdata.
$ sudo nano /etc/netdata/netdata.conf
Introduce la línea history = 14400
en la sección [global]
.
[global] run as user = netdata # default storage size - increase for longer data retention page cache size = 32 dbengine multihost disk space = 256 history = 14400
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Desactivar la telemetría
Por defecto, Netdata recopila información anónima de uso utilizando una plataforma de análisis de productos, Posthog. Cada vez que se inicia o se detiene el demonio Netdata, Netdata utiliza el script de estadísticas anónimas para recopilar la siguiente información del sistema y enviársela a sí mismo.
- Versión de Netdata
- Nombre del SO, versión, id, id_like
- Nombre del núcleo, versión, arquitectura
- Tecnología de virtualización
- Tecnología de contenedorización
- Información adicional sobre fallos del cliente Netdata.
Desactivamos la Telemetría durante la instalación, pero si no lo hiciste, puedes hacerlo ahora. Crea un archivo vacío llamado .opt-out-from-anonymous-statistics
en el directorio Netdata.
$ sudo touch /etc/netdata/.opt-out-from-anonymous-statistics
Reinicia Netdata para activar el cambio.
$ sudo systemctl restart netdata
Almacenamiento a largo plazo
Netdata utiliza por defecto la RAM y el disco de tu sistema para almacenar datos históricos. El proceso predeterminado de Netdata recoge unas 2000 métricas por segundo, lo que significa que la configuración predeterminada almacenará en la RAM y el disco las métricas de unos dos días.
Para almacenar más métricas, tienes las dos opciones siguientes:
- Configurar Netdata para que utilice más memoria RAM y espacio en disco
- Archivar las métricas en una base de datos externa
En este tutorial sólo trataremos la primera opción. Para la segunda opción, debes consultar la documentación oficial de Netdata.
Configurar Netdata para que utilice más RAM y espacio en disco
Abre el archivo /etc/netdata/netdata.conf
para editarlo.
$ sudo nano /etc/netdata/netdata.conf
Configura las siguientes líneas en la sección [global]
.
[global] ... page cache size = 32 dbengine multihost disk space = 256
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
El tamaño de la caché de página determina la cantidad de RAM utilizada, y la variable dbengine multihost disk space
determina el uso del disco. Por defecto, Netdata utiliza 32 MB de RAM y 256 MB de espacio en disco. Puedes cambiar cualquiera de los dos valores a tu gusto.
Puedes utilizar la calculadora Métrica de Almacenamiento de Netdata para decidir cuánta RAM y espacio en disco necesitas.
Reducir la frecuencia de recogida
Puedes optimizar el rendimiento de Netdata aumentando el tiempo entre la recogida de métricas. Por defecto, Netdata recopila métricas cada segundo.
Para cambiarlo, abre el archivo de configuración de Netdata para editarlo.
$ sudo nano /etc/netdata/netdata.conf
Introduce la siguiente línea en la sección [global]
. Esto aumenta la frecuencia a 5 segundos.
[global] ... update every = 5
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Paso 8 – Configurar las notificaciones de Slack
El primer paso es crear una aplicación Slack y conectarla a un canal específico de tu espacio de trabajo para configurar las Notificaciones Slack.
Visita la página de la API de Slack y haz clic en el botón Crear App para empezar a crear una aplicación.
Haz clic en el enlace Desde cero para crear la app.
Selecciona un nombre para tu aplicación y elige el espacio de trabajo en el que quieres que aparezca tu App. Si no quieres asociar tu app al espacio de trabajo existente, puedes crear otro y volver a este paso.
Abre la página del Webhook entrante seleccionando la opción en el menú Características de la barra lateral izquierda y, a continuación, activa el webhook.
Haz clic en el botón Añadir nuevo webhook al espacio de trabajo, en la parte inferior de la página, y selecciona tu espacio de trabajo y el canal de destino de las notificaciones.
Haz clic en el botón Permitir para continuar. Vuelve a la página de Webhooks Entrantes y copia la URL del Webhook.
Vuelve al terminal y cambia al directorio /etc/netdata
.
$ cd /etc/netdata
Netdata proporciona un script edit-config
para editar y crear archivos de configuración de Netdata. Ejecuta el siguiente archivo para crear y abrir el archivo health_alarm_notify.conf
utilizando el editor predeterminado de tu sistema.
$ sudo ./edit-config health_alarm_notify.conf
Desplázate hasta la sección siguiente.
# Enable slack notification SEND_SLACK="YES" # Select the slack webhook SLACK_WEBHOOK_URL="https://hooks.slack.com/services/xxxxxxx/xxxxxx/xxxxxxxxxxxxx" # Default channel for notification DEFAULT_RECIPIENT_SLACK="notifications"
Asegúrate de que la variable SEND_SLACK
está establecida en sí. Pega la URL del webhook copiada en la variable SLACK_WEBHOOK_URL
. Introduce el nombre de tu canal para la variable DEFAULT_RECIPIENT_SLACK
.
Si tu editor es Vim, pulsa la tecla Escape para salir de la edición, escribe 😡 y pulsa la tecla Intro para guardar el archivo y salir del editor.
Si tu editor es Nano, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Reinicia Netdata para aplicar los cambios.
$ sudo systemctl restart netdata
Paso 9 – Configurar las notificaciones por correo electrónico
Netdata utiliza sendmail
por defecto para enviar notificaciones por correo electrónico, pero gestionar un servidor de correo electrónico no es tarea fácil. Netdata no admite SMTP, pero puedes instalar un paquete llamado msmtp
client. Te permite enviar correo a un servidor SMTP.
Instala msmtp
.
$ sudo apt install msmtp
Crea y abre el archivo de configuración de msmtp
.
$ sudo nano /etc/msmtprc
Pega en él el siguiente código.
# Set default values for all following accounts. defaults # Use the mail submission port 587 instead of the SMTP port 25. port 587 # Always use TLS. tls on # The SMTP server of your ISP account ses host email-smtp.<location>.amazonaws.com from [email protected] auth on user <yoursesusername> password <yoursespassword> # Set default account to isp account default: ses
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Netdata proporciona un script edit-config
para editar y crear archivos de configuración de Netdata. Ejecuta el siguiente archivo para crear y abrir el archivo health_alarm_notify.conf
utilizando el editor predeterminado de tu sistema.
$ sudo /etc/netdata/edit-config health_alarm_notify.conf
Desplázate hasta la siguiente sección e introduce la ruta al archivo msmtp
.
# external commands # The full path to the sendmail command. # If empty, the system $PATH will be searched for it. # If not found, email notifications will be disabled (silently). sendmail="/usr/bin/msmtp"
Localiza la siguiente sección e introduce los datos del remitente y del destinatario y asegúrate de que el envío de correo electrónico está activado.
# email global notification options # multiple recipients can be given like this: # "[email protected] [email protected] ..." # the email address sending email notifications # the default is the system user netdata runs as (usually: netdata) # The following formats are supported: # EMAIL_SENDER="user@domain" # EMAIL_SENDER="User Name <user@domain>" # EMAIL_SENDER="'User Name' <user@domain>" # EMAIL_SENDER="\"User Name\" <user@domain>" EMAIL_SENDER="Server Admin <[email protected]>" # enable/disable sending emails SEND_EMAIL="YES" # if a role recipient is not configured, an email will be send to: DEFAULT_RECIPIENT_EMAIL="[email protected]" # to receive only critical alarms, set it to "root|critical"
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Reinicia Netdata para aplicar los cambios.
$ sudo systemctl restart netdata
Paso 10 – Prueba de los canales de notificación
Probemos si funcionan las notificaciones por correo electrónico. Inicia sesión como el usuario del sistema netdata
creado durante la instalación.
$ sudo su -s /bin/bash netdata
Ejecuta el script de notificación de alarma para enviar una notificación de prueba.
$ /usr/libexec/netdata/plugins.d/alarm-notify.sh test
Recibirás la siguiente salida.
# SENDING TEST WARNING ALARM TO ROLE: sysadmin 2023-08-24 12:56:00: alarm-notify.sh: INFO: sent email notification for: netdata test.chart.test_alarm is WARNING to '[email protected]' # OK # SENDING TEST CRITICAL ALARM TO ROLE: sysadmin 2023-08-24 12:56:03: alarm-notify.sh: INFO: sent email notification for: netdata test.chart.test_alarm is CRITICAL to '[email protected]' # OK # SENDING TEST CLEAR ALARM TO ROLE: sysadmin 2023-08-24 12:56:06: alarm-notify.sh: INFO: sent email notification for: netdata test.chart.test_alarm is CLEAR to '[email protected]' # OK
Sal del usuario.
$ exit.
Abre tu aplicación Slack, y deberías haber recibido las siguientes alertas.
También deberías recibir tres correos electrónicos sobre los avisos de prueba.
Paso 11 – Configurar la Monitorización del Sistema
Ahora que hemos configurado y probado las notificaciones, vamos a configurar y probar las notificaciones para el sistema, como el uso de la CPU.
Ejecuta los siguientes comandos para crear y abrir el archivo de configuración de la CPU.
$ sudo /etc/netdata/edit-config health.d/cpu.conf
Cambia los valores de las opciones warn y crit en 10min_cpu_usage como se muestra a continuación.
warn: $this > (($status >= $WARNING) ? (60) : (70)) crit: $this > (($status == $CRITICAL) ? (75) : (85))
Guarda el archivo y sal del editor.
La configuración anterior enviará una advertencia si el uso de la CPU cae entre el 60 y el 70% y una advertencia crítica cuando el uso de la CPU caiga entre el 75 y el 85%.
Reinicia el servicio Netdata.
$ sudo systemctl restart netdata
Probemos la configuración instalando la aplicación Estrés.
$ sudo apt install stress
Ejecuta el siguiente comando para aumentar el uso de CPU de tu servidor.
$ stress --cpu 2
Deja que el comando se ejecute durante 5-10 minutos, y recibirás mensajes de Alto uso de CPU. Cuando recibas esos mensajes, vuelve al terminal y sal del comando pulsando Ctrl + Z.
Tras detener el servicio, recibirás una notificación de recuperación de CPU en Slack.
Paso 12 – Configurar la monitorización de Nginx
Una de las aplicaciones más monitorizadas con Netdata es el servidor y los paquetes SQL. Vamos a monitorizar el servidor Nginx utilizando Netdata.
Para habilitar la monitorización del servidor Nginx, necesitamos utilizar el módulo ngx_http_stub_status_module
. Suele venir preinstalado con Nginx. Puedes comprobar si el módulo está presente. El comando sudo
es necesario en el sistema Debian.
$ sudo nginx -V 2>&1 | grep -o with-http_stub_status_module with-http_stub_status_module
Si no obtienes respuesta, significa que tu instalación de Nginx no admite la función. En ese caso, tendrás que compilar Nginx.
Abre el archivo de configuración por defecto de Nginx /etc/nginx/conf.d/default.conf
para editarlo. La ubicación del archivo es diferente porque hemos instalado Nginx desde su repositorio oficial. Si instalas Nginx desde el repositorio del SO, entonces la ubicación del archivo será /etc/nginx/nginx.conf
.
$ sudo nano /etc/nginx/conf.d/default.conf
Introduce el siguiente código dentro del bloque del servidor, antes de la última llave de cierre.
# Enable module stub_status location /stub_status { stub_status; allow 127.0.0.1; #only allow requests from localhost deny all; #deny all other hosts }
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Verifica la configuración de Nginx.
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Reinicia el servidor Nginx.
$ sudo systemctl restart nginx
Reinicia el servicio Netdata.
$ sudo systemctl restart netdata
Deberías ver los detalles de la conexión Nginx en tu panel de Netdata.
Supervisar los registros de Nginx
Netdata también puede supervisar los registros de acceso de Nginx. Para ello, cambia al directorio Netdata.
$ cd /etc/netdata
Ejecuta el siguiente comando para generar un archivo de configuración para supervisar los Registros de Acceso.
$ sudo ./edit-config go.d/web_log.conf
Desplázate hasta la parte inferior del archivo y encuentra la siguiente sección.
# ------------------------------------------- # nginx log on various distros # debian, arch nginx_log: name: 'nginx' path: '/var/log/nginx/access.log' # gentoo nginx_log2: name: 'nginx_site' path: '/var/log/nginx/localhost.access_log'
Cambia la ruta para supervisar los respectivos archivos de registro. Puedes añadir tantas secciones para supervisar tantos hosts y sus archivos de registro de acceso. Nuestro archivo de configuración tiene el siguiente aspecto.
# ------------------------------------------- # nginx log on various distros # debian, arch nginx_log: name: 'nginx' path: '/var/log/nginx/access.log' nginx_log2: name: 'nginx_site1' path: '/var/log/nginx/site1.access_log' nginx_log3: name: 'nginx_site2' path: '/var/log/nginx/site2.access_log' nginx_log4: name: 'nginx_site3' path: '/var/log/nginx/site3.access_log'
Guarda y sal del editor.
Para acceder a los archivos de registro, Netdata necesita permiso para acceder al directorio. Por defecto, el grupo de sistema adm
tiene permiso para acceder a los archivos de registro. Para dar acceso a Netdata, necesitamos añadir el usuario netdata
al grupo adm
.
$ sudo usermod -aG adm netdata
Reinicia Nginx y el servicio Netdata.
$ sudo systemctl restart nginx netdata
Recarga el panel de Netdata para ver los datos de tus archivos de registro.
Paso 13 – Configurar la monitorización de MySQL/MariaDB
Instalaremos MariaDB para nuestro tutorial. Para ello utilizaremos el repositorio de MariaDB.
Importa la clave GPG de MariaDB.
$ sudo curl -o /usr/share/keyrings/mariadb-keyring.pgp 'https://mariadb.org/mariadb_release_signing_key.pgp'
Crea y abre el archivo del repositorio MariaDB.
$ sudo nano /etc/apt/sources.list.d/mariadb.sources
Pega en él el siguiente código.
# MariaDB 10.11 repository list - created 2023-09-05 11:18 UTC # https://mariadb.org/download/ X-Repolib-Name: MariaDB Types: deb # deb.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details. # URIs: https://deb.mariadb.org/10.11/debian URIs: https://mirrors.aliyun.com/mariadb/repo/10.11/debian Suites: bookworm Components: main Signed-By: /usr/share/keyrings/mariadb-keyring.pgp
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Actualiza la lista de repositorios del sistema.
$ sudo apt update
Instala el servidor MariaDB.
$ sudo apt install mariadb-server
MariaDB está activado y en funcionamiento. Comprueba el estado del servicio.
$ sudo systemctl status mariadb ? mariadb.service - MariaDB 10.11.5 database server Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; preset: enabled) Drop-In: /etc/systemd/system/mariadb.service.d ??migrated-from-my.cnf-settings.conf Active: active (running) since Tue 2023-09-05 11:44:17 UTC; 20s ago Docs: man:mariadbd(8) https://mariadb.com/kb/en/library/systemd/ Process: 9396 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS) Process: 9397 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS) Process: 9399 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ] && systemctl set-environment _WSREP_START_POSITION=$VAR > Process: 9440 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS) Process: 9442 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS) Main PID: 9428 (mariadbd) Status: "Taking your SQL requests now..." Tasks: 13 (limit: 1107) Memory: 111.8M CPU: 663ms CGroup: /system.slice/mariadb.service ??9428 /usr/sbin/mariadbd
Inicia el script de instalación segura de MySQL. El nombre del archivo es diferente en el caso de MariaDB.
$ sudo mariadb-secure-installation .... Enter current password for root (enter for none): (Press Enter) .... Switch to unix_socket authentication [Y/n] Y (Type Y and Press Enter) .... Change the root password? [Y/n] Y (Type Y and Press Enter) New password: Re-enter new password: Password updated successfully! .... Remove anonymous users? [Y/n] Y (Type Y and Press Enter) .... Disallow root login remotely? [Y/n] Y (Type Y and Press Enter) .... Remove test database and access to it? [Y/n] Y (Type Y and Press Enter) .... Reload privilege tables now? [Y/n] Y (Type Y and Press Enter) .... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
Abre el archivo /etc/mysql/mariadb.conf.d/50-server.cnf
para editarlo.
$ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Busca la sección [mariadb]
en el archivo y pega la siguiente línea como se muestra a continuación para habilitar el plugin Userstats. Esta configuración sólo funciona en MariaDB y no en el servidor MySQL.
[mariadb] userstat = 1
Accede al shell de MySQL.
$ sudo mysql
Ejecuta los siguientes comandos para crear un usuario Netdata SQL y darle privilegios para realizar un seguimiento de las estadísticas de MySQL.
MariaDB> create user 'netdata'@'localhost'; MariaDB> GRANT USAGE, REPLICATION CLIENT, PROCESS ON *.* TO 'netdata'@'localhost'; MariaDB> FLUSH PRIVILEGES; MariaDB> exit
Crea el archivo de configuración MySQL para Netdata.
$ sudo /etc/netdata/edit-config go.d/mysql.conf
Se abrirá un archivo con todas las opciones posibles. Si estás satisfecho, guarda y cierra el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Reinicia el servidor MariaDB.
$ sudo systemctl restart mariadb
Reinicia el servicio Netdata.
$ sudo systemctl restart netdata
El panel de MariaDB/MySQL debería empezar a aparecer en el panel de Netdata.
Paso 14 – Configurar la monitorización de PHP-FPM
Puedes monitorizar una o más instancias de PHP-FPM utilizando Netdata. Para nuestro tutorial, instalaremos PHP 8.2 y activaremos su monitorización.
Debian 12 incluye PHP 8.2 por defecto. Pero para estar siempre en la última versión de PHP utilizaremos el repositorio PHP de Ondrej.
En primer lugar, importa la clave GPG de PHP del repositorio de Sury.
$ sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
Añade el repositorio PHP de Ondrej Sury.
$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
Actualiza la lista de repositorios del sistema.
$ sudo apt update
Ahora, puedes instalar cualquier versión de PHP.
$ sudo apt install php8.2-fpm php8.2-cli php8.2-mbstring
Verifica la instalación.
$ php --version PHP 8.2.10 (cli) (built: Sep 4 2023 08:12:29) (NTS) Copyright (c) The PHP Group Zend Engine v4.2.10, Copyright (c) Zend Technologies with Zend OPcache v8.2.10, Copyright (c), by Zend Technologies
Configurar PHP
Abre el archivo /etc/php/8.2/fpm/pool.d/www.conf
.
$ sudo nano /etc/php/8.2/fpm/pool.d/www.conf
Necesitamos establecer el usuario/grupo Unix de los procesos PHP a nginx. Busca las líneas user=www-data
y group=www-data
en el archivo y cámbialas por nginx
.
.... ; Unix user/group of the child processes. This can be used only if the master ; process running user is root. It is set after the child process is created. ; The user and group can be specified either by their name or by their numeric ; IDs. ; Note: If the user is root, the executable needs to be started with ; --allow-to-run-as-root option to work. ; Default Values: The user is set to master process running user by default. ; If the group is not set, the user's group is used. user = nginx group = nginx ....
Busca también las líneas listen.owner=www-data
y listen.group=www-data
en el archivo y cámbialas por nginx
.
listen.owner = nginx listen.group = nginx
Desplázate hacia abajo en el archivo para localizar la opción ;pm.status_path = /status
. Descomenta la línea eliminando el punto y coma que hay delante de ella, como se muestra a continuación.
.... ; Note: There is a real-time FPM status monitoring sample web page available ; It's available in: /usr/share/php/8.2/fpm/status.html ; ; Note: The value must start with a leading slash (/). The value can be ; anything, but it may not be a good idea to use the .php extension or it ; may conflict with a real PHP file. ; Default Value: not set pm.status_path = /status ....
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Reinicia el proceso PHP-fpm.
$ sudo systemctl restart php8.2-fpm
Añade la configuración PHP a Nginx
Abre el archivo de configuración por defecto de Nginx /etc/nginx/conf.d/default.conf
para editarlo.
$ sudo nano /etc/nginx/conf.d/default.conf
Introduce el siguiente código dentro del bloque del servidor, antes de la última llave de cierre.
# define PHP-FPM monitoring location ~ ^/(status|ping)$ { allow 127.0.0.1; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; include fastcgi_params; fastcgi_pass unix:/run/php/php8.2-fpm.sock; # Depends on the PHP Version and OS Distro }
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Verifica la configuración de Nginx.
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Reinicia el servidor Nginx.
$ sudo systemctl restart nginx
Reinicia el servicio Netdata.
$ sudo systemctl restart netdata
Vuelve a cargar el panel de Netdata y deberías ver las estadísticas de PHP-FPM.
Paso 15 – Configurar el motor Docker y la monitorización de contenedores
Netdata puede monitorizar tanto el motor Docker como los contenedores Docker. También puede monitorizar las aplicaciones que se ejecutan dentro de estos contenedores, pero no lo trataremos en este tutorial.
Primero instalemos Docker.
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg $ echo \ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null $ sudo apt update $ sudo apt install docker-ce docker-ce-cli containerd.io $ sudo usermod -aG docker ${USER} $ su - ${USER}
El servicio Docker está activado e iniciado. Puedes comprobar el estado del servicio.
$ sudo systemctl status docker
Para monitorizar el motor Docker, necesitas habilitar la función de métricas de Docker.
Crea y abre el archivo /etc/docker/daemon.json
para editarlo.
$ sudo nano /etc/docker/daemon.json
Pega en él el siguiente código.
{ "metrics-addr" : "127.0.0.1:9323", "experimental" : true }
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite. Esta URL la utiliza Prometheus para hacer un seguimiento de las estadísticas del motor Docker.
Crea un archivo de configuración para el recopilador Docker.
$ sudo /etc/netdata/edit-config go.d/docker.conf
Crea otro archivo de configuración para el motor Docker para Prometheus.
$ sudo /etc/netdata/edit-config go.d/docker_engine.conf
Reinicia los servicios Netdata y Docker.
$ sudo systemctl restart docker netdata
Carga de nuevo el panel de Netdata y podrás ver las estadísticas de Docker.
Verás otra entrada llamada Prometheus Metrics
en tu tablero porque la opción de métricas se hizo para el tablero de Prometheus.
El siguiente paso es supervisar el contenedor Docker. Netdata utiliza grupos de control, denominados cgroups
para supervisar los contenedores Docker. Los grupos de control son una función de Linux que limita y rastrea el uso de recursos de una colección de procesos, en este caso, contenedores. Si tienes contenedores Docker en ejecución cuando instalas Netdata, se rastrean automáticamente. Sin embargo, si ejecutas un contenedor después de instalar Netdata, tendrás que reiniciarlo.
Ejecuta un contenedor de prueba.
$ docker container run -d nginx
Comprueba el estado del contenedor.
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9d6cde479224 nginx "/docker-entrypoint.…" 7 seconds ago Up 5 seconds 80/tcp zealous_knuth
El nombre del contenedor es zealous_knuth
, como se muestra. Como el contenedor se ha iniciado después de instalar Netdata, reinicia el servicio.
$ sudo systemctl restart netdata
Carga el Panel de Control, y deberías poder ver las estadísticas del Contenedor. Puedes ver el ID del contenedor en las estadísticas.
Conclusión
Con esto concluye nuestro tutorial sobre la instalación y el uso del sistema de monitorización Netdata para monitorizar varias aplicaciones como Nginx, MySQL, PHP-FPM y Docker en un servidor Debian 12. Si tienes alguna pregunta, publícala en los comentarios a continuación.