Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 12114|Respuesta: 3

[Web] Nginx elimina automáticamente los registros de acceso

[Copiar enlace]
Publicado en 5/1/2015 20:53:57 | | |

El registro de acceso web (access_log) registra el comportamiento de acceso de todos los clientes externos al servidor web, incluyendo información importante como la IP del cliente, fecha de acceso, recurso URL accedido, código de estado HTTP devuelto por el servidor, y así sucesivamente.
Un registro típico de acceso web es así:


112.97.37.90 - - [14/Sep/2013:14:37:39 +0800] "GET / HTTP/1.1" 301 5 "-" "Mozilla/5.0 (Linux; U; Android 2.3.6; zh-cn; Lenovo A326 Build/GRK39F) AppleWebKit/533.1 (KHTML, como Gecko) Versión/4.0 Mobile Safari/533.1 MicroMessenger/4.5.1.259" -


Planificación:

1. Para resolver el problema:

Cuando la web tiene un gran número de visitas, habrá muchos datos de registro, y si todos están escritos en un archivo de registro, el archivo se hará cada vez más grande. La velocidad de archivos grandes se ralentiza, como cientos de megabytes de un archivo. Al escribir registros, afecta a la velocidad de operación. Además, si quiero mirar los registros de acceso, un archivo de varios cientos de megabits tarda en descargarse y abrirse. Utilizando una herramienta gratuita de análisis de registros de terceros - Log Treasure, puedes subir archivos de log de nginx, apache e iis, que ayudan a analizar aspectos de seguridad de la web. Al fin y al cabo, especializarse es más profesional. Log Bao también tiene un límite de tamaño para archivos subidos, no superior a 50 m.


2. Nignx no dispone de un mecanismo para separar automáticamente archivos y almacenar registros. Ya que nginx no guarda archivos automáticamente para ti. Por lo tanto, necesitas escribir tu propio script para implementarlo.


El archivo de script shell nginx_log_division.sh el siguiente contenido:


# /bash/bash

logs_path="/data/wwwlogs/"

#以前的日志文件.

log_name="xxx.log"   

pid_path="/usr/local/nginx/logs/nginx.pid"


mv ${logs_path}${log_name} ${logs_path}${log_name}_$(fecha --fecha="SEMANA PASADA" +"%Y-%m-d").log


matar -USR1 'gato ${pid_path}'


El principio del script de shell anterior es primero mover y renombrar el archivo de registro anterior a uno, el propósito es hacer una copia de seguridad.

Según el nombre del último lunes, cuando el script se ejecuta en el momento "2013-09-16", el nombre del archivo generado es "xxx.log_ 20130909.log".

Incluso si el comando mv se ha ejecutado en el archivo antes de que se ejecute kill -USR1 'cat ${{pid_path}'Nombre de archivo cambiadonginx seguirá escribiendo los datos de registro en el archivo recién nombrado "xxx.log_20130909" como de costumbre. La razón es que en sistemas Linux, el núcleo busca archivos basándose en descriptores de archivo.


---------------- comprensión de los descriptores de archivos en Linux


Un descriptor de archivo es un identificador entero que el núcleo de Linux nombra para cada archivo abierto.

El núcleo de Linux genera (o mantiene) un "Tabla de descriptores de archivosEsta tabla de descriptores de archivos registra "el archivo abierto por este proceso (identificado)".

En este entorno, nginx es un proceso en ejecución que ya ha abierto un archivo de registro y registra el archivo en la tabla de descriptores del archivo.

Incluso si la ruta del archivo de registro ha cambiado, aún puede encontrarse (puede localizarse según la tabla de descriptores del archivo).

----------------------------------------------

Al ejecutar el comando "kill -USR1 'cat ${pid_path}'", el guardado en el archivo nginx.pid es en realidad un número (puedes abrirlo y echar un vistazo, soy el 894 aquí), y nginx escribe el pid (número de proceso) de su proceso principal en el archivo nginx.pid, así que puedes obtener directamente su número de proceso principal a través del comando cat y operar directamente el número de proceso especificado.


kill -USR1 'cat ${pid_path}' es equivalente a

kill –USR1 894 #指定发信号 (USR1) para numerar este proceso.


En los sistemas Linux, Linux se comunica con "procesos en ejecución" a través de señales. En los sistemas Linux, también existen muchas señales predefinidas, como SIGHUP. USR1 es una señal definida por el usuario. Puede entenderse como el propio proceso definiendo qué hacer cuando recibe esta señal (es decir, el propio autor del proceso decide si recibe esa señal o no hace nada, y deja completamente a criterio del desarrollador la decisión). En nginx, escribe su propio código para gestionar la gestión de que nginx reabra el archivo de registro cuando recibo una señal USR1. El principio específico es el siguiente:

1. El proceso principal de nginx recibe la señal USR1 y reabrirá el archivo de registro (nombrado así por el nombre del registro en el archivo de configuración nginx, que es el valor establecido por el elemento access_log en el archivo de configuración, y si el archivo no existe, se creará automáticamente un nuevo xxx.log de archivo).


2. Luego cambiar el propietario del archivo de registro a "proceso trabajador", de modo que el proceso trabajador tenga permisos de lectura y escritura en el archivo de registro (maestro y trabajador normalmente se ejecutan como usuarios diferentes, por lo que el propietario debe cambiarse).


3. El proceso principal nginx cerrará el archivo de registro duplicado (es decir, el archivo que fue renombrado a xxx.log_ 20130909.log usando el comando mv hace un momento),y notifica al proceso trabajador que utilice el archivo de registro recién abierto(xxx.log el archivo abierto por el proceso principal hace un momento). La implementación específica es más detallada, el proceso principal envía la señal USR1 al trabajador y, tras recibir esta señal, el trabajador volverá a abrir el archivo de registro (es decir, el xxx.log acordado en el archivo de configuración)



=================================== Ejecutar scripts a intervalos regulares


Establece el archivo de script de shell de arriba para que se añada a la tarea programada. crontab es un proceso de tarea programada bajo Linux. Este proceso comenzará cuando lo enciendas y de vez en cuando irá a su lista para ver si hay alguna tarea que deba realizarse.


crontab -e


* 04 * * 1 /data/wwwlogs/nginx_log_division.sh



Se abrirá un archivo con el código anterior añadido

El formato es "Ruta de archivo de shell a ejecutar". * puede entenderse como "cada", cada minuto, cada hora, cada mes, etc.

Configuré un script para ejecutarlo nginx_log_division.sh a las 4 de la mañana del lunes, y el contenido del script es regenerar un nuevo archivo de log.



Adjunto:ConstruirnginxCómo se configuran los registros


log_format sitio '$remote_addr - $remote_user [$time_local] "$request" '

             '$status $body_bytes_enviados "$http_referer" '

             '"$http_agent_user_» $http_x_forwarded_for';


access_log /data/wwwlogs/xxxx.com.log sitio

#第二个参数表示使用那个日志格式, se identifica un nombre para cada formato de registro, y el sitio corresponde al nombre del log_format



Lo anterior implica el uso del administrador de tareas programadas de crontab.



También hay lugares donde no hay una comprensión completa y errores en los que no hay una comprensión completa. Espero poder actualizar en el futuro.






Anterior:Preguntas del examen final Houpu javaoop 2014
Próximo:Métodos básicos de uso de vi/vim
Publicado en 6/1/2015 0:04:30 |
¿Ah, puede la respuesta dar dinero?
 Propietario| Publicado en 6/1/2015 0:06:16 |
Johnyoung publicó el 6-1-2015 00:04
¿Ah, puede la respuesta dar dinero?

Puede tener prestigio
Publicado en 6/1/2015 0:13:44 |

¿Para qué sirve el prestigio?
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com