logger-socket: Bibliothèque de Logger basée sur Raw-socket pour NGINX (basée sur nginx-module-lua)
Installation
Si vous n'avez pas configuré l'abonnement au dépôt RPM, inscrivez-vous. Ensuite, vous pouvez procéder avec les étapes suivantes.
CentOS/RHEL 7 ou 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
Pour utiliser cette bibliothèque Lua avec NGINX, assurez-vous que nginx-module-lua est installé.
Ce document décrit lua-resty-logger-socket v0.1 publié le 18 février 2015.
Cette bibliothèque Lua est un module de journalisation à distance pour ngx_lua :
http://wiki.nginx.org/HttpLuaModule
Elle vise à remplacer le module standard de journalisation d'accès ngx_http_log_module de Nginx pour envoyer les journaux d'accès à un serveur distant via un socket non-bloquant. Un serveur de journalisation distant courant prenant en charge les sockets est syslog-ng.
Cette bibliothèque Lua tire parti de l'API cosocket de ngx_lua, qui garantit un comportement 100 % non-bloquant.
Synopsis
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, "échec de l'initialisation du logger : ",
err)
return
end
end
-- construire le message de journal d'accès personnalisé dans
-- la variable Lua "msg"
local bytes, err = logger.log(msg)
if err then
ngx.log(ngx.ERR, "échec de l'enregistrement du message : ", err)
return
end
';
}
}
Méthodes
Ce module de logger est conçu pour être partagé à l'intérieur d'un processus worker Nginx par toutes les requêtes. Actuellement, seul un serveur de journalisation distant est pris en charge. Nous pourrions prendre en charge le sharding de plusieurs serveurs de journalisation à l'avenir.
init
syntax: ok, err = logger.init(user_config)
Initialise le logger avec les configurations utilisateur. Ce logger doit être initialisé avant utilisation. Si vous ne l'initialisez pas, vous obtiendrez une erreur.
Les configurations utilisateur disponibles sont listées comme suit :
-
flush_limitSi la taille des messages mis en mémoire tampon plus la taille du message actuel atteint (
>=) cette limite (en octets), les messages de journal mis en mémoire tampon seront écrits sur le serveur de journalisation. Par défaut, 4096 (4 Ko). -
drop_limitSi la taille des messages mis en mémoire tampon plus la taille du message actuel est supérieure à cette limite (en octets), le message de journal actuel sera abandonné en raison de la taille limitée du tampon. La valeur par défaut de drop_limit est 1048576 (1 Mo).
-
timeoutDéfinit le délai d'attente (en ms) pour les opérations suivantes, y compris la méthode connect. La valeur par défaut est 1000 (1 seconde).
-
hosthôte du serveur de journalisation.
-
portnuméro de port du serveur de journalisation.
-
pathSi le serveur de journalisation utilise un socket de domaine unix de type stream,
pathest le chemin du fichier socket. Notez que host/port et path ne peuvent pas être tous deux vides. Au moins un doit être fourni. -
max_retry_timesNombre maximal de tentatives de réessai après un échec de connexion à un serveur de journalisation ou un échec d'envoi de messages de journal à un serveur de journalisation.
-
retry_intervalLe délai (en ms) avant de réessayer de se connecter à un serveur de journalisation ou de réessayer d'envoyer des messages de journal à un serveur de journalisation, par défaut 100 (0,1 s).
-
pool_sizeTaille du pool keepalive utilisée par sock:keepalive. Par défaut, 10.
-
max_buffer_reuseNombre maximal de réutilisations du tampon de journalisation interne avant de créer un nouveau (pour éviter les fuites de mémoire).
-
periodic_flushIntervalle de vidage périodique (en secondes). Défini sur
nilpour désactiver cette fonctionnalité. -
sslBooléen, activer ou désactiver la connexion via SSL. Par défaut, faux.
-
ssl_verifyBooléen, activer ou désactiver la vérification de la correspondance de l'hôte et du certificat. Par défaut, vrai.
-
sni_hostDéfinit le nom d'hôte à envoyer dans SNI et à utiliser lors de la vérification de la correspondance du certificat.
initted
syntax: initted = logger.initted()
Obtenez une valeur booléenne indiquant si ce module a été initialisé (en appelant la méthode init).
log
syntax: bytes, err = logger.log(msg)
Enregistre un message. Par défaut, le message de journal sera mis en mémoire tampon dans le module logger jusqu'à ce que flush_limit soit atteint, auquel cas le logger videra tous les messages mis en mémoire tampon vers le serveur de journalisation distant via un socket.
bytes est le nombre d'octets qui ont été correctement mis en mémoire tampon dans le logger. Si bytes est nil, err est une chaîne décrivant le type d'erreur survenue cette fois. Si bytes n'est pas nil, alors err est un message d'erreur précédent. err peut être nil lorsque bytes n'est pas nil.
flush
syntax: bytes, err = logger.flush()
Vide immédiatement tous les messages mis en mémoire tampon vers le serveur distant. En général, vous n'avez pas besoin d'appeler cela manuellement car le vidage se produit automatiquement lorsque le tampon est plein.
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-logger-socket.