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.
Obtendrás el siguiente panel de control.
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.
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.
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.
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:
- 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 son generados como procesos independientes de larga duración por el demonio
netdata
. Se comunican con el demonio Netdata mediantepipes
.
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:
- 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 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.
Haz clic en el enlace Desde el principio para crear la aplicación.
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.
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.
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 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.
También deberías recibir tres correos electrónicos sobre los avisos de prueba.
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.
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.
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.
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.
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.
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.
Verás otra entrada llamada Prometheus Metrics
en tu tablero porque la opción de métricas se hizo para el tablero 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, 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.
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.