Saltar a contenido

logger-socket: Biblioteca de Logger basada en sockets en bruto para NGINX (basada en nginx-module-lua)

Instalación

Si no has configurado la suscripción al repositorio RPM, regístrate. Luego puedes proceder con los siguientes pasos.

CentOS/RHEL 7 o Amazon Linux 2

yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-logger-socket

CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-logger-socket

Para usar esta biblioteca Lua con NGINX, asegúrate de que nginx-module-lua esté instalado.

Este documento describe lua-resty-logger-socket v0.1 lanzado el 18 de febrero de 2015.


Esta biblioteca Lua es un módulo de registro remoto para ngx_lua:

http://wiki.nginx.org/HttpLuaModule

Está diseñado para reemplazar el estándar de Nginx ngx_http_log_module para enviar registros de acceso a un servidor remoto a través de un socket no bloqueante. Un servidor de registro remoto común que soporta sockets es syslog-ng.

Esta biblioteca Lua aprovecha la API de cosocket de ngx_lua, que garantiza un comportamiento 100% no bloqueante.

Sinopsis

    server {
        location / {
            log_by_lua '
                local logger = require "resty.logger.socket"
                if not logger.initted() then
                    local ok, err = logger.init{
                        host = 'xxx',
                        port = 1234,
                        flush_limit = 1234,
                        drop_limit = 5678,
                    }
                    if not ok then
                        ngx.log(ngx.ERR, "falló al inicializar el logger: ",
                                err)
                        return
                    end
                end

                -- construir el mensaje de registro de acceso personalizado en
                -- la variable Lua "msg"

                local bytes, err = logger.log(msg)
                if err then
                    ngx.log(ngx.ERR, "falló al registrar el mensaje: ", err)
                    return
                end
            ';
        }
    }

Métodos

Este módulo de logger está diseñado para ser compartido dentro de un proceso de trabajo de Nginx por todas las solicitudes. Así que actualmente solo se admite un servidor de registro remoto. Podemos admitir la fragmentación de múltiples servidores de registro en el futuro.

init

syntax: ok, err = logger.init(user_config)

Inicializa el logger con configuraciones del usuario. Este logger debe ser inicializado antes de su uso. Si no inicializas el logger, recibirás un error.

Las configuraciones disponibles del usuario se enumeran a continuación:

  • flush_limit

    Si el tamaño de los mensajes en búfer más el tamaño del mensaje actual alcanza (>=) este límite (en bytes), los mensajes de registro en búfer se escribirán en el servidor de registro. Por defecto es 4096 (4KB).

  • drop_limit

    Si el tamaño de los mensajes en búfer más el tamaño del mensaje actual es mayor que este límite (en bytes), el mensaje de registro actual se descartará debido al tamaño limitado del búfer. El límite de caída por defecto es 1048576 (1MB).

  • timeout

    Establece el tiempo de espera (en ms) para proteger las operaciones posteriores, incluyendo el método connect. El valor por defecto es 1000 (1 seg).

  • host

    Host del servidor de registro.

  • port

    Número de puerto del servidor de registro.

  • path

    Si el servidor de registro utiliza un socket de dominio unix de tipo stream, path es la ruta del archivo del socket. Ten en cuenta que host/port y path no pueden estar ambos vacíos. Al menos uno debe ser proporcionado.

  • max_retry_times

    Número máximo de intentos de reintento después de que una conexión a un servidor de registro falló o el envío de mensajes de registro a un servidor de registro falló.

  • retry_interval

    El retraso de tiempo (en ms) antes de reintentar conectarse a un servidor de registro o reintentar enviar mensajes de registro a un servidor de registro, por defecto es 100 (0.1s).

  • pool_size

    Tamaño del grupo de conexiones mantenido por sock:keepalive. Por defecto es 10.

  • max_buffer_reuse

    Número máximo de veces que se puede reutilizar el búfer de registro interno antes de crear uno nuevo (para prevenir fugas de memoria).

  • periodic_flush

    Intervalo de vaciado periódico (en segundos). Establecer en nil para desactivar esta función.

  • ssl

    Booleano, habilitar o deshabilitar la conexión a través de SSL. Por defecto es falso.

  • ssl_verify

    Booleano, habilitar o deshabilitar la verificación de coincidencia de host y certificado. Por defecto es verdadero.

  • sni_host

    Establece el nombre de host para enviar en SNI y usar al verificar la coincidencia del certificado.

initted

syntax: initted = logger.initted()

Obtiene un valor booleano que indica si este módulo ha sido inicializado (llamando al método init).

log

syntax: bytes, err = logger.log(msg)

Registra un mensaje. Por defecto, el mensaje de registro se almacenará en búfer en el módulo logger hasta que se alcance flush_limit, en cuyo caso el logger vaciará todos los mensajes en búfer al servidor de registro remoto a través de un socket. bytes es el número de bytes que se almacenaron con éxito en el logger. Si bytes es nil, err es una cadena que describe qué tipo de error ocurrió esta vez. Si bytes no es nil, entonces err es un mensaje de error anterior. err puede ser nil cuando bytes no es nil.

flush

syntax: bytes, err = logger.flush()

Vacía cualquier mensaje en búfer hacia el remoto inmediatamente. Por lo general, no necesitas llamar a esto manualmente porque el vaciado ocurre automáticamente cuando el búfer está lleno.

GitHub

Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-logger-socket.