Tener solicitudes de registro de Apache cuando entren, en lugar de cuando terminen


9

Estoy tratando de diagnosticar un extraño problema de bloqueo del servidor (el servidor responde a pings, pero no aceptará conexiones SSH hasta que se reinicie. 0% CPU ) donde el reinicio del servidor hace que todo vuelva a la normalidad. Me gustaría que mis registros de acceso de Apache (o algún otro registro) incluyan todas las solicitudes que se hicieron correctamente cuando ocurrió el bloqueo, pero desafortunadamente Apache no registra las solicitudes hasta después de que se completen. Esto significa que si una solicitud bloquea el servidor, esa solicitud nunca finaliza y, por lo tanto, no aparece en los registros.

¿Hay alguna forma de configurar Apache para crear un archivo de registro en el que se escriben cuando llegan las solicitudes?


Eche un vistazo a su configuración de DNS también, un servidor DNS roto o bloqueado puede causar todo tipo de problemas con SSH y no poder iniciar sesión.
Sean Kimball

Respuestas:


15

Creo que necesita registro forense, vea este enlace: http://httpd.apache.org/docs/current/mod/mod_log_forensic.html

retazo:

Formato de registro forense:

Cada solicitud se registra dos veces. La primera vez es antes de que se procese más (es decir, después de recibir los encabezados). La segunda entrada de registro se escribe después del procesamiento de la solicitud al mismo tiempo que ocurre el registro normal.

Para identificar cada solicitud, se asigna una ID de solicitud única. Esta identificación forense se puede cruzar en el registro de transferencia normal utilizando la cadena de formato% {forensic-id} n. Si está utilizando mod_unique_id, se usará su ID generada.

La primera línea registra la identificación forense, la línea de solicitud y todos los encabezados recibidos, separados por caracteres de canalización (|). Una línea de muestra tiene el siguiente aspecto (todo en una línea):

+ yQtJf8CoAB4AAFNXBIEAAAAA | GET /manual/de/images/down.gif HTTP / 1.1 | Host: localhost% 3a8080 | User-Agent: Mozilla / 5.0 (X11; U; Linux i686; en-US; rv% 3a1.6) Gecko / 20040216 Firefox / 0.8 | Aceptar: image / png, etc.

El carácter más al principio indica que esta es la primera línea de registro de esta solicitud. La segunda línea solo contiene un carácter menos y la ID nuevamente:

-yQtJf8CoAB4AAFNXBIEAAAAA

El script check_forensic toma como argumento el nombre del archivo de registro. Busca esos pares de ID +/- y se queja si no se completó una solicitud.


Esto es lo que estaba buscando, pero no parece que pueda borrar este registro periódicamente (rm /var/log/apache2/forensic.log cada hora) o el registro forense simplemente se rompe hasta que reinicie Apache. Ideas?
Ben Dilts

ciertamente, si tienes algún registro de apache, eso sucederá. Intente usar logrotate o cualquier equivalente que exista en su entorno para rodar registros periódicamente (en tiempo o tamaño). Si no, en lugar de eliminarlo, intente mover el archivo, luego toque /var/log/apache2/forensic.log (aunque verifique los permisos)
sandroid

2

La respuesta de Sandroid es la adecuada para su pregunta, pero también debería considerar ejecutar una captura de paquetes de red. Si tiene los recursos, duplicar el puerto dentro del conmutador y usar una segunda máquina que ejecute WireShark para registrar todo el tráfico IP realmente podría ayudar. Si algo está sacando el servidor hasta el punto en que los servicios que no son HTTP no responden, entonces podría estar sacando la pila de IP antes de que los datos incorrectos lleguen a Apache.

Si puede asegurarse de que la máquina que ejecuta la captura tenga hardware y / o controladores de red diferentes a los demás. Sería un asco chocar dos por el precio de uno. ;-)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.