One place for hosting & domains

      Servidores

      Información sobre algoritmos de selección de bloques de servidores y ubicación de Nginx


      Introducción

      Nginx es uno de los servidores web más populares del mundo. Puede manejar correctamente altas cargas con muchas conexiones de clientes concurrentes y puede funcionar fácilmente como servidor web, servidor de correo o servidor de proxy inverso.

      En esta guía, explicaremos algunos de los detalles en segundo plano que determinan cómo Nginx procesa las solicitudes de los clientes. Entender estas ideas puede ayudar a despejar las incógnitas sobre el diseño de bloques de servidores y ubicación, y puede hacer que el manejo de las solicitudes parezca menos impredecible.

      Configuraciones de bloques de Nginx

      Nginx divide de forma lógica las configuraciones destinadas a entregar distintos contenidos en bloques, que conviven en una estructura jerárquica. Cada vez que se realiza una solicitud de cliente, Nginx inicia un proceso para determinar qué bloques de configuración deben usarse para gestionar la solicitud. Este proceso de decisión es lo que explicaremos en esta guía.

      Los bloques principales que explicaremos son el bloque de servidor y el bloque de ubicación.

      Un bloque de servidor es un subconjunto de la configuración de Nginx que define un servidor virtual utilizado para gestionar las solicitudes de un tipo definido. Los administradores suelen configurar varios bloques de servidores y decidir qué bloque debe gestionar cada conexión según el nombre de dominio, el puerto y la dirección IP solicitados.

      Un bloque de ubicación reside dentro de un bloque de servidor y se utiliza para definir la manera en que Nginx debe gestionar las solicitudes para diferentes recursos y URI para el servidor principal. El espacio URI puede subdividirse de la manera que el administrador quiera utilizando estos bloques. Es un modelo extremadamente flexible.

      Cómo decide Nginx qué bloque de servidor gestionará una solicitud

      Dado que Nginx permite que el administrador defina varios bloques de servidores que funcionan como instancias de servidores web virtuales independientes, necesita un procedimiento para determinar cuál de estos bloques de servidores se utilizará para satisfacer una solicitud.

      Lo hace mediante un sistema definido de comprobaciones que se utilizan para encontrar la mejor coincidencia posible. Las principales directivas de bloques de servidores de las que se ocupa Nginx durante este proceso son la directiva listen y la directiva server_name.

      Análisis de la directiva “listen” para encontrar posibles coincidencias

      Primero, Nginx examina la dirección IP y el puerto de la solicitud. Luego, lo compara con la directiva listen de cada servidor para crear una lista de los bloques de servidores que pueden resolver la solicitud.

      La directiva listen generalmente define la dirección IP y el puerto a los que responderá el bloque de servidor. De manera predeterminada, cualquier bloque de servidor que no incluya una directiva listen recibe los parámetros de escucha 0.0.0.0:80 (o 0.0.0.0:8080 si Nginx está siendo ejecutado por un usuario no root regular). Eso permite que estos bloques respondan a las solicitudes en cualquier interfaz en el puerto 80, pero este valor predeterminado no afecta demasiado al proceso de selección de servidores.

      La directiva listen puede establecerse para las siguientes características:

      • Una combinación de dirección IP y puerto.
      • Una dirección IP individual que escuchará en el puerto 80 de manera predeterminada.
      • Un puerto individual que escuchará cada interfaz en ese puerto.
      • La ruta al socket Unix.

      La última opción, por lo general, solo tendrá implicaciones al pasar solicitudes entre distintos servidores.

      Cuando intente determinar a qué bloque de servidor enviar una solicitud, Nginx tratará primero de decidir según la especificidad de la directiva listen usando las siguientes reglas:

      • Nginx traduce todas las directivas listen “incompletas” sustituyendo los valores que faltan por sus valores predeterminados para que cada bloque pueda evaluarse por su dirección IP y su puerto. Algunos ejemplos de estas traslaciones son:
        • Un bloque sin directiva listen utiliza el valor 0.0.0.0:80.
        • Un bloque establecido en una dirección IP 111.111.111.111 sin puerto se convierte en 111.111.111.111:80.
        • Un bloque establecido en el puerto 8888 sin dirección IP se convierte en 0.0.0.0:8888.
      • Luego, Nginx intenta recopilar una lista de los bloques de servidores que coinciden con la solicitud más específicamente basada en la dirección IP y el puerto. Eso significa que cualquier bloque que esté usando de forma funcional 0.0.0.0 como su dirección IP (para coincidir con cualquier interfaz), no se seleccionará si hay bloques coincidentes que enumeran una dirección IP específica. En todo caso, el puerto debe coincidir con exactitud.
      • Si solo hay una coincidencia más específica, ese bloque de servidor se utilizará para atender la solicitud. Si hay varios bloques de servidores con el mismo nivel de coincidencia de especificidad, Nginx comienza a evaluar la directiva server_name de cada bloque de servidores.

      Es importante entender que Nginx solo evaluará la directiva server_name cuando necesite distinguir entre bloques de servidores que coinciden con el mismo nivel de especificidad en la directiva listen. Por ejemplo, si example.com está alojado en el puerto 80 de 192.168.1.10, una solicitud para example.com siempre será atendida por el primer bloque de este ejemplo, a pesar de la directiva server_name en el segundo bloque.

      server {
          listen 192.168.1.10;
      
          . . .
      
      }
      
      server {
          listen 80;
          server_name example.com;
      
          . . .
      
      }
      

      En caso de que más de un bloque de servidor coincida con la misma especificidad, el siguiente paso es verificar la directiva server_name.

      Análisis de la directiva “server_name” para elegir una coincidencia

      Luego, para evaluar más a fondo las solicitudes que tienen directivas listen igualmente específicas, Nginx verifica el encabezado “Host” de la solicitud. Ese valor contiene el dominio o la dirección IP que el cliente estaba intentando alcanzar.

      Nginx intenta encontrar la mejor coincidencia para el valor que encuentra al ver la directiva server_name dentro de cada uno de los bloques de servidores que aún son candidatos a selección. Nginx lo evalúa usando la siguiente formula:

      • Nginx intentará primero encontrar un bloque de servidor con un server_name que coincida con el valor en el encabezado “Host” de la solicitud de manera exacta. Si lo encuentra, ese bloque asociado se utilizará para atender la solicitud. Si se encuentran varias coincidencias exactas, se utiliza la primera coincidencia.
      • Si no se encuentra ninguna coincidencia exacta, Nginx intentará encontrar un bloque de servidor con un server_name que coincida usando un comodín inicial (indicado por un * al principio del nombre en la configuración). Si lo encuentra, ese bloque se utilizará para atender la solicitud. Si se encuentran varias coincidencias, la coincidencia más larga se utilizará para atender la solicitud.
      • Si no se encuentra ninguna coincidencia con el comodín inicial, Nginx buscará entonces un bloque de servidor con un server_name que coincida usando un comodín final (indicado por un nombre de servidor que termina con un * en la configuración). Si lo encuentra, ese bloque se utilizará para atender la solicitud. Si se encuentran varias coincidencias, la coincidencia más larga se utilizará para atender la solicitud.
      • Si no se encuentra ninguna coincidencia usando un comodín final, Nginx evalúa los bloques de servidor que definen el server_name usando expresiones regulares (indicadas por un ~ antes del nombre). El primer server_name con una expresión regular que coincida con el encabezado “Host” se utilizará para atender la solicitud.
      • Si no se encuentra ninguna coincidencia de expresión regular, Nginx selecciona el bloque de servidor predeterminado para esa dirección IP y ese puerto.

      Cada combinación de dirección IP/puerto tiene un bloque de servidor predeterminado que se utilizará cuando no se pueda determinar un curso de acción con los métodos anteriores. En el caso de una combinación de dirección IP y puerto, será el primer bloque de la configuración o el bloque que contiene la opción default_server como parte de la directiva listen (que anularía el primer algoritmo encontrado). Solo puede haber una declaración default_server por cada combinación de dirección IP y puerto.

      Ejemplos

      Si se define un server_name que coincida exactamente con el valor de encabezado “Host”, se selecciona ese bloque de servidor para procesar la solicitud.

      En este ejemplo, si el encabezado “Host” de la solicitud se estableció en “host1.example.com”, se seleccionaría el segundo servidor:

      server {
          listen 80;
          server_name *.example.com;
      
          . . .
      
      }
      
      server {
          listen 80;
          server_name host1.example.com;
      
          . . .
      
      }
      

      Si no se encuentra ninguna coincidencia exacta, Nginx comprueba entonces si hay un server_name con un comodín inicial que coincida. Se seleccionará la coincidencia más larga que comience con un comodín para satisfacer la solicitud.

      En este ejemplo, si la solicitud tuviera un encabezado “Host” de “www.example.org”, se seleccionaría el segundo bloque de servidor:

      server {
          listen 80;
          server_name www.example.*;
      
          . . .
      
      }
      
      server {
          listen 80;
          server_name *.example.org;
      
          . . .
      
      }
      
      server {
          listen 80;
          server_name *.org;
      
          . . .
      
      }
      

      Si no se encuentra ninguna coincidencia con un comodín inicial, Nginx verá si existe una coincidencia usando un comodín al final de la expresión. En este punto, se seleccionará la coincidencia más larga que termine con un comodín para atender la solicitud.

      Por ejemplo, si la solicitud tiene un encabezado “Host” establecido en “www.example.com”, se seleccionará el tercer bloque de servidor:

      server {
          listen 80;
          server_name host1.example.com;
      
          . . .
      
      }
      
      server {
          listen 80;
          server_name example.com;
      
          . . .
      
      }
      
      server {
          listen 80;
          server_name www.example.*;
      
          . . .
      
      }
      

      Si no se encuentran coincidencias con los comodines, Nginx pasará a intentar coincidir con las directivas server_name que utilicen expresiones regulares. Se seleccionará la primera expresión regular que coincida para responder a la solicitud.

      Por ejemplo, si el encabezado “Host” de la solicitud está configurado en “www.example.com”, se seleccionará el segundo bloque de servidor para satisfacer la solicitud:

      server {
          listen 80;
          server_name example.com;
      
          . . .
      
      }
      
      server {
          listen 80;
          server_name ~^(www|host1).*.example.com$;
      
          . . .
      
      }
      
      server {
          listen 80;
          server_name ~^(subdomain|set|www|host1).*.example.com$;
      
          . . .
      
      }
      

      Si ninguno de los pasos anteriores puede satisfacer la solicitud, la solicitud se pasará al servidor predeterminado para la dirección IP y el puerto que coincidan.

      Bloques de ubicación que coinciden

      De forma similar al proceso que utiliza Nginx para seleccionar el bloque del servidor que procesará una solicitud, Nginx también tiene un algoritmo establecido para decidir qué bloque de ubicación dentro del servidor se utilizará para gestionar las solicitudes.

      Sintaxis de bloques de ubicación

      Antes de ver cómo Nginx decide qué bloque de ubicación utilizar para gestionar las solicitudes, repasemos parte de la sintaxis que se podría encontrar en las definiciones de los bloques de ubicación. Los bloques de ubicación se encuentran dentro de los bloques de servidor (u otros bloques de ubicación) y se utilizan para decidir cómo procesar la URI de la solicitud (la parte de la solicitud que viene después del nombre de dominio o la dirección IP/puerto).

      Los bloques de ubicación generalmente tienen la siguiente forma:

      location optional_modifier location_match {
      
          . . .
      
      }
      

      location_match que aparece arriba define contra qué debe comprobar Nginx la URI de la solicitud. La existencia o la inexistencia del modificador en el ejemplo anterior afecta a la forma en que Nginx intenta hacer coincidir el bloque de ubicación. Los modificadores que se muestran abajo harán que el bloque de ubicación asociado se interprete de la siguiente manera:

      • (none): si no hay modificadores, la ubicación se interpreta como una coincidencia de prefijo. Eso significa que la ubicación dada coincidirá con el principio del URI de la solicitud para determinar una coincidencia.
      • =: si se utiliza un signo igual, este bloque se considerará coincidente si el URI de la solicitud coincide exactamente con la ubicación indicada.
      • ~: si hay una tilde de la eñe, esta ubicación se interpretará como una coincidencia de expresión regular que distingue entre mayúsculas y minúsculas.
      • ~*: si se utiliza un modificador de tilde de la eñe y asterisco, el bloque de ubicación se interpretará como una coincidencia de expresión regular que no distingue entre mayúsculas y minúsculas.
      • ^~: si hay un modificador de acento circunflejo y tilde de la eñe, y si este bloque se selecciona como la mejor coincidencia de expresión no regular, no se realizará la coincidencia de expresión regular.

      Ejemplos que demuestran la sintaxis del bloque de ubicación

      Como ejemplo de concordancia de prefijos, se puede seleccionar el siguiente bloque de ubicación para responder a los URI de solicitud que tienen el aspecto /site, /site/page1/index.html o /site/index.html:

      location /site {
      
          . . .
      
      }
      

      Para una demostración de la coincidencia exacta del URI de la solicitud, este bloque siempre se utilizará para responder a un URI de solicitud que tenga el aspecto /page1. No se utilizará para responder a un URI de solicitud /page1/index.html. Tenga en cuenta que, si se selecciona este bloque y la solicitud se cumple usando una página de índice, se realizará un redireccionamiento interno a otra ubicación que será la que realmente gestione la solicitud:

      location = /page1 {
      
          . . .
      
      }
      

      Como ejemplo de una ubicación que debe interpretarse como una expresión regular que distingue entre mayúsculas y minúsculas, este bloque puede usarse para gestionar las solicitudes de /tortoise.jpg, pero no para /FLOWER.PNG:

      location ~ .(jpe?g|png|gif|ico)$ {
      
          . . .
      
      }
      

      A continuación, se muestra un bloque que permitiría una coincidencia sin distinción ente mayúsculas y minúsculas similar al que se mostró anteriormente. Este bloque podría gestionar /tortoise.jpg y /FLOWER.PNG:

      location ~* .(jpe?g|png|gif|ico)$ {
      
          . . .
      
      }
      

      Por último, este bloque evitaría que se produjera una coincidencia de expresión regular si se determina que es la mejor coincidencia de expresión no regular. Podría gestionar las solicitudes de /costumes/ninja.html:

      location ^~ /costumes {
      
          . . .
      
      }
      

      Como ve, los modificadores indican cómo debe interpretarse el bloque de ubicación. Sin embargo, esto no nos indica el algoritmo que utiliza Nginx para decidir a qué bloque de ubicación enviar la solicitud. Lo repasaremos a continuación.

      Cómo elige Nginx qué ubicación utilizar para gestionar las solicitudes

      Nginx elige la ubicación que se utilizará para atender una solicitud de forma similar a cómo selecciona un bloque de servidor. Se ejecuta a través de un proceso que determina el mejor bloque de ubicación para cualquier solicitud. Entender este proceso es un requisito crucial para poder configurar Nginx de forma fiable y precisa.

      Teniendo en cuenta los tipos de declaraciones de ubicación que hemos descrito anteriormente, Nginx evalúa los posibles contextos de ubicación comparando el URI de solicitud con cada una de las ubicaciones. Lo hace mediante el siguiente algoritmo:

      • Nginx comienza comprobando todas las coincidencias de ubicación basadas en prefijos (todos los tipos de ubicación que no implican una expresión regular). Comprueba cada ubicación con el URI completo de la solicitud.
      • Primero, Nginx busca una coincidencia exacta. Si se encuentra un bloque de ubicación que utilice el modificador = y que coincida con el URI de la solicitud de manera exacta, este bloque de ubicación se selecciona inmediatamente para atender la solicitud.
      • Si no se encuentran coincidencias exactas con bloques de ubicación (con el modificador =), Nginx pasa a evaluar los prefijos no exactos. Descubre la ubicación del prefijo más largo que coincide con el URI de la solicitud dada que luego evalúa de la siguiente manera:
        • Si la ubicación del prefijo más largo que coincide tiene el modificador ^~, Nginx finalizará inmediatamente su búsqueda y seleccionará esta ubicación para atender la solicitud.
        • Si la ubicación del prefijo más largo que coincide no utiliza el modificador ^~, Nginx almacena la coincidencia de momento para poder cambiar el enfoque de la búsqueda.
      • Una vez que se determina y almacena la ubicación del prefijo más largo que coincide, Nginx procede a evaluar las ubicaciones de expresiones regulares (las que distinguen entre mayúsculas y minúsculas, y las que no). Si hay alguna ubicación de expresiones regulares dentro de la ubicación del prefijo más largo que coincide, Nginx la pondrá a la parte superior de su lista de ubicaciones de regex para comprobar. Luego, Nginx intentará hacer coincidir con las ubicaciones de expresiones regulares de forma secuencial. La primera ubicación de expresión regular que coincida con el URI de la solicitud se seleccionará inmediatamente para atender la solicitud.
      • Si no se encuentra ninguna ubicación de expresión regular que coincida con el URI de la solicitud, se seleccionará la ubicación de prefijo previamente almacenado para atender la solicitud.

      Es importante entender que, de manera predeterminada, Nginx atenderá las coincidencias de expresiones regulares con mayor preferencia en comparación con las coincidencias de prefijos. Sin embargo, primero evalúa las ubicaciones de prefijos, lo que permite al administrador anular esta tendencia especificando las ubicaciones usando los modificadores = y ^~.

      También es importante tener en cuenta que, aunque las ubicaciones de prefijos generalmente se seleccionan según la coincidencia más larga y específica, la evaluación de la expresión regular se detiene cuando se encuentra la primera ubicación que coincida. Eso significa que el posicionamiento dentro de la configuración tiene amplias implicaciones para las ubicaciones de expresiones regulares.

      Por último, es importante entender que las coincidencias de expresiones regulares dentro de la coincidencia del prefijo más largo “saltarán la línea” cuando Nginx evalúe las ubicaciones de regex. Estas se evaluarán en orden, antes de que se consideren las demás coincidencias de expresiones regulares. Maxim Dounin, un desarrollador de Nginx increíblemente atento, explica en esta publicación esta parte del algoritmo de selección.

      ¿Cuándo salta la evaluación del bloque de ubicaciones a otras ubicaciones?

      En general, cuando se selecciona un bloque de ubicación para atender una solicitud, la solicitud se gestiona completamente dentro de ese contexto a partir de ese momento. Solo la ubicación seleccionada y las directivas heredadas determinan cómo se procesa la solicitud, sin interferencia de los bloques de ubicación hermanos.

      Aunque esta es una regla general que le permitirá diseñar sus bloques de ubicación de una manera predecible, es importante darse cuenta de que, a veces, una nueva búsqueda de ubicación se activa por ciertas directivas dentro de la ubicación seleccionada. Las excepciones a la regla “solo un bloque de ubicación” pueden tener implicaciones sobre cómo se atiende realmente la solicitud y pueden no coincidir con las expectativas que tenía al diseñar sus bloques de ubicación.

      Algunas directivas que pueden dar como resultado este tipo de redireccionamiento interno son:

      • index
      • try_files
      • rewrite
      • error_page

      Las repasaremos brevemente.

      La directiva index siempre conduce a un redireccionamiento interno si se utiliza para gestionar la solicitud. Las coincidencias de ubicación exactas se utilizan a menudo para acelerar el proceso de selección, terminando inmediatamente la ejecución del algoritmo. Sin embargo, si realiza una coincidencia de ubicación exacta que sea un directorio, hay una buena probabilidad de que la solicitud sea redirigida a una ubicación diferente para el procesamiento real.

      En este ejemplo, la primera ubicación coincide con un URI de solicitud de /exact, pero, para gestionar la solicitud, la directiva index heredada por el bloque inicia un redireccionamiento interno al segundo bloque:

      index index.html;
      
      location = /exact {
      
          . . .
      
      }
      
      location / {
      
          . . .
      
      }
      

      En el caso anterior, si realmente necesita que la ejecución permanezca en el primer bloque, tendrá que encontrar un método diferente para satisfacer la solicitud al directorio. Por ejemplo, podría establecer un index no válido para ese bloque y activar autoindex:

      location = /exact {
          index nothing_will_match;
          autoindex on;
      }
      
      location  / {
      
          . . .
      
      }
      

      Esta es una forma de evitar que un index cambie de contexto, pero probablemente no sea útil para la mayoría de las configuraciones. Generalmente, una coincidencia exacta en directorios puede ser útil para acciones como reescribir la solicitud (lo que también genera una nueva búsqueda de ubicación).

      Otro caso en que se puede reevaluar la ubicación del procesamiento es con la directiva try_files. Esa directiva le indica a Nginx que busque la existencia de un conjunto determinado de archivos o directorios. El último parámetro puede ser un URI al que Nginx realizará un redireccionamiento interno.

      Analice la siguiente configuración:

      root /var/www/main;
      location / {
          try_files $uri $uri.html $uri/ /fallback/index.html;
      }
      
      location /fallback {
          root /var/www/another;
      }
      

      En el ejemplo anterior, si se realiza una solicitud para /blahblah, la primera ubicación obtendrá inicialmente la solicitud. Intentará encontrar un archivo llamado blahblah en el directorio /var/www/main. Si no puede encontrar ninguno, procederá a buscar un archivo llamado blahblah.html. Luego, intentará buscar un directorio llamado blahblah/ dentro del directorio /var/www/main. Si todos esos intentos fallan, se redirigirá a /fallback/index.html. Eso activará otra búsqueda de ubicación que el segundo bloque de ubicación capturará. Y atenderá el archivo /var/www/another/fallback/index.html.

      Otra directiva que puede pasar el bloque de ubicación es la directiva rewrite. Cuando utiliza el último parámetro con la directiva rewrite o cuando no utiliza ningún parámetro, Nginx buscará una nueva ubicación que coincida según los resultados de la reescritura.

      Por ejemplo, si modificamos el último ejemplo para incluir una reescritura, podemos ver que la solicitud a veces se pasa directamente a la segunda ubicación sin depender de la directiva try_files:

      root /var/www/main;
      location / {
          rewrite ^/rewriteme/(.*)$ /$1 last;
          try_files $uri $uri.html $uri/ /fallback/index.html;
      }
      
      location /fallback {
          root /var/www/another;
      }
      

      En el ejemplo de arriba, el primer bloque de ubicación gestionará inicialmente una solicitud de /rewriteme/hello. Se reescribirá a /hello y se buscará una ubicación. En este caso, volverá a coincidir con la primera ubicación y se procesará mediante try_files de manera habitual, probablemente regresando a /fallback/index.html si no se encuentra nada (usando el redireccionamiento interno de try_files que mencionamos antes).

      Sin embargo, si se realiza una solicitud para /rewriteme/fallback/hello, el primer bloque volverá a coincidir. Se aplicará la reescritura de nuevo, dando como resultado /fallback/hello esta vez. La solicitud se atenderá desde el segundo bloque de ubicación.

      Algo similar sucede con la directiva return cuando se envían los códigos de estado 301 o 302. La diferencia en este caso es que da como resultado una solicitud completamente nueva en forma de un redireccionamiento visible desde el exterior. Eso mismo puede suceder con la directiva rewrite cuando se utilizan los indicadores redirect o permanent. Sin embargo, estas búsquedas de ubicación no deberían ser inesperadas, ya que los redireccionamientos visibles externamente siempre dan como resultado una nueva solicitud.

      La directiva error_page puede dar como resultado un redireccionamiento interno similar al que se creó con try_files. Esa directiva se utiliza para definir lo que debe suceder cuando se encuentran ciertos códigos de estado. Esto probablemente nunca se ejecutará si se establece try_files, ya que esa directiva maneja todo el ciclo de vida de una solicitud.

      Analice este ejemplo:

      root /var/www/main;
      
      location / {
          error_page 404 /another/whoops.html;
      }
      
      location /another {
          root /var/www;
      }
      

      Todas las solicitudes (aparte de las que comienzan con /another) se gestionarán mediante el primer bloque, que atenderá archivos desde /var/www/main. Sin embargo, si no se encuentra un archivo (un estado 404), se producirá un redireccionamiento interno a /another/whoops.html, lo que llevará a una nueva búsqueda de ubicación que finalmente aterrizará en el segundo bloque. Este archivo se atenderá desde /var/www/another/whoops.html.

      Como se puede ver, entender las circunstancias en que Nginx activa una nueva búsqueda de ubicación puede ayudar a predecir el comportamiento que habrá cuando se hagan solicitudes.

      Conclusión

      Entender las formas en que Nginx procesa las solicitudes de los clientes puede hacer que su trabajo como administrador sea mucho más fácil. Podrá saber qué bloque de servidor seleccionará Nginx según cada solicitud del cliente. También podrá saber cómo se seleccionará el bloque de ubicación según el URI de la solicitud. En general, saber la forma en que Nginx selecciona los diferentes bloques le permitirá rastrear los contextos que Nginx aplicará para atender cada solicitud.



      Source link

      Cómo instalar y configurar Zabbix para monitorizar servidores remotos de forma segura en Ubuntu 20.04


      El autor seleccionó el Computer History Museum para recibir una donación como parte del programa Write for DOnations.

      Introducción

      Zabbix es un software de monitorización de código abierto para redes y aplicaciones. Ofrece monitorización en tiempo real de miles de métricas recogidas de servidores, equipos virtuales, dispositivos de red y aplicaciones web. Estas métricas pueden ayudarle a determinar el estado actual de su infraestructura TI y a detectar problemas con los componentes de hardware o software antes de que los clientes se quejen. La información útil se almacena en una base de datos para que pueda analizar datos a lo largo del tiempo y mejorar la calidad de los servicios proporcionados o planificar mejoras de su equipo.

      Zabbix usa varias opciones para recoger métricas, incluyendo la monitorización sin agente de los servicios del usuario y de la arquitectura cliente-servidor. Para recoger métricas del servidor, utiliza un agente pequeño en el cliente monitorizado para recopilar datos y enviarlos al servidor Zabbix. Zabbix admite la comunicación cifrada entre el servidor y los clientes conectados, de forma que sus datos están protegidos mientras recorren redes inseguras.

      El servidor Zabbix almacena sus datos en una base de datos relacional alimentada con MySQL o PostgreSQL. También puede almacenar datos históricos en bases de datos NoSQL como Elasticsearch y TimescaleDB. Zabbix ofrece una interfaz web para que pueda ver los datos y configurar los ajustes del sistema.

      En este tutorial, configurará Zabbix en dos equipos Ubuntu 20.04. Uno será configurado como el servidor Zabbix y el otro como un cliente que monitorizará. El servidor Zabbix usará una base de datos MySQL para registrar los datos de monitorización y utilizará Nginx para presentar la interfaz web.

      Requisitos previos

      Para seguir este tutorial, necesitará lo siguiente:

      • Dos servidores de Ubuntu 20.04 configurado siguiendo la Guía de configuración inicial del servidor para Ubuntu 20.04, que incluye un usuario no root con privilegios sudo y un firewall configurado con ufw. En un servidor, instalará Zabbix; este tutorial lo llamará servidor Zabbix. Monitorizará su segundo servidor; este segundo servidor se llamará segundo servidor Ubuntu.

      • El servidor que ejecutará el servidor Zabbix necesita tener instalados Nginx, MySQL y PHP. Siga los pasos 1 a 3 de nuestra guía Pila LEMP en Ubuntu 20.04 para configurarlos en su servidor Zabbix.

      • Un nombre de dominio registrado. Para este tutorial, se utilizará your_domain en todo momento. Puede adquirir un nombre de dominio en Namecheap, obtener uno gratuito en Freenom o utilizar un registrador de dominios de su elección.

      • Los dos registros DNS que se indican a continuación se han configurado para su servidor Zabbix. Si está usando DigitalOcean, consulte nuestra documentación DNS para obtener más información sobre cómo añadirlos.

        • Un registro A con your_domain orientado a la dirección IP pública de su servidor Zabbix.
        • Un registro A con www.your_domain orientado a la dirección IP pública de su servidor Zabbix.

      Además, debido a que el Servidor Zabbix se usa para acceder a información valiosa sobre su servidor a la que no quiere que accedan usuarios no autorizados, es importante que mantenga su servidor protegido instalando un certificado TLS o SSL. Esto es opcional, pero se recomienda encarecidamente. Si desea proteger su servidor, siga la guía sobre Let´s Encrypt en Ubuntu 20.04 tras el paso 3 de este tutorial.

      Paso 1: Instalar el servidor Zabbix

      Primero, debe instalar Zabbix en el servidor donde instaló MySQL, Nginx y PHP. Inicie sesión en este equipo como su usuario no root:

      • ssh sammy@zabbix_server_ip_address

      Zabbix está disponible en el administrador de paquetes de Ubuntu, pero está obsoleto, de forma que utilice el repositorio oficial de Zabbix para instalar la última versión estable. Descargue e instale el paquete de configuración del repositorio:

      • wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+focal_all.deb
      • sudo dpkg -i zabbix-release_5.0-1+focal_all.deb

      Verá lo siguiente:

      Output

      Selecting previously unselected package zabbix-release. (Reading database ... 64058 files and directories currently installed.) Preparing to unpack zabbix-release_5.0-1+focal_all.deb ... Unpacking zabbix-release (1:5.0-1+focal) ... Setting up zabbix-release (1:5.0-1+focal) ...

      Actualice el índice del paquete para que se incluya el nuevo repositorio:

      A continuación, instale el servidor Zabbix y el frontend web con el soporte de la base de datos de MySQL:

      • sudo apt install zabbix-server-mysql zabbix-frontend-php

      Instale también el agente Zabbix, que le permitirá recoger datos sobre el estado del servidor Zabbix.

      • sudo apt install zabbix-agent

      Antes de poder usar Zabbix, tendrá que configurar una base de datos para albergar los datos que el servidor Zabbix recogerá de sus agentes. Puede hacer esto en el siguiente paso.

      Paso 2: Configurar la base de datos MySQL para Zabbix

      Deberá crear una nueva base de datos MySQL y completarla con cierta información básica para hacer que sea adecuada para Zabbix. También creará un usuario específico para esta base de datos de forma que Zabbix no esté iniciando sesión en MySQL con la cuenta root.

      Inicie sesión en MySQL como el usuario root:

      Cree la base de datos Zabbix con compatibilidad de caracteres UTF-8:

      • create database zabbix character set utf8 collate utf8_bin;

      A continuación cree un usuario que el servidor Zabbix usará, proporciónele acceso a la nueva base de datos y establezca la contraseña para el usuario.

      • create user zabbix@localhost identified by 'your_zabbix_mysql_password';
      • grant all privileges on zabbix.* to zabbix@localhost;

      Con esto tendremos el usuario y la base de datos. Salga de la consola de la base de datos.

      A continuación, tendrá que importar el esquema inicial y los datos. La instalación de Zabbix le proporcionó un archivo que configura esto.

      Ejecute el siguiente comando para configurar el esquema e importar los datos a la base de datos zabbix. Utilice zcat ya que los datos en el archivo están comprimidos:

      • zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

      Introduzca la contraseña para el usuario MySQL zabbix que configuró cuando se le pida.

      Este comando puede tardar un minuto o dos en ejecutarse. Si ve el error ERROR 1045 (28000): Access denied for userzabbix@'localhost' (using password: YES), asegúrese de usar la contraseña adecuada para el usuario zabbix.

      Para que el servidor Zabbix utilice esta base de datos, deberá establecer la contraseña de la base de datos en el archivo de configuración del servidor Zabbix. Abra el archivo de configuración en su editor de texto preferido: En este tutorial, se usará nano:

      • sudo nano /etc/zabbix/zabbix_server.conf

      Busque la siguiente sección del archivo:

      /etc/zabbix/zabbix_server.conf

      ...
      ### Option: DBPassword                           
      #       Database password. Ignored for SQLite.   
      #       Comment this line if no password is used.
      #                                                
      # Mandatory: no                                  
      # Default:                                       
      # DBPassword=
      ...
      

      Estos comentarios en el archivo explican cómo conectar con la base de datos. Deberá establecer el valor DBPassword en el archivo a la contraseña para su usuario de la base de datos. Añada esta línea tras esos comentarios para configurar la base de datos:

      /etc/zabbix/zabbix_server.conf

      ...
      DBPassword=your_zabbix_mysql_password
      ...
      

      Guarde y cierre zabbix_server.conf pulsando CTRL+X, seguido de Y y ENTER si está usando nano.

      Ahora ha configurado el servidor Zabbix para que se conecte a la base de datos. A continuación, configurará el servidor web Nginx para presentar el frontend de Zabbix.

      Paso 3: Configurar Nginx para Zabbix

      Para configurar Nginx de forma automática, instale el paquete de configuración automática:

      • sudo apt install zabbix-nginx-conf

      Como resultado, obtendrá el archivo de configuración /etc/zabbix/nginx.conf, así como un enlace a él en el directorio de configuración de Nginx /etc/zabbix/nginx.conf.

      A continuación, debe realizar cambios a este archivo. Abra el archivo de configuración:

      • sudo nano /etc/zabbix/nginx.conf

      El archivo contiene una configuración del bloque de servidor Nginx generada automáticamente. Contiene dos líneas que determinan el nombre del servidor y el puerto en el que está escuchando:

      /etc/zabbix/nginx.conf

      server {
      #        listen          80;
      #        server_name     example.com;
      ...
      

      Borre las dos líneas y sustituya example.com con su nombre de dominio. Sus ajustes tendrán este aspecto:

      /etc/zabbix/nginx.conf

      server {
              listen          80;
              server_name     your_domain;
      ...
      

      Guarde y cierre el archivo. A continuación, compruebe que no haya errores de sintaxis en ninguno de sus archivos de Nginx y vuelva a cargar la configuración:

      • sudo nginx -t
      • sudo nginx -s reload

      Ahora que Nginx está configurado para presentar el frontend de Zabbix, realizará algunas modificaciones a su configuración PHP para que la interfaz web de Zabbix funcione correctamente.

      Nota: Como se indica en la sección de requisitos previos, se le recomienda habilitar SSL o TLS en su servidor. Si desea hacer esto, siga nuestro tutorial de Let´s Encrypt para Ubuntu 20.04 antes de pasar al Paso 4 para obtener un certificado gratuito SSL para Nginx. Este proceso detectará automáticamente el bloque de servidores Zabbix y lo configurará para HTTPS. Una vez que obtenga sus certificados SSL y TLS, puede volver y completar este tutorial.

      Paso 4: Configurar PHP para Zabbix

      La interfaz web Zabbix se escribe en PHP y requiere algunos ajustes especiales del servidor PHP. El proceso de instalación de Zabbix creó un archivo de configuración PHP-FPM que contiene estos ajustes. Está ubicado en el directorio /etc/zabbix y PHP-FPM lo carga automáticamente. Deberá realizar un pequeño cambio a este archivo, de forma que ábralo con lo siguiente:

      • sudo nano /etc/zabbix/php-fpm.conf

      El archivo contiene los ajustes PHP que cumplen con los requisitos necesarios para la interfaz web de Zabbix. Sin embargo, el ajuste de zona horaria está eliminado por defecto. Para asegurar que Zabbix utiliza la hora correcta, deberá establecer la zona horaria apropiada:

      /etc/zabbix/php-fpm.conf

      ...
      php_value[max_execution_time] = 300
      php_value[memory_limit] = 128M
      php_value[post_max_size] = 16M
      php_value[upload_max_filesize] = 2M
      php_value[max_input_time] = 300
      php_value[max_input_vars] = 10000
      ; php_value[date.timezone] = Europe/Riga
      

      Borre la línea timezone resaltada en el bloque de código anterior y cámbiela a su zona horaria. Puede usar esta lista de zonas horarias compatibles para encontrar la adecuada para usted. Luego, guarde y cierre el archivo.

      Ahora reinicie PHP-FPM para aplicar esta nueva configuración:

      • sudo systemctl restart php7.4-fpm.service

      Ahora puede iniciar el servidor Zabbix:

      • sudo systemctl start zabbix-server

      A continuación, compruebe si el servidor Zabbix está funcionando correctamente:

      • sudo systemctl status zabbix-server

      Verá el siguiente estado:

      Output

      ● zabbix-server.service - Zabbix Server Loaded: loaded (/lib/systemd/system/zabbix-server.service; disabled; vendor preset: enabled) Active: active (running) since Fri 2020-06-12 05:59:32 UTC; 36s ago Process: 27026 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS) ...

      Finalmente, habilite el servidor para que se inicie en el momento del arranque:

      • sudo systemctl enable zabbix-server

      El servidor está configurado y conectado a la base de datos. A continuación, configure el frontend web.

      Paso 5: Configurar los ajustes de la interfaz web de Zabbix

      La interfaz web le permite ver los informes y añadir los hosts que desea monitorizar, pero necesita cierta configuración inicial antes de poder usarla. Abra su servidor y vaya a la dirección http://zabbix_server_name o https://zabbix_server_name si configuró Let´s Encrypt. En la primera pantalla, verá un mensaje de bienvenida. Haga clic en Siguiente paso para continuar.

      En la siguiente pantalla, verá la tabla que enumera todos los requisitos previos para ejecutar Zabbix.

      Requisitos previos

      Todos los valores de esta tabla deben estar en OK, de forma que verifique que así es. Asegúrese de desplazarse hacia abajo y ver todos los requisitos previos. Una vez que haya verificado que todo está listo, haga clic en Siguiente paso para continuar.

      La siguiente pantalla pide información sobre la conexión con la base de datos.

      Conexión con la BBDD

      Le ha hablado al servidor Zabbix sobre su base de datos, pero la interfaz web de Zabbix también necesita acceder a la base de datos para administrar los hosts y leer datos. Por tanto, introduzca las credenciales de MySQL que configuró en el Paso 2. Haga clic en Siguiente paso para continuar.

      En la siguiente pantalla, puede dejar las opciones en sus valores predeterminados.

      Detalles del servidor Zabbix

      El Nombre es opcional; se usa en la interfaz web para distinguir un servidor de otro en caso de que tenga varios servidores de monitorización. Haga clic en Siguiente paso para continuar.

      La siguiente pantalla mostrará el resumen de la preinstalación para que pueda confirmar que todo es correcto.

      Resumen

      Haga clic en Siguiente paso para continuar a la pantalla final.

      Ha finalizado la configuración de la interfaz web. Este proceso crea el archivo de configuración /usr/share/zabbix/conf/zabbix.conf.php, del que podría realizar copias de seguridad para su uso en el futuro. Haga clic en Finalizar para continuar a la pantalla de inicio de sesión. El usuario predeterminado es Admin y la contraseña es zabbix.

      Antes de iniciar sesión, configure el agente Zabbix en su segundo servidor Ubuntu.

      Paso 6: Instalar y configurar el agente Zabbix

      Ahora, deberá configurar el software agente que enviará datos de monitorización al servidor Zabbix.

      Inicie sesión en el segundo servidor Ubuntu:

      • ssh sammy@second_ubuntu_server_ip_address

      Al igual que en el servidor Zabbix, ejecute los siguientes comandos para instalar el paquete de configuración del repositorio:

      • wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+focal_all.deb
      • sudo dpkg -i zabbix-release_5.0-1+focal_all.deb

      A continuación, actualice el índice del paquete:

      Luego instale el agente Zabbix:

      • sudo apt install zabbix-agent

      Aunque Zabbix es compatible con el cifrado basado en certificados, configurar una autoridad de certificado está fuera del ámbito de este tutorial. Pero puede usar claves precompartidas (PSK) para proteger la conexión entre el servidor y el agente.

      Primero, genere una PSK:

      • sudo sh -c "openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk"

      Muestre la clave usando cat para que pueda copiarla en otra parte:

      • cat /etc/zabbix/zabbix_agentd.psk

      La clave tendrá un aspecto similar a este:

      Output

      75ad6cb5e17d244ac8c00c96a1b074d0550b8e7b15d0ab3cde60cd79af280fca

      Guarde esto para más tarde; la necesitará para configurar el host.

      Ahora edite los ajustes del agente Zabbix para configurar su conexión segura al servidor Zabbix. Abra el archivo de configuración en su editor de texto:

      • sudo nano /etc/zabbix/zabbix_agentd.conf

      Cada ajuste en este archivo se documenta a través de comentarios informativos por todo el archivo, pero solo necesitará editar algunos de ellos.

      Primero tendrá que editar la dirección IP del servidor Zabbix. Busque la siguiente sección:

      /etc/zabbix/zabbix_agentd.conf

      ...
      ### Option: Server
      #       List of comma delimited IP addresses, optionally in CIDR notation, or DNS names of Zabbix servers and Zabbix proxies.
      #       Incoming connections will be accepted only from the hosts listed here.
      #       If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally
      #       and '::/0' will allow any IPv4 or IPv6 address.
      #       '0.0.0.0/0' can be used to allow any IPv4 address.
      #       Example: Server=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com
      #
      # Mandatory: yes, if StartAgents is not explicitly set to 0
      # Default:
      # Server=
      
      Server=127.0.0.1
      ...
      

      Cambie el valor predeterminado a la IP de su servidor Zabbix:

      /etc/zabbix/zabbix_agentd.conf

      ...
      Server=zabbix_server_ip_address
      ...
      

      Por defecto, el servidor Zabbix se conecta con el agente. Pero para algunas comprobaciones (por ejemplo, monitorizar los registros), se requiere una conexión inversa. Para obtener un funcionamiento correcto, deberá especificar la dirección del servidor Zabbix y un nombre de host único.

      Busque la sección que configura las comprobaciones activas y cambie los valores predeterminados:

      /etc/zabbix/zabbix_agentd.conf

      ...
      ##### Active checks related
      
      ### Option: ServerActive
      #       List of comma delimited IP:port (or DNS name:port) pairs of Zabbix servers and Zabbix proxies for active checks.
      #       If port is not specified, default port is used.
      #       IPv6 addresses must be enclosed in square brackets if port for that host is specified.
      #       If port is not specified, square brackets for IPv6 addresses are optional.
      #       If this parameter is not specified, active checks are disabled.
      #       Example: ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1]
      #
      # Mandatory: no
      # Default:
      # ServerActive=
      
      ServerActive=zabbix_server_ip_address
      
      ### Option: Hostname
      #       Unique, case sensitive hostname.
      #       Required for active checks and must match hostname as configured on the server.
      #       Value is acquired from HostnameItem if undefined.
      #
      # Mandatory: no
      # Default:
      # Hostname=
      
      Hostname=Second Ubuntu Server
      ...
      

      A continuación, busque la sección que configura la conexión segura con el servidor Zabbix y habilite el soporte con clave precompartida. Busque la sección TLSConnect, que tiene el siguiente aspecto:

      /etc/zabbix/zabbix_agentd.conf

      ...
      ### Option: TLSConnect
      #       How the agent should connect to server or proxy. Used for active checks.
      #       Only one value can be specified:
      #               unencrypted - connect without encryption
      #               psk         - connect using TLS and a pre-shared key
      #               cert        - connect using TLS and a certificate
      #
      # Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
      # Default:
      # TLSConnect=unencrypted
      ...
      

      A continuación añada esta línea para configurar el soporte de clave precompartida:

      /etc/zabbix/zabbix_agentd.conf

      ...
      TLSConnect=psk
      ...
      

      Luego, localice la sección TLSAccept, que tiene el siguiente aspecto:

      /etc/zabbix/zabbix_agentd.conf

      ...
      ### Option: TLSAccept
      #       What incoming connections to accept.
      #       Multiple values can be specified, separated by comma:
      #               unencrypted - accept connections without encryption
      #               psk         - accept connections secured with TLS and a pre-shared key
      #               cert        - accept connections secured with TLS and a certificate
      #
      # Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
      # Default:
      # TLSAccept=unencrypted
      ...
      

      Configure las conexiones entrantes para que admitan las claves precompartidas añadiendo esta línea:

      /etc/zabbix/zabbix_agentd.conf

      ...
      TLSAccept=psk
      ...
      

      Luego, localice la sección TLSPSKIdentity, que tiene el siguiente aspecto:

      /etc/zabbix/zabbix_agentd.conf

      ...
      ### Option: TLSPSKIdentity
      #       Unique, case sensitive string used to identify the pre-shared key.
      #
      # Mandatory: no
      # Default:
      # TLSPSKIdentity=
      ...
      

      Elija un nombre único para identificar su clave precompartida añadiendo esta línea:

      /etc/zabbix/zabbix_agentd.conf

      ...
      TLSPSKIdentity=PSK 001
      ...
      

      Usará esto como el PSK ID cuando añada su host a través de la interfaz web de Zabbix.

      A continuación establezca la opción que apunta a su clave precompartida creada previamente. Busque la opción TLSPSKFile:

      /etc/zabbix/zabbix_agentd.conf

      ...
      ### Option: TLSPSKFile
      #       Full pathname of a file containing the pre-shared key.
      #
      # Mandatory: no
      # Default:
      # TLSPSKFile=
      ...
      

      Añada esta línea para apuntar el agente Zabbix al archivo PSK que ha creado:

      /etc/zabbix/zabbix_agentd.conf

      ...
      TLSPSKFile=/etc/zabbix/zabbix_agentd.psk
      ...
      

      Guarde y cierre el archivo. Ahora puede reiniciar el agente Zabbix y configurarlo para que se inicie en el arranque:

      • sudo systemctl restart zabbix-agent
      • sudo systemctl enable zabbix-agent

      Por seguridad, compruebe que el agente Zabbix se está ejecutando correctamente:

      • sudo systemctl status zabbix-agent

      Verá el siguiente estado, que indica que el agente se está ejecutando:

      Output

      ● zabbix-agent.service - Zabbix Agent Loaded: loaded (/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-06-12 08:19:54 UTC; 25s ago ...

      El agente escuchará en el puerto 10050 las conexiones del servidor. Configure UFW para permita las conexiones con este puerto:

      Puede obtener más información sobre UFW en Cómo configurar un firewall con UFW en Ubuntu 20.04.

      Su agente está listo para enviar datos al servidor Zabbix. Pero para usarlo, tendrá que vincularlo desde la consola web del servidor. En el siguiente paso, completará la configuración.

      Paso 7: Añadir el nuevo host al servidor Zabbix

      Instalar un agente en un servidor que desea monitorizar es solo la mitad del proceso. Cada host que desee monitorizar debe estar registrado en el servidor Zabbix, lo cual puede hacer a través de la interfaz web.

      Inicie sesión en la interfaz web del servidor Zabbix navegando a la dirección http://zabbix_server_name o https://zabbix_server_name:

      La pantalla de inicio de sesión de Zabbix

      Cuando haya iniciado sesión, haga clic en Configuración y, luego, en Hosts en la barra de navegación izquierda. A continuación haga clic en el botón Crear host en la esquina superior derecha de la pantalla. Esto abrirá la página de configuración del host.

      Crear un host

      Ajuste el Nombre del host y la Dirección IP para reflejar el nombre de host y la dirección IP de su segundo servidor Ubuntu y luego añada el host a un grupo. Puede seleccionar un grupo existente, por ejemplo Servidores Linux o crear su propio grupo. El host puede estar en varios grupos. Para hacer esto, introduzca el nombre de un grupo existente o uno nuevo en el campo Grupos y seleccione el valor deseado de la lista propuesta.

      Antes de añadir el grupo, haga clic en la pestaña Plantillas.

      Añadir una plantilla al host

      Escriba Template OS Linux by Zabbix agent en el campo Buscar y selecciónela de la lista para añadir esta plantilla al host.

      A continuación, navegue a la pestaña Cifrado. Seleccione PSK para Conexiones al host y Conexiones desde el host. A continuación, establezca la identidad PSK a PSK 001, que es el valor del ajuste TLSPSKIdentity del agente Zabbix que configuró previamente. Ahora configure el valor PSK a la clave que generó para el agente Zabbix. Es la almacenada en el archivo /etc/zabbix/zabbix_agentd.psk en el equipo agente.

      Configurar el cifrado

      Finalmente, haga clic en el botón Añadir en la parte inferior del formulario para crear el host.

      Verá su nuevo host en la lista. Espere un minuto y vuelva a cargar la página para ver etiquetas verdes que indican que todo funciona bien y la conexión está cifrada.

      Zabbix muestra su nuevo host

      Si tiene servidores adicionales que desea monitorizar, inicie sesión en cada host, instale el agente Zabbix, genere una PSK, configure el agente y añada el host a la interfaz web siguiendo los mismos pasos que siguió para añadir su primer host.

      El servidor Zabbix está ahora monitorizando su segundo servidor Ubuntu. Ahora, configure notificaciones por correo electrónico para recibir avisos sobre problemas.

      Paso 8: Configurar notificaciones por correo electrónico

      Zabbix admite automáticamente muchos tipos de notificaciones: correo electrónico, OTRS, Slack, Telegram, SMS, etc. Puede ver la lista completa de integraciones en el sitio web de Zabbix.

      Como ejemplo, este tutorial configurará notificaciones para el tipo de medio Correo electrónico.

      Haga clic en Administración, y a continuación en Tipos de medio en la barra de navegación izquierda. Verá la lista de todos los tipos de medios. Existen dos opciones preconfiguradas para correos electrónicos: para la notificación de texto sin formato y para las notificaciones HTML. En este tutorial, usará la notificación de texto sin formato. Haga clic en Correo electrónico.

      Ajuste las opciones SMTP según los ajustes proporcionados por su servicio de correo electrónico. Este tutorial utiliza las capacidades SMTP de Gmail para configurar las notificaciones por correo electrónico; si desea obtener más información sobre cómo configurar esto, consulte Cómo usar el servicio SMTP de Google.

      Nota: Si utiliza la Verificación de 2 pasos con Gmail, deberá generar una contraseña de aplicación para Zabbix. Solo tendrá que introducir una contraseña de aplicación una vez durante la configuración. Encontrará instrucciones sobre cómo generar esta contraseña en el Centro de Ayuda de Google.

      Si está usando Gmail, escriba smtp.gmail.com para el campo Servidor SMTP, 465 para el campo Puerto del servidor SMTP, gmail.com para SMTP helo, y su correo electrónico para Correo electrónico SMTP. Luego seleccione SSL/TLS para Seguridad de la conexión y Nombre de usuario y contraseña para Autenticación. Introduzca su dirección de Gmail como el Nombre de usuario, y la Contraseña de aplicación que generó desde su cuenta de Google como Contraseña.

      Configurar el tipo de medio de correo electrónico

      En la pestaña Plantillas de mensaje, puede ver la lista de mensajes predefinidos para varios tipos de notificaciones. Finalmente, haga clic en el botón Actualizar en la parte inferior del formulario para actualizar los parámetros del correo electrónico.

      Ahora puede probar el envío de notificaciones. Para hacer esto, haga clic en el enlace subrayado Prueba en la línea correspondiente.

      Ahora verá una ventana emergente. Introduzca su dirección de correo electrónico en el campo Enviar a *y haga clic en el botón *Prueba. Verá un mensaje sobre el envío correcto y recibirá un mensaje de prueba.

      Correo electrónico de prueba

      Cierre la ventana emergente haciendo clic en el botón Cancelar.

      Ahora cree un nuevo usuario. Haga clic en Administración y, a continuación, en** Usuarios** en la barra de navegación izquierda. Verá la lista de usuarios. A continuación haga clic en el botón Crear usuario en la esquina superior derecha de la pantalla. Esto abrir la página de configuración del usuario:

      Crear un usuario

      Introduzca el nuevo nombre de usuario en el campo Alias y configure una nueva contraseña. A continuación, añada el usuario al grupo del administrador. Escriba Zabbix administrators en el campo Grupos y selecciónelo desde la lista propuesta.

      Una vez que haya añadido el grupo, haga clic en la pestaña Medios y haga clic en el enlace subrayado Añadir (no el botón Añadir debajo). Ahora verá una ventana emergente.

      Añadir un correo electrónico

      Seleccione la opción Correo electrónico desde el desplegable Tipo. Introduzca su dirección de correo en el campo Enviar a. Puede dejar el resto de las opciones en sus valores predeterminados. Haga clic en el botón Añadir en la parte inferior para enviar.

      Ahora navegue a la pestaña Permisos. Seleccione Zabbix Super Admin desde el menú desplegable Tipo de usuario.

      Finalmente, haga clic en el botón Añadir en la parte inferior del formulario para crear el usuario.

      Nota: Usar la contraseña predeterminada no es seguro. Para cambiar la contraseña del usuario integrado Admin, haga clic en el alias en la lista de usuarios. Luego haga clic en Cambiar contraseña, introduzca una nueva contraseña y confirme los cambios haciendo clic en el botón Actualizar.

      Ahora debe habilitar las notificaciones. Haga clic en la pestaña Configuración y a continuación en Acciones en la barra de navegación izquierda. Verá una acción preconfigurada, que es responsable de enviar notificaciones a todos los administradores Zabbix. Puede revisar y cambiar los ajustes haciendo clic en su nombre. A efectos de este tutorial, utilice los parámetros predeterminados. Para habilitar la acción, haga clic en el enlace rojo Deshabilitado en la columna Estado.

      Ahora está listo para recibir alertas. En el siguiente paso, generará una para probar la configuración de notificaciones.

      Paso 9: Generar una alerta de prueba

      En este paso, generará una alerta de prueba para garantizar que todo está conectado. Por defecto, Zabbix realiza un seguimiento de la cantidad de espacio libre en el disco de su servidor. Detecta automáticamente todos los montajes en disco y añade las comprobaciones correspondientes. Este descubrimiento se ejecuta cada hora, de forma que deberá esperar un poco para que se active la notificación.

      Cree un archivo temporal que sea lo suficientemente grande para activar la alerta de uso del sistema de archivos de Zabbix. Para hacer esto, inicie sesión en su segundo servidor Ubuntu si aún no está conectado:

      • ssh sammy@second_ubuntu_server_ip_address

      A continuación, determine cuánto espacio libre tiene en el servidor. Puede usar el comando df para averiguarlo:

      El comando df informará del uso del espacio en el disco de su sistema de archivos, y -h hará que el resultado sea legible para el ser humano. Verá un resultado como el siguiente:

      Output

      Filesystem Size Used Avail Use% Mounted on /dev/vda1 78G 1.4G 77G 2% /

      En este caso, el espacio libre es 77G. Su espacio libre puede ser diferente.

      Utilice el comando fallocate, que le permite preasignar o desasignar el espacio a un archivo, para crear un archivo que ocupa más del 80 % del espacio disponible en el disco. Esto será suficiente para activar la alerta:

      • fallocate -l 70G /tmp/temp.img

      Tras aproximadamente una hora, Zabbix activará una alerta sobre la cantidad de espacio libre en el disco y ejecutará la acción que configuró, enviando el mensaje de notificación. Puede comprobar su buzón de entrada en busca del mensaje del servidor Zabbix. Verá un mensaje como este:

      Problem started at 09:49:08 on 2020.06.12
      Problem name: /: Disk space is low (used > 80%)
      Host: Second Ubuntu Server
      Severity: Warning
      Operational data: Space used: 71.34 GB of 77.36 GB (92.23 %)
      Original problem ID: 106
      

      También puede navegar a la pestaña Monitorización y luego a Panel de control para ver la notificación y sus detalles.

      Panel de control principal

      Ahora que sabe que las alertas están funcionando, elimine el archivo temporal que creó para que pueda reclamar su espacio en disco:

      Tras un minuto Zabbix enviará un mensaje de recuperación y la alerta desaparecerá del panel de control principal.

      Conclusión

      En este tutorial, ha aprendido a configurar una solución de monitorización sencilla y segura que le ayudará a monitorizar el estado de sus servidores. Ahora puede avisarle si existen problemas, y podrá analizar los procesos que se producen en su infraestructura de TI.

      Para obtener más información sobre cómo configurar una infraestructura de monitorización, consulte nuestra página sobre el tema Monitorización.



      Source link

      Como instalar e configurar o Zabbix para monitorar servidores remotos com segurança no Ubuntu 20.04


      O autor selecionou o Computer History Museum para receber uma doação como parte do programa Write for DOnations.

      Introdução

      O Zabbix é um software de monitoramento de código aberto para redes e aplicativos. Ele oferece monitoramento em tempo real de milhares de métricas coletadas a partir de servidores, máquinas virtuais, dispositivos de rede e aplicativos Web. Essas métricas podem ajudar você a determinar a integridade atual da sua infraestrutura de TI e a detectar problemas com componentes de hardware ou software antes que os clientes se queixem. As informações úteis são armazenadas em um banco de dados para que você possa analisar os dados ao longo do tempo e melhorar a qualidade dos serviços prestados ou planejar atualizações para o seu equipamento.

      O Zabbix utiliza diversas opções para coletar métricas, incluindo o monitoramento sem agente de serviços de usuário e arquitetura cliente-servidor. Para coletar métricas do servidor, ele usa um pequeno agente no cliente monitorado para coletar dados e enviá-los para o servidor do Zabbix. O Zabbix suporta comunicação criptografada entre o servidor e os clientes conectados, para que seus dados estejam protegidos enquanto viajam por redes inseguras.

      O servidor do Zabbix armazena seus dados em um banco de dados relacional alimentado pelo MySQL ou PostgreSQL. Você também pode armazenar dados históricos em bancos de dados NoSQL como o Elasticsearch e o TimescaleDB. O Zabbix fornece uma interface Web para que você possa visualizar dados e configurar as definições do sistema.

      Neste tutorial, você irá configurar o Zabbix em duas máquinas Ubuntu 20.04. Uma será configurada como o servidor do Zabbix e a outra como um cliente que você irá monitorar. O servidor do Zabbix irá usar um banco de dados MySQL para gravar os dados de monitoramento e usar o Nginx para atender à interface Web.

      Pré-requisitos

      Para seguir este tutorial, será necessário:

      • Dois servidores Ubuntu 20.04 configurados seguindo o Guia de configuração inicial de servidor para o Ubuntu 20.04, incluindo um usuário não root com privilégios sudo e um firewall configurado com o ufw. Em um dos servidores, você irá instalar o Zabbix; este tutorial irá se referir a ele como o servidor Zabbix. Ele irá monitorar seu segundo servidor; este segundo servidor será referido como o segundo servidor Ubuntu.

      • O servidor que irá executar o servidor Zabbix precisa do Nginx, MySQL e PHP instalados. Siga os Passos 1-3 do nosso guia sobre a Pilha LEMP no Ubuntu 20.04 para configurá-los em seu servidor Zabbix.

      • Um nome de domínio registrado. Este tutorial utilizará your_domain durante todo o processo. Você pode comprar um nome de domínio do Namecheap, obter um gratuitamente com o Freenom ou usar o registrador de domínios de sua escolha.

      • Ambos os registros de DNS a seguir serão configurados para o seu servidor Zabbix. Se você estiver usando a DigitalOcean, consulte nossa documentação de DNS para maiores detalhes sobre como adicioná-los.

        • Um registro A com your_domain apontando para o endereço IP público do seu servidor Zabbix.
        • Um registro A com o www.your_domain apontando para o endereço de IP público do seu servidor Zabbix.

      Além disso, o servidor Zabbix é usado para acessar informações valiosas sobre sua infraestrutura. Dessa forma, para garantir que usuários não autorizados tenham acesso a ele, é importante que você mantenha seu servidor seguro instalando um certificado TLS/SSL. Isso é opcional, mas altamente recomendado. Se você quiser proteger seu servidor, siga o guia do Let’s Encrypt no Ubuntu 20.04 depois do Passo 3 deste tutorial.

      Passo 1 — Instalando o servidor Zabbix

      Primeiro, você precisa instalar o Zabbix no servidor onde instalou o MySQL, o Nginx e o PHP. Faça login nesta máquina com seu usuário não root:

      • ssh sammy@zabbix_server_ip_address

      O Zabbix está disponível no gerenciador de pacotes do Ubuntu, mas está desatualizado. Sendo assim, use o repositório oficial do Zabbix para instalar a versão estável mais recente. Baixe e instale o pacote de configuração do repositório:

      • wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+focal_all.deb
      • sudo dpkg -i zabbix-release_5.0-1+focal_all.deb

      Você verá o seguinte resultado:

      Output

      Selecting previously unselected package zabbix-release. (Reading database ... 64058 files and directories currently installed.) Preparing to unpack zabbix-release_5.0-1+focal_all.deb ... Unpacking zabbix-release (1:5.0-1+focal) ... Setting up zabbix-release (1:5.0-1+focal) ...

      Atualize o índice de pacotes para que o novo repositório seja incluído:

      Em seguida, instale o servidor Zabbix e o front-end Web com suporte ao banco de dados MySQL:

      • sudo apt install zabbix-server-mysql zabbix-frontend-php

      Além disso, instale o agente Zabbix, que lhe permitirá coletar dados sobre o status do próprio servidor Zabbix.

      • sudo apt install zabbix-agent

      Antes de poder utilizar o Zabbix, você precisa configurar um banco de dados para conter os dados que o servidor Zabbix irá coletar de seus agentes. Você pode fazer isso no próximo passo.

      Passo 2 — Configurando o banco de dados MySQL para o Zabbix

      Você precisa criar um novo banco de dados MySQL e preenchê-lo com algumas informações básicas para torná-lo adequado para o Zabbix. Você também criará um usuário específico para este banco de dados para que o Zabbix não faça login no MySQL com a conta root.

      Faça login no MySQL com o usuário root:

      Crie o banco de dados Zabbix com suporte a caracteres UTF-8:

      • create database zabbix character set utf8 collate utf8_bin;

      Em seguida, crie o usuário que o servidor Zabbix irá usar,dê-lhe acesso ao novo banco de dados e defina a senha para o usuário:

      • create user zabbix@localhost identified by 'your_zabbix_mysql_password';
      • grant all privileges on zabbix.* to zabbix@localhost;

      Isso ajeita a situação do usuário e do banco de dados. Saia do console do banco de dados

      Em seguida, será necessário importar o esquema inicial e os dados. A instalação do Zabbix forneceu-lhe um arquivo que configura isso.

      Execute o comando a seguir para configurar o esquema e importar os dados no banco de dados zabbix. Use o zcat, já que os dados no arquivo estão comprimidos:

      • zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

      Digite a senha para o usuário zabbix do MySQL que você configurou quando solicitado.

      Este comando pode demorar um ou dois minutos para ser executado. Se aparecer o erro ERROR 1045 (28000): Access need for userzabbix@'localhost' (using password: YES), então certifique-se de que você usou a senha certa para o usuário zabbix.

      Para que o servidor Zabbix use este banco de dados, é preciso definir a senha do banco de dados no arquivo de configuração do servidor Zabbix. Abra o arquivo de configuração no seu editor de texto preferido. Este tutorial usará o nano.

      • sudo nano /etc/zabbix/zabbix_server.conf

      Procure pela seguinte parte do arquivo:

      /etc/zabbix/zabbix_server.conf

      ...
      ### Option: DBPassword                           
      #       Database password. Ignored for SQLite.   
      #       Comment this line if no password is used.
      #                                                
      # Mandatory: no                                  
      # Default:                                       
      # DBPassword=
      ...
      

      Esses comentários no arquivo explicam como se conectar ao banco de dados. Você precisa definir o valor do DBPassword no arquivo como sendo a senha para o usuário do seu banco de dados. Adicione esta linha após esses comentários para configurar o banco de dados:

      /etc/zabbix/zabbix_server.conf

      ...
      DBPassword=your_zabbix_mysql_password
      ...
      

      Salve e feche o zabbix_server.conf pressionando CTRL+X, seguido de Y e, em seguida, ENTER se estiver usando o nano.

      Agora, você configurou o servidor Zabbix para se conectar ao banco de dados. Em seguida, você irá configurar o servidor Web do Nginx para atender o front-end do Zabbix.

      Passo 3 — Configurando o Nginx para o Zabbix

      Para configurar o Nginx automaticamente, instale o pacote de configuração automática:

      • sudo apt install zabbix-nginx-conf

      Como resultado, você receberá o arquivo de configuração /etc/zabbix/nginx.conf, bem como um link para ele no diretório de configuração do Nginx /etc/nginx/conf.d/zabbix.conf.

      Em seguida, é preciso fazer alterações neste arquivo. Abra o arquivo de configuração:

      • sudo nano /etc/zabbix/nginx.conf

      O arquivo contém uma configuração de bloco do servidor Nginx gerada automaticamente. Ele contém duas linhas que determinam o nome do servidor e em qual porta ele está escutando:

      /etc/zabbix/nginx.conf

      server {
      #        listen          80;
      #        server_name     example.com;
      ...
      

      Descomente as duas linhas, e substitua o example.com pelo nome do seu domínio. Suas configurações vão ficar assim:

      /etc/zabbix/nginx.conf

      server {
              listen          80;
              server_name     your_domain;
      ...
      

      Salve e feche o arquivo. Em seguida, teste para garantir que não haja erros de sintaxe em qualquer um dos seus arquivos do Nginx e recarregue a configuração:

      • sudo nginx -t
      • sudo nginx -s reload

      Agora que o Nginx está configurado para atender o front-end do Zabbix, você fará algumas modificações em sua configuração do PHP para que a interface Web do Zabbix funcione corretamente.

      Nota: Como mencionado na seção de pré-requisitos, é recomendado que você habilite o SSL/TLS no seu servidor. Se você quiser fazer isso, siga nosso tutorial sobre o Let’s Encrypt no Ubunutu 20.04 antes de seguir para o Passo 4 para obter um certificado SSL gratuito para o Nginx. Este processo irá detectar automaticamente o bloco do seu servidor Zabbix e configurá-lo para o HTTPS. Depois de obter seus certificados SSL/TLS, retorne para completar este tutorial.

      Passo 4 — Configurando o PHP para o Zabbix

      A interface Web do Zabbix é escrita em PHP e requer algumas configurações especiais do servidor PHP. O processo de instalação do Zabbix criou um arquivo PHP-FPM de configuração que contém essas configurações. Ele está localizado no diretório /etc/zabbix e é carregado automaticamente pelo PHP-FPM. Você precisa fazer uma pequena alteração neste arquivo. Sendo assim, abra o arquivo da seguinte forma:

      • sudo nano /etc/zabbix/php-fpm.conf

      O arquivo contém as configurações PHP que atendem aos requisitos necessários para a interface Web do Zabbix. No entanto, a configuração de fuso horário vem transformada em comentário por padrão. Para garantir que o Zabbix use o horário correto, é necessário definir o fuso horário apropriado:

      /etc/zabbix/php-fpm.conf

      ...
      php_value[max_execution_time] = 300
      php_value[memory_limit] = 128M
      php_value[post_max_size] = 16M
      php_value[upload_max_filesize] = 2M
      php_value[max_input_time] = 300
      php_value[max_input_vars] = 10000
      ; php_value[date.timezone] = Europe/Riga
      

      Descomente a linha de fuso horário destacada no bloco de código anterior e altere-a para o seu fuso horário. Você pode usar esta lista de fusos horários suportados para encontrar o fuso certo para você. Então, salve e feche o arquivo.

      Agora, reinicie o PHP-FPM para aplicar essas novas configurações:

      • sudo systemctl restart php7.4-fpm.service

      Agora, você pode iniciar o servidor Zabbix:

      • sudo systemctl start zabbix-server

      Em seguida, verifique se o servidor Zabbix está sendo executado corretamente:

      • sudo systemctl status zabbix-server

      Você verá o seguinte status:

      Output

      ● zabbix-server.service - Zabbix Server Loaded: loaded (/lib/systemd/system/zabbix-server.service; disabled; vendor preset: enabled) Active: active (running) since Fri 2020-06-12 05:59:32 UTC; 36s ago Process: 27026 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS) ...

      Por fim, habilite o servidor para que seja iniciado durante a inicialização do sistema:

      • sudo systemctl enable zabbix-server

      O servidor está configurado e conectado ao banco de dados do servidor. Em seguida, configure o front-end Web.

      Passo 5 — Configurando a interface Web do Zabbix

      A interface web permite que você veja relatórios e adicione os hosts que deseja monitorar. No entanto, ela precisa de alguns ajustes iniciais antes que você possa usá-la. Inicie seu navegador e vá para o endereço http://zabbix_server_name ou https://zabbix_server_name caso tenha configurado o Let’s Encrypt. Na primeira tela, você verá uma mensagem de boas-vindas. Clique em Next step (Próximo passo) para continuar.

      Na próxima tela, você verá a tabela que lista todos os pré-requisitos para executar o Zabbix.

      Pré-requisitos

      Todos os valores nesta tabela devem ser OK. Portanto, verifique se eles estão de acordo. Certifique-se de descer e observar todos os pré-requisitos. Depois de verificar se tudo está pronto, clique em Next step para prosseguir.

      A próxima tela pede informações sobre a conexão do banco de dados.

      Conexão BD

      Você já informou o servidor Zabbix sobre seu banco de dados, mas a interface Web do Zabbix também precisa de acesso ao banco de dados para gerenciar os hosts e ler dados. Portanto, digite as credenciais do MySQL que você configurou no Passo 2. Clique em Next step para prosseguir.

      Na próxima tela, deixe as opções nos valores padrão.

      Detalhes do servidor Zabbix

      O Name é opcional; ele é usado na interface Web para distinguir um servidor de outro caso você tenha vários servidores de monitoramento. Clique em Next step para prosseguir.

      A próxima tela irá mostrar o resumo da pré-instalação para que você possa confirmar se tudo está correto.

      Resumo

      Clique em Next step para prosseguir para a tela final.

      A configuração da interface Web agora foi concluída. Esse processo cria o arquivo de configuração /usr/share/zabbix/conf/zabbix.conf.php. Se quiser, você pode fazer um backup dele para usá-lo no futuro. Clique em Finish para prosseguir para a tela de login. O usuário padrão é o Admin e a senha é zabbix.

      Antes de fazer login, configure o agente Zabbix no seu segundo servidor Ubuntu.

      Passo 6 — Instalando e configurando o agente Zabbix

      Agora, você precisa configurar o software agente que enviará dados de monitoramento para o servidor Zabbix.

      Faça login no segundo servidor Ubuntu:

      • ssh sammy@second_ubuntu_server_ip_address

      Assim como no servidor Zabbix, execute os comandos a seguir para instalar o pacote de configuração do repositório:

      • wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+focal_all.deb
      • sudo dpkg -i zabbix-release_5.0-1+focal_all.deb

      Em seguida, atualize o índice do pacote:

      Depois disso, instale o agente Zabbix:

      • sudo apt install zabbix-agent

      Embora o Zabbix dê suporte à criptografia baseada em certificados, configurar uma autoridade de certificados está fora do escopo deste tutorial. Mas é possível usar chaves pré-compartilhadas (PSK) para proteger a conexão entre o servidor e o agente.

      Primeiro, gere uma PSK:

      • sudo sh -c "openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk"

      Mostre a chave usando o cat para que você possa copiá-la em algum lugar:

      • cat /etc/zabbix/zabbix_agentd.psk

      A chave se parecerá com esta:

      Output

      75ad6cb5e17d244ac8c00c96a1b074d0550b8e7b15d0ab3cde60cd79af280fca

      Salve ela para mais tarde; você precisará dela para configurar o host.

      Agora, edite as configurações do agente Zabbix para estabelecer sua conexão segura com servidor Zabbix. Abra o arquivo de configuração do agente no seu editor de texto:

      • sudo nano /etc/zabbix/zabbix_agentd.conf

      Cada configuração dentro deste arquivo é documentada através de comentários informativos ao longo do arquivo, mas você só precisa editar algumas delas.

      Primeiro, você precisa editar o endereço IP do servidor Zabbix. Procure a seguinte sessão:

      /etc/zabbix/zabbix_agentd.conf

      ...
      ### Option: Server
      #       List of comma delimited IP addresses, optionally in CIDR notation, or DNS names of Zabbix servers and Zabbix proxies.
      #       Incoming connections will be accepted only from the hosts listed here.
      #       If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally
      #       and '::/0' will allow any IPv4 or IPv6 address.
      #       '0.0.0.0/0' can be used to allow any IPv4 address.
      #       Example: Server=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com
      #
      # Mandatory: yes, if StartAgents is not explicitly set to 0
      # Default:
      # Server=
      
      Server=127.0.0.1
      ...
      

      Mude o valor padrão para o IP do seu servidor Zabbix:

      /etc/zabbix/zabbix_agentd.conf

      ...
      Server=zabbix_server_ip_address
      ...
      

      Por padrão, o servidor Zabbix se conecta ao agente. Mas para algumas verificações (por exemplo, monitorando dos logs), uma conexão reversa é necessária. Para uma operação correta, é necessário especificar o endereço do servidor Zabbix e um nome de host único.

      Encontre a seção que configura as verificações ativas e altere os valores padrão:

      /etc/zabbix/zabbix_agentd.conf

      ...
      ##### Active checks related
      
      ### Option: ServerActive
      #       List of comma delimited IP:port (or DNS name:port) pairs of Zabbix servers and Zabbix proxies for active checks.
      #       If port is not specified, default port is used.
      #       IPv6 addresses must be enclosed in square brackets if port for that host is specified.
      #       If port is not specified, square brackets for IPv6 addresses are optional.
      #       If this parameter is not specified, active checks are disabled.
      #       Example: ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1]
      #
      # Mandatory: no
      # Default:
      # ServerActive=
      
      ServerActive=zabbix_server_ip_address
      
      ### Option: Hostname
      #       Unique, case sensitive hostname.
      #       Required for active checks and must match hostname as configured on the server.
      #       Value is acquired from HostnameItem if undefined.
      #
      # Mandatory: no
      # Default:
      # Hostname=
      
      Hostname=Second Ubuntu Server
      ...
      

      Em seguida, encontre a seção que configura a conexão segura ao servidor Zabbix e habilite o suporte às chaves pré-compartilhadas. Encontre a seção TLSConnect, que se parece com esta:

      /etc/zabbix/zabbix_agentd.conf

      ...
      ### Option: TLSConnect
      #       How the agent should connect to server or proxy. Used for active checks.
      #       Only one value can be specified:
      #               unencrypted - connect without encryption
      #               psk         - connect using TLS and a pre-shared key
      #               cert        - connect using TLS and a certificate
      #
      # Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
      # Default:
      # TLSConnect=unencrypted
      ...
      

      Em seguida, adicione esta linha para configurar o suporte às chaves pré-compartilhadas:

      /etc/zabbix/zabbix_agentd.conf

      ...
      TLSConnect=psk
      ...
      

      Depois disso, localize a seção TLSAccept, que se parece com esta:

      /etc/zabbix/zabbix_agentd.conf

      ...
      ### Option: TLSAccept
      #       What incoming connections to accept.
      #       Multiple values can be specified, separated by comma:
      #               unencrypted - accept connections without encryption
      #               psk         - accept connections secured with TLS and a pre-shared key
      #               cert        - accept connections secured with TLS and a certificate
      #
      # Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
      # Default:
      # TLSAccept=unencrypted
      ...
      

      Configure as conexões de entrada para suportarem chaves pré-compartilhadas, adicionando esta linha:

      /etc/zabbix/zabbix_agentd.conf

      ...
      TLSAccept=psk
      ...
      

      Depois disso, localize a seção TLSPSKIdentity, que se parece com esta:

      /etc/zabbix/zabbix_agentd.conf

      ...
      ### Option: TLSPSKIdentity
      #       Unique, case sensitive string used to identify the pre-shared key.
      #
      # Mandatory: no
      # Default:
      # TLSPSKIdentity=
      ...
      

      Escolha um nome único para identificar sua chave pré-compartilhada, adicionando esta linha:

      /etc/zabbix/zabbix_agentd.conf

      ...
      TLSPSKIdentity=PSK 001
      ...
      

      Você irá usá-lo como a PSK ID ao adicionar seu host através da interface Web do Zabbix.

      Então, defina a opção que aponta para sua chave pré-compartilhada previamente criada. Localize a opção TLSPSKFile:

      /etc/zabbix/zabbix_agentd.conf

      ...
      ### Option: TLSPSKFile
      #       Full pathname of a file containing the pre-shared key.
      #
      # Mandatory: no
      # Default:
      # TLSPSKFile=
      ...
      

      Adicione esta linha para apontar o agente Zabbix para o seu arquivo PSK que você criou:

      /etc/zabbix/zabbix_agentd.conf

      ...
      TLSPSKFile=/etc/zabbix/zabbix_agentd.psk
      ...
      

      Salve e feche o arquivo. Agora, você pode reiniciar o agente Zabbix e defini-lo para iniciar durante a inicialização do sistema:

      • sudo systemctl restart zabbix-agent
      • sudo systemctl enable zabbix-agent

      Para garantir que tudo esteja funcionando, verifique se o agente Zabbix está sendo executado corretamente:

      • sudo systemctl status zabbix-agent

      Você verá o seguinte status, indicando que o agente está em execução:

      Output

      ● zabbix-agent.service - Zabbix Agent Loaded: loaded (/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-06-12 08:19:54 UTC; 25s ago ...

      O agente irá escutar na porta 10050 para conexões vindas do servidor. Configure o UFW para permitir conexões nesta porta:

      Aprenda mais sobre o UFW em Como configurar um firewall com o UFW no Ubuntu 20.04.

      Seu agente agora está pronto para enviar dados para o servidor Zabbix. Mas para poder usá-lo, é necessário conectar-se a ele a partir do console Web do servidor. No próximo passo, você irá finalizar a configuração.

      Passo 7 — Adicionando o novo host ao servidor Zabbix

      Instalar um agente em um servidor que você deseja monitorar corresponde a apenas metade do processo. Cada host que você quiser monitorar precisa estar registrado no servidor Zabbix. Isso pode ser feito através da interface Web.

      Faça login na interface Web do servidor Zabbix navegando até o endereço http://zabbix_server_name ou https://zabbix_server_name:

      A tela de login do Zabbix

      Assim que estiver conectado, clique em Configuration e depois em Hosts na barra de navegação à esquerda. Então, clique no botão Create host no canto superior direito da tela. Isso abrirá a página de configuração do host.

      Criando um host

      Altere o valor do Host name (nome do host) e IP address (endereço IP) e para que reflitam o nome do host e endereço IP do seu segundo servidor Ubuntu. Em seguida, adicione o host a um grupo. Você pode selecionar um grupo existente, como por exemplo, Linux servers, ou criar seu próprio grupo. O host pode pertencer a vários grupos. Para fazer isso, digite o nome de um grupo existente ou novo no campo Groups e selecione o valor desejado na lista proposta.

      Antes de adicionar o grupo, clique na guia Templates.

      Adicionando um modelo ao host

      Digite Template OS Linux by Zabbix agent no campo Search e então selecione-o na lista para adicionar este modelo ao host.

      Em seguida, vá até a guia Encryption . Selecione PSK para ambos Connections to host e Connections from host. Então, defina PSK identity como PSK 001, que é o valor da configuração TLSPSKIdentity do agente Zabbix que você configurou anteriormente. Então, defina o valor de PSK como a chave que você gerou para o agente Zabbix. Ela é aquela armazenada no arquivo /etc/zabbix/zabbix_agentd.psk na máquina do agente.

      Configurando a criptografia

      Por fim, clique no botão Add no final do formulário para criar o host.

      Você verá seu novo host na lista. Espere por um minuto e recarregue a página. Você verá rótulos verdes indicando que tudo está funcionando corretamente e que a conexão está criptografada.

      Zabbix shows your new host

      Caso tenha servidores adicionais que precise monitorar, faça login em cada host, instale o agente Zabbix, gere uma chave PSK, configure o agente e adicione o host à interface Web seguindo os mesmo passos que você seguiu para adicionar seu primeiro host.

      O servidor Zabbix agora está monitorando seu segundo servidor Ubuntu. Agora, configure notificações de e-mail para ser notificado sobre problemas que venham a acontecer.

      Passo 8 — Configurando as notificações de e-mail

      O Zabbix é compatível automaticamente com muitos tipos de notificações: e-mail, OTRS, Slack, Telegram, SMS, etc. Veja a lista completa de integrações no site do Zabbix.

      Para exemplificar, este tutorial irá configurar notificações para o tipo de mídia Email.

      Clique em Administration e então em Media types na barra de navegação à esquerda. Você verá a lista de todos os tipos de mídia. Existem duas opções pré-configuradas para e-mails: notificação com texto sem formatação e as notificações em HTML. Neste tutorial você irá usar uma notificação com texto sem formatação. Clique em Email.

      Ajuste as opções SMTP de acordo com as configurações fornecidas pelo seu serviço de e-mail. Este tutorial usa as capacidades SMTP do Gmail para configurar as notificações de e-mail; caso queira obter mais informações sobre como fazer esta configuração, consulte How To Use Google’s SMTP Server.

      Nota: se você usar a verificação de dois passos com o Gmail, é necessário gerar uma senha de app para o Zabbix. Será necessário inserir uma senha de app apenas uma vez durante a configuração. Encontre mais instruções sobre como gerar esta senha no Google Help Center.

      Se estiver usando o Gmail, digite smtp.gmail.com no campo SMTP server, 465 no campo SMTP server port, gmail.com em SMTP helo e seu e-mail em SMTP email. Em seguida, escolha SSL/TLS para Connection security e Username and password para Authentication. Digite seu endereço Gmail em Username, e a senha do app que você gerou a partir da sua conta Google em Password.

      Configurando o tipo e-mail de mídia

      Na guia Message templates, você pode ver a lista de mensagens pré-definidas para vários tipos de notificações. Por fim, clique no botão Update no final do formulário para atualizar os parâmetros de e-mail.

      Agora, você pode testar o envio de notificações. Para fazer isso, clique no link sublinhado Test na linha correspondente.

      Uma janela pop-up aparecerá. Digite seu endereço de e-mail no campo Send to e clique no botão Test. Você verá uma mensagem sobre o envio ter sido realizado com sucesso e receberá uma mensagem de teste.

      Testando o e-mail

      Feche o pop-up clicando no botão Cancel.

      Agora, crie um novo usuário. Clique em Administration, e então em Users na barra de navegação à esquerda. Você verá a lista de usuários. Em seguida, clique no botão Create user no canto superior direito da tela. Isso abrirá a página de configuração do usuário:

      Criando um usuário

      Digite o novo nome de usuário no campo Alias e configure uma nova senha. Em seguida, adicione o usuário ao grupo de administradores. Digite Zabbix administrators no campo Groups e selecione-o na lista proposta.

      Depois de ter adicionado o grupo, clique na guia Media e clique no link Add sublinhado (e não no botão Add abaixo dele). Uma janela pop-up aparecerá.

      Adicionando um e-mail

      Selecione a opção Email na lista suspensa Type. Digite seu endereço de e-mail no campo Send to . Você pode deixar o resto das opções em seus valores padrão. Clique no botão Add no final para enviar.

      Agora, navegue até a guia Permission. Selecione Zabbix Super Admin no menu suspenso User type.

      Por fim, clique no botão Add no final do formulário para criar o usuário.

      Nota: Usar a senha padrão não é seguro. Para alterar a senha do usuário Admin embutido, clique no alias (apelido) dado na lista de usuários. Em seguida, clique em Change password, digite uma nova senha e confirme as alterações clicando no botão Update.

      Agora, você precisa habilitar as notificações. Clique na guia Configuration e então Actions na barra de navegação à esquerda. Você verá uma ação pré-configurada, responsável por enviar notificações para todos os administradores do Zabbix. Para revisar e alterar as configurações, clique em seu nome. Para os fins deste tutorial, use os parâmetros padrão. Para habilitar a ação, clique no link Disabled vermelho na coluna Status.

      Agora, tudo está pronto para receber alertas. No próximo passo, você irá gerar um alerta para testar sua configuração de notificação.

      Passo 9 — Gerando um alerta de teste

      Neste passo, você irá gerar um alerta de teste para garantir que tudo esteja conectado. Por padrão, o Zabbix mantém o controle da quantidade de espaço em disco livre em seu servidor. Ele detecta automaticamente todas as montagens de disco e adiciona as verificações correspondentes. Essa descoberta é executada a cada hora, então você precisa esperar um tempo para que a notificação seja ativada.

      Crie um arquivo temporário que seja grande o suficiente para acionar o alerta de uso do sistema de arquivos do Zabbix. Para fazer isso, faça login em seu segundo servidor Ubuntu caso ainda não esteja conectado:

      • ssh sammy@second_ubuntu_server_ip_address

      Em seguida, determine quanto espaço livre você tem no servidor. Use o comando df para descobrir:

      O comando df irá relatar o uso do espaço em disco do seu sistema de arquivos, e o -h tornará o resultado humanamente legível. Você verá uma saída como a seguinte:

      Output

      Filesystem Size Used Avail Use% Mounted on /dev/vda1 78G 1.4G 77G 2% /

      Neste caso, o espaço livre é 77G. Seu espaço livre pode ser diferente.

      Use o comando fallocate, que lhe permite pré-alocar ou desalocar espaço para um arquivo de forma a criar um arquivo que ocupe mais de 80% do espaço em disco disponível. Isso será o suficiente para acionar o alerta:

      • fallocate -l 70G /tmp/temp.img

      Após cerca de uma hora, o Zabbix acionará um alerta sobre a quantidade de espaço em disco livre e executará a ação que você configurou, enviando a mensagem de notificação. Você pode verificar sua caixa de entrada para ver a mensagem vinda do servidor Zabbix. A mensagem será parecida com esta:

      Problem started at 09:49:08 on 2020.06.12
      Problem name: /: Disk space is low (used > 80%)
      Host: Second Ubuntu Server
      Severity: Warning
      Operational data: Space used: 71.34 GB of 77.36 GB (92.23 %)
      Original problem ID: 106
      

      Também é possível navegar até a guia Monitoring e então Dashboard para ver a notificação e os detalhes dela.

      Painel principal

      Agora que você sabe que os alertas estão funcionando, exclua o arquivo temporário que você criou para recuperar seu espaço em disco:

      Depois de um minuto o Zabbix enviará a mensagem de recuperação e o alerta desaparecerá do painel principal.

      Conclusão

      Neste tutorial, você aprendeu como configurar uma solução de monitoramento simples e segura que irá ajudá-lo a monitorar o estado dos seus servidores. Agora, ele é capaz de alertá-lo sobre problemas e você tem a oportunidade de analisar os processos que ocorrem em sua infraestrutura de TI.

      Para saber mais sobre como montar uma infraestrutura de monitoramento, confira Monitoring topic page.



      Source link