-
NGINX > gestion des logs
Localisation des fichiers de log
access_logeterror_logse trouvent dans/var/log/nginxStructure des fichiers de log
192.168.33.1 - - [15/Oct/2019:19:41:46 +0000] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 ..."
$remote_addr-192.168.33.1- adresse IP du client.$remote_user--- HTTP Authenticated User. Si le nom du user n’est pas défini, alors affiche-.[$time_local]-[15/Oct/2019:19:41:46 +0000]- Date et heure côté serveur."$request"-"GET / HTTP/1.1″- Type de requête, chemin et protocole.$status-200- code réponse du serveur.$body_bytes_sent-396- Nombre d’octets (bytes) renvoyés dans la réponse du serveur."$http_referer"-"-"- Page depuis laquelle la requête a été envoyée."$http_user_agent"-Mozilla/5.0 …- User Agent du client.il existe aussi :
$time_local
: The local time in a customizable format (e.g., "[21/Mar/2022:12:34:56 +0000]").$request_time
: Temps mis pour la requête, en secondes et millisecondes.$upstream_addr
: Adresse IP et port du upstream server, si Nginx est utilisé en tant que reverse proxy.$upstream_response_time
: The time it took to receive a response from the upstream server.$host
: The host name from the request.$server_name
: The server name matching the request.$uri
: The requested URI without any query string.$args
: The query string of the request.$http_<header>
: Replace<header>
with the name of an HTTP request header to include its value in the log entry. Example,$http_accept_language
ou$http_cookie
.tailpour voir les logs en temps réel:tail -f access.log
Access Log
acces_logAffiche divers renseignements sur les visiteurs, et peut être activé dans un blockhttp,server, oulocation. Par défaut, il est défini dans le blockhttpdepuis le fichier /etc/nginx/nginx.conflog_formatdéfini le format du fichier log.http { access_log /var/log/nginx/access.log log_format; }
access_logdirective set in theserverdirective overrides the one set in thehttp(higher level) directive depuis /etc/nginx/conf.d/domain.com.confhttp { access_log /var/log/nginx/access.log; server { server_name domain.com access_log /var/log/nginx/domain.access.log; } }
Si aucun format n’est spécifié, alors Nginx utilsera ce format prédéfini :
log_format combined '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" "$http_user_agent"';
Pour changer le format par un format nommé toto, en y ajoutant
X-Forwarded-For, par exemple, ajouter cette définition danshttpouserver:log_format toto '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
Pour utiliser ce nouveau format :
access_log /var/log/nginx/access.log toto;
Arrêter l’access log :
access_log off;
Error Log
error.logcontient les erreurs côté serveur. La directive prend place dans un blockhttp,server, oulocationdu fichier /etc/nginx/nginx.conf,http { error_log /var/log/nginx/error.log log_level; }
log_levelpeut prendre comme parametre un de ces niveaux, incluant les niveaux supérieurs :debug- Debugging messages.info- Informational messages.notice- Notices.warn- Warnings.error- Errors while processing a request. PAR DÉFAUT.crit- Critical issues. Requires a prompt action.alert- Alerts. Action must be taken immediately.emerg- Emergency situation. The system is in an unusable state.Exemple, le niveau
warninclus les niveauxerror,crit,alert, etemerg.Comme
access_log, on peut créer des règles suivant le block. Exemple, les erreurs de domain.com àwarn:http { error_log /var/log/nginx/error.log; server { server_name domain.com error_log /var/log/nginx/domain.error.log warn; } }
Les conditions de logging
Permet d’exclure des entrées dans le fichier access log
Exemple : exclure les requêtes avec le status codes
2xx(Success) et3xx(Redirection):map $status $loggable { ~^[23] 0; default 1; } access_log /chemin/vers/access.log combined if=$loggable;
Pour les erreurs propres au HTTP, on peut créer un fichier à part à partir de
access_log. Exemple depuis la documentation nginx :map $status $loggable { default 0; ~^4 1; } access_log /chemin/vers/log combined if=$loggable;
mapteste le code de $status et renseigne la variable$loggableauquel cas. Par défaut, il n’y a pas de log, et si le status commence par4, alors on log.CRÉER SES PROPRES LOGS
1 Définir le format des logs
Dans le fichier nginx.conf ou un fichier de conf inclus dans /etc/nginx/conf.d/. Exemple, créer un format appelé `mes_logs`:
http { log_format mes_logs '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"'; }
Ici, le format inclus l’adresse IP, remote user, timestamp, request, status code, bytes sent, referer, and user agent.
2 Spécifier le fichier de log
Ajouter la directive des logs dans le block server du fichier de conf :
server { access_log /chemin/vers/fichier.log mes_logs; }
3 Reload Nginx
sudo nginx -s reload
4 Vérifier les logs
On peut utiliser cat, tail, ou less:
cat /chemin/vers/fichier.log