• NGINX > gestion des logs

      Localisation des fichiers de log

      access_log et error_log se trouvent dans /var/log/nginx

      Structure 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_addr192.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.

      $status200 - code  réponse du serveur.

      $body_bytes_sent396 - 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.

       

      tail pour voir les logs en temps réel:

      tail -f access.log

      Access Log

      acces_log Affiche divers renseignements sur les visiteurs, et peut être activé dans un block httpserver, ou location. Par défaut, il est défini dans le block http depuis le fichier /etc/nginx/nginx.conf

      log_format défini le format du fichier log.

       

      http {
        access_log  /var/log/nginx/access.log log_format;
      }

       

      access_log directive set in the server directive overrides the one set in the http (higher level) directive depuis /etc/nginx/conf.d/domain.com.conf

      http {
        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 dans http ou server :

      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.log contient les erreurs côté serveur. La directive prend place dans un block httpserver, ou location du fichier /etc/nginx/nginx.conf,

      http {
        error_log /var/log/nginx/error.log log_level;
      }

       

      log_level peut 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 warn inclus les niveaux errorcrit,alert, et emerg.

       

      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) et 3xx (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;

      map teste 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 par 4, 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

 

Aucun commentaire

 

Laissez un commentaire