Cómo instalar y monitorizar servicios con la herramienta de monitorización Netdata en Rocky Linux 8

Netdata es un sistema de monitorización de código abierto para sistemas operativos basados en Linux. Proporciona rendimiento y monitorización en tiempo real mediante bonitos y detallados cuadros de mando. Ofrece cientos de herramientas para supervisar los servidores, la CPU, el uso de la memoria, los procesos del sistema, el uso del disco, las redes IPv4 e IPv6, el 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 y otras.

En este tutorial, aprenderás a instalar y monitorizar varios servicios utilizando la herramienta Netdata en un servidor Rocky Linux 8. Utilizaremos Netdata para hacer un seguimiento de las métricas de una pila LEMP y un motor Docker.

Requisitos previos

  • Un servidor con Rocky Linux 8.
  • Un usuario no root con privilegios sudo.
  • Un nombre de dominio totalmente cualificado (FQDN) como netdata.example.com que apunte a tu servidor.
  • Una cuenta de Slack y un espacio de trabajo para recibir notificaciones.
  • Una cuenta SMTP con un servicio de correo electrónico como Amazon SES o Mailgun.
  • Desactiva SELinux.

Paso 1 – Configurar el cortafuegos

El primer paso es configurar el cortafuegos. Rocky Linux utiliza el cortafuegos Firewalld. Comprueba el estado del cortafuegos.

$ sudo firewall-cmd --state
running

El cortafuegos funciona con diferentes zonas, y la zona pública es la que utilizaremos por defecto. Enumera todos los servicios y puertos activos en el cortafuegos.

$ sudo firewall-cmd --permanent --list-services

Debería mostrar el siguiente resultado.

cockpit dhcpv6-client ssh

Permite los puertos HTTP y HTTPS.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Vuelve a comprobar el estado del cortafuegos.

$ sudo firewall-cmd --permanent --list-services

Deberías ver una salida similar.

cockpit dhcpv6-client http https ssh

Recarga el cortafuegos para activar los cambios.

$ sudo firewall-cmd --reload

Paso 2 – Instalar NetData

Netdata viene con un script instalador que puede funcionar en cualquier distribución de Linux. Ejecuta el siguiente comando para descargar y ejecutar el script de instalación.

$ bash <(curl -Ss https://my-netdata.io/kickstart.sh)

Se te pedirá tu contraseña sudo para habilitar los privilegios sudo. Introduce Y para confirmar que añades el repositorio de Netdata y lo instalas en tu servidor.

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 (/usr/lib/systemd/system/netdata.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2022-04-11 12:09:12 UTC; 13s ago
 Main PID: 19443 (netdata)
    Tasks: 32 (limit: 11412)
   Memory: 52.0M
   CGroup: /system.slice/netdata.service
           ??19443 /usr/sbin/netdata -P /var/run/netdata/netdata.pid -D
           ??19448 /usr/sbin/netdata --special-spawn-server
           ??19937 /usr/libexec/netdata/plugins.d/apps.plugin 1
           ??19944 /usr/libexec/netdata/plugins.d/go.d.plugin 1

Apr 11 12:09:12 netdata systemd[1]: Started Real time performance monitoring.
.......

Si el servicio no está iniciado o habilitado, puedes hacerlo con 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

Deberías obtener una salida similar. Netdata utiliza el puerto 19999 para su tablero de mandos, que 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                128                            127.0.0.1:8125                           0.0.0.0:*               users:(("netdata",pid=22496,fd=29))
LISTEN           0                128                              0.0.0.0:19999                          0.0.0.0:*               users:(("netdata",pid=22496,fd=6))
......
LISTEN           0                128                                [::1]:8125                              [::]:*               users:(("netdata",pid=22496,fd=28))
LISTEN           0                128                                 [::]:19999                             [::]:*               users:(("netdata",pid=22496,fd=7))

Paso 3 – Instalar SSL

Para instalar un certificado SSL con Let’s Encrypt, necesitamos instalar la herramienta Certbot.

En primer lugar, tienes que descargar e instalar el repositorio EPEL.

$ sudo dnf install epel-release

Ejecuta los siguientes comandos para instalar Certbot.

$ sudo dnf install certbot

Generar el certificado SSL.

$ sudo certbot certonly --standalone --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 -out /etc/ssl/certs/dhparam.pem 2048

Crea un directorio raíz web de desafío para la renovación automática de Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Crea un Cron Job para renovar el SSL. Se ejecutará cada día para comprobar el certificado y renovarlo si es necesario. Para ello, primero crea el archivo /etc/cron.daily/certbot-renew y ábrelo para editarlo.

$ sudo nano /etc/cron.daily/certbot-renew

Pega el siguiente código.

#!/bin/sh
certbot renew --cert-name netdata.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Cambia los permisos del archivo de la tarea para que sea ejecutable.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Paso 4 – Instalar y configurar Nginx

Vamos a instalar la última versión de Nginx. Crea y abre el archivo /etc/yum.repos.d/nginx.repo para editarlo.

$ sudo nano /etc/yum.repos.d/nginx.repo

Pega las siguientes líneas en él.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Instala Nginx y las herramientas HTTPD.

$ sudo dnf install nginx httpd-tools

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.20.2

Activa e inicia el servicio Nginx.

$ sudo systemctl enable nginx --now

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 te lo 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 pida.

Ejecuta el siguiente comando para generar un archivo de contraseñas que permita 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 5 – Acceder y utilizar el panel de control 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.

Autenticación HTTP de Netdata

Obtendrás el siguiente panel de control.

Panel de control de Netdata por primera vez

Marca la casilla Recordar mi elección y haz clic en el botón Más tarde, quédate en el tablero del agente para descartar la ventana emergente.

Puedes pausar, detener e iniciar la monitorización en cualquier momento utilizando el botón Reproducir del tablero.

Botón de reproducción/pausa de Netdata

Puedes acceder a varios cuadros de mando haciendo clic en las opciones de la barra lateral derecha. Haz clic en el botón UTC y selecciona la zona horaria correcta para cambiarla.

Cambio de zona horaria de Netdata

Paso 6 – 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.

Archivo de configuración de Netdata en el navegador

El archivo está dividido en varias secciones, como [global], [web], [registro], etc. La configuración por defecto es suficiente para empezar. Netdata recoge los datos utilizando dos tipos de plugins:

  1. los pluginsinternos están escritos en lenguaje C y se ejecutan como hilos dentro del demonio netdata.
  2. Los pluginsexternos están escritos en varios lenguajes, como Python, Go, etc. y son generados como procesos independientes de larga duración por el demonio netdata. Se comunican con el demonio Netdata mediante pipes.

Configurar el uso de la memoria de NetData

El uso de memoria RAM de NetData se decide en función del tiempo que quieras mantener los datos del gráfico grabado antes de que se pierdan.

  • 3600 segundos o 1 hora de retención de datos del gráfico utiliza 15 MB de RAM.
  • 7200 segundos o 2 horas de retención de datos del gráfico utilizan 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, los requisitos de RAM también se duplican. Estos requisitos de RAM se basan en el número de gráficos que utiliza el panel de control 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]
..
        history = 14400
..

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Desactivar la telemetría

Por defecto, Netdata recoge información anónima de uso mediante una plataforma de análisis de productos, Posthog. Cada vez que se inicia o se detiene el demonio de Netdata, éste utiliza el script de estadísticas anónimas para recoger 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 kernel, versión, arquitectura
  • Tecnología de virtualización
  • Tecnología de contenedor
  • Información adicional sobre los fallos del cliente Netdata.

Afortunadamente, puedes optar por no hacerlo. Crea un archivo vacío llamado .opt-out-from-anonymous-statistics en el directorio de 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 memoria RAM y el disco de tu sistema para almacenar los datos históricos. El proceso de Netdata por defecto recoge unas 2000 métricas por segundo, lo que significa que la configuración por defecto almacenará unas métricas de dos días en la RAM y el disco.

Para almacenar más métricas, tienes las dos opciones siguientes:

  1. Configurar Netdata para que utilice más memoria RAM y espacio en disco
  2. 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 memoria RAM y espacio en disco

Abre el archivo /etc/netdata/netdata.conf para editarlo.

$ sudo nano /etc/netdata/netdata.conf

Pega las siguientes líneas en la sección [global].

[global]
...
    memory mode = dbengine
    page cache size = 32
    dbengine disk space = 256

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

El tamaño de la caché de la página determina la cantidad de RAM utilizada, y el dbengine disk space determina el uso del disco. Por defecto, Netdata utiliza 32 MB de RAM y 256 MB de espacio en disco. Puedes descomentar estos valores y cambiar cualquiera de los dos valores a tu gusto.

Puedes utilizar la calculadora de la 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 recoge las 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 pida.

Paso 7 – Configurar las notificaciones de Slack

El primer paso es crear una aplicación de Slack y conectarla a un canal específico de tu espacio de trabajo para configurar las Notificaciones de 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.

Aplicaciones de la API de Slack

Haz clic en el enlace Desde el principio para crear la aplicación.

Slack Crear App Popup

Selecciona un nombre para tu aplicación y elige el espacio de trabajo donde quieres que aparezca tu App. Si no quieres asociar tu app al espacio de trabajo existente, puedes crear otro y volver a este paso.

Ventana emergente del nombre de la aplicación Slack

Abre la página del Webhook entrante seleccionando la opción en el menú Características de la barra lateral izquierda, y luego activa el webhook.

WebHooks entrantes de Slack Apps

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.

Añadir la aplicación Slack de Netdata a WorkSpace

Haz clic en el botón Permitir para continuar. Vuelve a la página de Webhooks entrantes y copia la URL del Webhook.

URL de Slack 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 siguiente sección.

# Enable slack notification
SEND_SLACK="YES"

# Select the slack webhook
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/xxxxxxx"

# Default channel for notification
DEFAULT_RECIPIENT_SLACK="notifications"

Asegúrate de que la variable SEND_SLACK está ajustada a 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 Enter 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

Configurar las notificaciones por correo electrónico

Netdata utiliza por defecto sendmail para enviar notificaciones por correo electrónico, pero gestionar un servidor de correo electrónico no es una tarea fácil. Netdata no soporta SMTP, pero puedes instalar un paquete llamado msmtp client. Te permite enviar correos a un servidor SMTP.

Instala msmtp.

$ sudo dnf 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 te lo pida.

Abre el archivo /etc/netdata/health_alarm_notify.conf para editarlo.

$ sudo nano /etc/netdata/health_alarm_notify.conf

Desplázate hasta la siguiente sección e introduce la ruta de acceso a 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 pida.

Paso 8 – Prueba de los canales de notificación

Probemos si las notificaciones de Slack funcionan.

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

Sal del usuario.

$ exit.

Abre tu aplicación Slack, y deberías haber recibido las siguientes alertas.

Notificaciones de prueba de Netdata Slack

También deberías recibir tres correos electrónicos sobre los avisos de prueba.

Correo electrónico de notificaciones de pruebas de Netdata

Paso 9 – Configurar la monitorización del sistema

Ahora que hemos configurado y probado las notificaciones, vamos a configurar y probar las notificaciones del sistema, como el uso de la CPU.

Ejecuta los siguientes comandos para crear y abrir el archivo de configuración de la CPU.

$ cd /etc/netdata
$ sudo ./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 Stress.

$ sudo dnf install stress

Ejecuta el siguiente comando para que se produzca un pico en el uso de la CPU de tu servidor.

$ stress --cpu 2

Deja que el comando se ejecute durante 5-10 minutos, y recibirás mensajes de uso elevado de la 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 CPU recuperada en Slack.

Notificaciones de uso de CPU en Slack

Paso 10 – 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.

$ 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 soporta 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 sistema operativo, 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 pida.

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 control de Netdata.

Detalles de la conexión Nginx de Netdata

Supervisar los registros de Nginx

Netdata también puede supervisar los registros de acceso de Nginx. Para ello, pasa al directorio de Netdata.

$ cd /etc/netdata

Ejecuta el siguiente comando para generar un archivo de configuración para monitorizar los Registros de Acceso.

$ sudo ./edit-config python.d/web_log.conf

Desplázate hasta el final 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 permisos para acceder al directorio. Por defecto, el grupo del sistema adm tiene permiso para acceder a los archivos de registro. Para dar acceso a Netdata, tenemos que añadir el usuario netdata al grupo adm.

$ sudo usermod -aG adm netdata

Reinicia Nginx y el servicio Netdata.

$ sudo systemctl restart nginx netdata

Vuelve a cargar el panel de control de Netdata para ver los datos de tus archivos de registro.

Panel de control del registro de acceso de Netdata

Paso 11 – Configurar la monitorización de MySQL/MariaDB

Vamos a instalar MariaDB para nuestro tutorial. Los pasos siguen siendo los mismos si utilizas un servidor MySQL.

Añade el repositorio de MariaDB 10.6.

$ sudo nano /etc/yum.repos.d/MariaDB.repo

Pega el siguiente código en él.

# MariaDB 10.6 CentOS repository list - created 2022-04-12 11:12 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
baseurl = https://download.nus.edu.sg/mirror/mariadb/yum/10.6/centos8-amd64
module_hotfixes=1
gpgkey=https://download.nus.edu.sg/mirror/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Instala MariaDB.

$ sudo dnf install MariaDB-server

Habilita el servidor MariaDB.

$ sudo systemctl enable mariadb

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/my.cnf.d/server.cnf para editarlo.

$ sudo nano /etc/my.cnf.d/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

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Inicia el servidor MariaDB.

$ sudo systemctl start mariadb

Reinicia el servicio Netdata.

$ sudo systemctl restart netdata

El panel de MariaDB/MySQL debería empezar a aparecer en el panel de Netdata.

Panel de control NetData MySQL/MariaDB

Paso 12 – 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.0 y luego habilitaremos su monitorización.

Instalaremos PHP utilizando el repositorio Remi. Ya hemos instalado el repositorio EPEL en el paso 3. Instala el repositorio Remi.

$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Comprueba si hay corrientes de PHP disponibles.

$ dnf module list php -y
Last metadata expiration check: 0:00:12 ago on Fri 03 Dec 2021 09:39:32 AM UTC.
Rocky Linux 8 - AppStream
Name                Stream                 Profiles                                 Summary
php                 7.2 [d]                common [d], devel, minimal               PHP scripting language
php                 7.3                    common [d], devel, minimal               PHP scripting language
php                 7.4                    common [d], devel, minimal               PHP scripting language

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name                Stream                 Profiles                                 Summary
php                 remi-7.2               common [d], devel, minimal               PHP scripting language
php                 remi-7.3               common [d], devel, minimal               PHP scripting language
php                 remi-7.4               common [d], devel, minimal               PHP scripting language
php                 remi-8.0               common [d], devel, minimal               PHP scripting language
php                 remi-8.1               common [d], devel, minimal               PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

La versión por defecto es la 7.2. Activa el repositorio PHP 8.0 de Remi.

$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.0

A continuación, instala el PHP y sus extensiones requeridas por Firefly III. El paquete php contiene varias dependencias que requiere Firefly III, así que asegúrate de incluirlas.

$ sudo dnf install php php-fpm php-mbstring php-xml php-curl php-mysqlnd php-zip php-intl php-bcmath php-gd php-ldap php-cli

Verifica la instalación.

$ php --version
PHP 8.0.16 (cli) (built: Feb 15 2022 21:34:32) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.16, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.16, Copyright (c), by Zend Technologies

Configurar PHP

Abre el archivo /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php-fpm.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 processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
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, como se muestra a continuación.

; Note: There is a real-time FPM status monitoring sample web page available
;       It's available in: @EXPANDED_DATADIR@/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 te lo pida.

Activa e inicia el servicio PHP.

$ sudo systemctl enable php-fpm --now

Añadir la configuración de 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-fpm/.sock; # Depends on the PHP Version and OS Distro
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

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 control de Netdata, y deberías ver las estadísticas de PHP-FPM.

Panel de estadísticas PHP-FPM de NetData

Paso 13 – Configurar la monitorización del motor Docker y del contenedor

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.

$ sudo dnf install yum-utils
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
$ sudo dnf install docker-ce docker-ce-cli containerd.io

Activa e inicia el servicio Docker.

$ sudo systemctl enable docker --now

Para monitorizar el motor de Docker, tienes que 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 te lo pida.

Reinicia los servicios Netdata y Docker.

$ sudo systemctl restart docker netdata

Vuelve a cargar el panel de control de Netdata y podrás ver las estadísticas de Docker.

Estadísticas del contenedor Docker de NetData

Verás otra entrada llamada Prometheus Metrics en tu tablero porque la opción de métricas se hizo para el tablero Prometheus.

Estadísticas del contenedor Docker Prometheus de NetData

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, tienes 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
938b2cf30927   nginx     "/docker-entrypoint.…"   3 seconds ago   Up 2 seconds   80/tcp    pensive_lovelace

El nombre del contenedor es tender_murdock como se muestra. Como el contenedor se ha iniciado después de instalar Netdata, reinicia el servicio.

$ sudo systemctl restart netdata

Carga el Dashboard, y deberías poder ver las estadísticas del contenedor.

Estadísticas del contenedor individual Docker de NetData

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 Rocky Linux. Si tienes alguna pregunta, publícala en los comentarios de abajo.

También te podría gustar...