Cómo configurar el registro de HAProxy con Rsyslog en Rocky Linux 8 [Inicio rápido]

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Instalación y habilitación de HAProxy
  • Paso 2: Configuración de directivas de registro de HAProxy
  • Paso 3: Configuración de Rsyslog para recopilar registros de HAProxy
  • Paso 4 — (Opcional) Configuración de SELinux
  • Paso 5: Prueba del registro de HAProxy
  • Conclusión
  • HAProxy, que significa High Availability Proxy, es un servidor proxy basado en TCP y HTTP muy utilizado que se ejecuta en Linux, Solaris y FreeBSD. Se utiliza para equilibrar la carga de las aplicaciones distribuyendo las solicitudes entre varios servidores y para garantizar que las aplicaciones estén altamente disponibles para los usuarios.

    De manera predeterminada, en muchas instalaciones de Rocky Linux 8, HAProxy no está configurado para escribir su salida de registro en un archivo. Este tutorial de inicio rápido explicará cómo configurar el registro de HAProxy con Rsyslog mediante un socket de dominio Unix para lograr confiabilidad, velocidad y seguridad.

    Prerrequisitos

    Para completar este tutorial, necesitará un servidor que ejecute Rocky Linux 8. Este servidor debe tener un usuario no root con privilegios administrativos. Para configurarlo, siga la guía de configuración inicial del servidor para el tutorial de Rocky Linux 8.

    Paso 1: Instalación y habilitación de HAProxy

    Para instalar HAProxy, ejecute el siguiente dnfcomando:

    1. sudo dnf install haproxy

    Cuando se le solicite, Is this ok [y/N]:ingrese yy presione RETURNpara instalar el paquete.

    Una vez que haya instalado HAProxy, habilítelo e inícielo usando el systemctlcomando:

    1. sudo systemctl enable haproxy.service

    Debería recibir el siguiente resultado:

    OutputCreated symlink /etc/systemd/system/multi-user.target.wants/haproxy.service → /usr/lib/systemd/system/haproxy.service.

    Con el servicio HAProxy ahora habilitado, puede iniciarlo para asegurarse de que se ejecute con una configuración predeterminada en su servidor:

    1. sudo systemctl start haproxy.service

    A continuación, examine el estado de HAProxy para asegurarse de que se esté ejecutando:

    1. sudo systemctl status haproxy.service

    Debería recibir un resultado como el siguiente. Observe la active (running)parte resaltada del resultado. Si su servidor muestra la misma sección resaltada, entonces HAProxy se está ejecutando correctamente en su servidor y puede continuar con la configuración del registro.

    Output● haproxy.service - HAProxy Load Balancer     Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)     Active: active (running) since Wed 2020-09-09 21:16:39 UTC; 4min 39s ago   Process: 21340 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q (code=exited, status=0/SUCCESS)   Main PID: 21341 (haproxy)      Tasks: 2 (limit: 2881)     Memory: 2.7M     CGroup: /system.slice/haproxy.service             ├─21341 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid. . .

    Si el resultado es diferente o el estado muestra algo como Active: failed, siga los pasos de solución de problemas del tutorial Cómo solucionar errores comunes de HAProxy para determinar qué impide que HAProxy se inicie correctamente.

    Una vez que haya confirmado que HAProxy está habilitado y en ejecución, puede continuar con el siguiente paso, que es configurar las directivas de registro de HAProxy.

    Paso 2: Configuración de directivas de registro de HAProxy

    Para configurar las directivas de registro de HAProxy, abra /etc/haproxy/haproxy.cfgen visu editor preferido:

    1. sudo vi /etc/haproxy/haproxy.cfg

    Presione ipara cambiar al INSERTmodo, luego busque la línea log 127.0.0.1 local2y coméntela agregando un #carácter al comienzo de la línea, como se resalta en el siguiente ejemplo:

    /etc/haproxy/haproxy.cfg

    . . .# 2) configure local2 events to go to the /var/log/haproxy.log#   file. A line like the following can be added to#   /etc/sysconfig/syslog##    local2.*                       /var/log/haproxy.log#    #log         127.0.0.1 local2    chroot      /var/lib/haproxy    pidfile     /var/run/haproxy.pid. . .

    Ahora agregue una línea directamente después de la línea comentada con el siguiente contenido:

        log         /dev/log local0

    La sección completa /etc/haproxy/haproxy.cfgque editaste debe contener las siguientes líneas:

    /etc/haproxy/haproxy.cfg

    . . .#    local2.*                       /var/log/haproxy.log#     #log         127.0.0.1 local2     log         /dev/log local0     chroot      /var/lib/haproxy     pidfile     /var/run/haproxy.pid. . .

    La chrootlínea es importante porque restringe el proceso HAProxy al acceso a los archivos del /var/lib/haproxydirectorio únicamente. La log /dev/log local0línea creará un archivo dentro de ese directorio que Rsyslog utilizará para recopilar las entradas del registro.

    Una vez que haya terminado de editar las loglíneas en /etc/haproxy/haproxy.cfg, guarde y cierre el archivo presionando ESC, escribiendo :wqy presionando ENTER.

    El último paso que debes completar en esta sección es crear el /var/lib/haproxy/devdirectorio ya que no existe por defecto.

    Cree el directorio usando el mkdircomando y luego reinicie HAProxy:

    1. sudo mkdir /var/lib/haproxy/dev
    2. sudo systemctl restart haproxy.service

    Ya ha configurado HAProxy para enviar sus registros a un socket de dominio Unix que reside en /var/lib/haproxy/dev/log. En el siguiente paso, configurará Rsyslog para crear y acceder al socket.

    Paso 3: Configuración de Rsyslog para recopilar registros de HAProxy

    La configuración predeterminada de Rsyslog en Rocky Linux 8 no maneja los registros de HAProxy. Para recopilar registros del servicio HAProxy, abra un nuevo archivo /etc/rsyslog.d/99-haproxy.confcon visu editor preferido:

    1. sudo vi /etc/rsyslog.d/99-haproxy.conf

    Presione ipara cambiar al INSERTmodo, luego pegue las siguientes líneas en el archivo:

    /etc/rsyslog.d/99-haproxy.conf

    $AddUnixListenSocket /var/lib/haproxy/dev/log# Send HAProxy messages to a dedicated logfile:programname, startswith, "haproxy" {  /var/log/haproxy.log  stop}

    La $AddUnixListenSocketdirectiva le indica a Rsyslog que cree un socket de dominio Unix en la ubicación especificada, en este caso /var/lib/haproxy/dev/log. La :programname, startswith, "haproxy"sección especifica el archivo en el que Rsyslog escribirá las entradas de registro que recopile del socket.

    Una vez que haya terminado de editar /etc/rsyslog.d/99-haproxy.conf, guarde y cierre el archivo presionando ESC, escribiendo :wqy presionando ENTER.

    Ahora ha configurado Rsyslog para leer las entradas de registro del socket de dominio Unix /var/lib/haproxy/dev/logy escribirlas en un archivo de registro en /var/log/haproxy.log.

    Sin embargo, antes de reiniciar Rsyslog deberá determinar si SELinux está aplicando el control de acceso en su sistema Rocky Linux 8.

    Para comprobar la política actual de SELinux, ejecute lo siguiente:

    1. getenforce

    Recibirá uno de los siguientes resultados:

    • Enforcing– En este modo, SELinux aplica controles de acceso en su sistema. Deberá completar la siguiente sección opcional Paso 4: Configuración de SELinux .
    • Permissive– En este caso, SELinux registra todos los intentos de acceso en su archivo de registro, pero no aplica controles de acceso en su sistema.
    • Disabled– Si SELinux está deshabilitado, no registrará ni aplicará ninguna política de control de acceso en su sistema.

    Si el getenforcecomando devolvió Permissiveo Disabled, puede reiniciar Rsyslog con el siguiente comando:

    1. sudo systemctl restart rsyslog

    Una vez que reinicie Rsyslog, podrá ver los registros en el /var/log/haproxy.logarchivo que configuró en /etc/rsyslog.d/99-haproxy.conf. Continúe con el Paso 5: Prueba del registro de HAProxy para asegurarse de que todo funcione como se espera.

    De lo contrario, si su sistema está ejecutando SELinux en Enforcingmodo , la siguiente sección de este tutorial explica cómo agregar un módulo para permitir que Rsyslog y HAProxy se comuniquen entre sí a través de su socket de dominio Unix compartido.

    Paso 4 — (Opcional) Configuración de SELinux

    Si su sistema Rocky Linux 8 está configurado con SELinux en Enforcingmodo , entonces deberá permitir que Rsyslog acceda al chrootdirectorio de HAProxy. Permitir este acceso permitirá que Rsyslog cree el socket de dominio Unix al que HAproxy enviará sus registros.

    Si no está familiarizado con SELinux, esta serie de tutoriales Introducción a SELinux en CentOS 7 le ayudará a aprender a administrar e interactuar con SELinux. Aunque está escrita para CentOS 7, los principios y comandos de la serie son igualmente aplicables a Rocky Linux 8.

    Para habilitar el acceso de Rsyslog y HAProxy a su socket compartido, la primera tarea es crear un archivo de política de cumplimiento de tipos. Abra un nuevo archivo llamado rsyslog-haproxy.teen vio en su editor preferido:

    1. vi rsyslog-haproxy.te

    Presione ipara cambiar al INSERTmodo, luego pegue las siguientes líneas en el archivo:

    rsyslog-haproxy.te

    module rsyslog-haproxy 1.0;require {    type syslogd_t;    type haproxy_var_lib_t;    class dir { add_name remove_name search write };    class sock_file { create setattr unlink };}#============= syslogd_t ==============allow syslogd_t haproxy_var_lib_t:dir { add_name remove_name search write };allow syslogd_t haproxy_var_lib_t:sock_file { create setattr unlink };

    La primera línea define el nombre y la versión del módulo. Esta requireparte le indica al cargador de módulos de SELinux los tipos y clases que se requieren para que la política se cargue como módulo. Las dos últimas líneas son las reglas que permiten que Rsyslog acceda a los archivos de HAProxy chrooty socket respectivamente.

    Cuando haya terminado de editar el archivo, guárdelo y ciérrelo presionando ESC, escribiendo :wqy presionando ENTER.

    A continuación, ejecute el siguiente comando para instalar el checkpolicypaquete, que contiene la checkmoduleutilidad que utilizará para convertir el archivo Type Enforcement en un módulo SELinux.

    1. sudo dnf install checkpolicy

    Ahora que tiene la checkmoduleherramienta instalada, el siguiente paso es compilar el módulo y luego cargarlo en SELinux. Ejecute lo siguiente para compilar el archivo Type Enforcement en un módulo SELinux:

    1. checkmodule -M -m rsyslog-haproxy.te -o rsyslog-haproxy.mod

    A continuación, ejecute semodule_packagepara generar un paquete de políticas completo que SELinux pueda cargar en el kernel de Linux:

    1. semodule_package -o rsyslog-haproxy.pp -m rsyslog-haproxy.mod

    El paso final es cargar el paquete que generaste en el kernel de Linux usando el semodulecomando:

    1. sudo semodule -i rsyslog-haproxy.pp

    La adición del módulo puede tardar unos segundos. Una vez que se complete el comando, puede confirmar que el módulo se cargó en el núcleo ejecutando el semodulecomando:

    1. sudo semodule -l |grep rsyslog-haproxy

    Debería recibir un resultado como el siguiente:

    Outputrsyslog-haproxy

    Una vez cargado el módulo puedes reiniciar Rsyslog con el siguiente comando:

    1. sudo systemctl restart rsyslog

    Ahora ha definido, compilado y cargado una política SELinux que permitirá que HAProxy y Rsyslog se comuniquen a través de su socket compartido.

    En el siguiente paso, probará que todo funciona realizando una solicitud HTTP a HAProxy y examinando su nuevo archivo de registro.

    Paso 5: Prueba del registro de HAProxy

    Ahora que ha configurado HAProxy, Rsyslog y, opcionalmente, SELinux, puede probar que el registro /var/log/haproxy.logfuncione.

    De forma predeterminada, el haproxypaquete se entrega con un archivo de configuración que crea un socket de escucha HTTP en el puerto 5000. La configuración apunta a un servidor back-end inexistente, por lo que cualquier solicitud al puerto generará un error HTTP 503.

    Para comprobar si hay un error 503 en su /var/log/haproxy.logarchivo, primero genere una solicitud HTTP de curlla siguiente manera:

    1. curl -si http://127.0.0.1:5000

    Debería recibir un resultado como el siguiente:

    OutputHTTP/1.0 503 Service UnavailableCache-Control: no-cacheConnection: closeContent-Type: text/htmlhtmlbodyh1503 Service Unavailable/h1No server is available to handle this request./body/html

    Ahora busque /var/log/haproxy.logrespuestas HTTP 503 utilizando el grepcomando:

    1. sudo grep -E 'NOSRV.+503' /var/log/haproxy.log

    Nota : La NOSRV.+503parte del comando es una expresión regular. Este tutorial sobre el uso de Grep y expresiones regulares para buscar patrones de texto en Linux profundiza en el uso grepde expresiones regulares.

    Debería recibir una línea (o varias líneas) como la siguiente:

    OutputSep 9 21:32:22 rocky-s-1vcpu-1gb-nyc3-01 haproxy[4451]: 127.0.0.1:56024 [9/Sep/2020:21:32:22.098] main app/NOSRV 0/-1/-1/-1/0 503 212 - - SC-- 1/1/0/0/0 0/0 "GET / HTTP/1.1"

    Esta línea corresponde a la curlsolicitud que usted realizó, lo que significa que Rsyslog y HAProxy están configurados para usar correctamente su socket compartido.

    Conclusión

    En este tutorial de inicio rápido, configuró HAProxy para iniciar sesión en un socket de dominio Unix. También configuró Rsyslog para crear y leer desde el socket de modo que los dos programas puedan comunicarse entre sí sin abrir ningún puerto TCP/IP en su sistema. Por último, compiló, empaquetó y cargó opcionalmente una política SELinux para permitir que Rsyslog y HAProxy compartan acceso a su socket.

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion