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_limitSi 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_limitSi 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).
-
timeoutEstablece el tiempo de espera (en ms) para proteger las operaciones posteriores, incluyendo el método connect. El valor por defecto es 1000 (1 seg).
-
hostHost del servidor de registro.
-
portNúmero de puerto del servidor de registro.
-
pathSi el servidor de registro utiliza un socket de dominio unix de tipo stream,
pathes 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_timesNú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_intervalEl 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_sizeTamaño del grupo de conexiones mantenido por sock:keepalive. Por defecto es 10.
-
max_buffer_reuseNú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_flushIntervalo de vaciado periódico (en segundos). Establecer en
nilpara desactivar esta función. -
sslBooleano, habilitar o deshabilitar la conexión a través de SSL. Por defecto es falso.
-
ssl_verifyBooleano, habilitar o deshabilitar la verificación de coincidencia de host y certificado. Por defecto es verdadero.
-
sni_hostEstablece 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.