Herramientas de línea de comando para analizar archivos de registro de Apache [cerrado]

16

Tengo un montón de archivos de registro de Apache que me gustaría analizar. Estoy buscando una herramienta que no requiera mucha configuración; algo que puedo ejecutar un registro a través de la línea de comandos, sin perder el tiempo en nuestros servidores web en vivo.

¿Alguna recomendación?

mmattax
fuente
Y el sistema operativo que vas a utilizar es ...
Izzy
Linux o MacOSX ...
mmattax
1
"Analizar" no dice mucho. ¿Que estás tratando de hacer? ¿Buscar una cadena, números crujientes?
David
goaccess.prosoftcorp.com gratis e impresionante, lo encontré aquí: webmasters.stackexchange.com/questions/4852/…
jitbit

Respuestas:

7

Si bien las herramientas anteriores son geniales, creo que sé lo que preguntaba el interrogador. A menudo me duele que no pueda extraer la información de un registro de acceso de la misma manera que puedo con otros archivos.

Se debe al formato de registro de acceso tonto:

127.0.0.1 - - [16/Aug/2014:20:47:29 +0100] "GET /manual/elisp/index.html HTTP/1.1" 200 37230 "http://testlocalhost/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0"

¿Por qué usaron [] para la fecha y "" para otras cosas? ¿Pensaron que no sabríamos que había una cita en el campo 4? Es increíblemente frustrante.

La mejor herramienta en este momento para esto es gawk:

gawk 'BEGIN { FPAT="([^ ]+)|(\"[^\"]+\")|(\\[[^\\]]+\\])" } { print $5 }'

en los datos anteriores esto te daría:

"GET /manual/elisp/index.html HTTP/1.1"

En otras palabras, el FPAT le brinda la capacidad de extraer los campos del registro de apache como si fueran campos reales en lugar de solo entidades separadas por espacios. Esto es siempre lo que quiero. Entonces puedo analizar eso un poco más con una tubería.

El funcionamiento del FSPAT se define aquí: http://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html

Por lo tanto, puede configurar un alias para crear un gawk que pueda analizar registros de apache:

alias apacheawk="gawk -vFPAT='([^ ]+)|(\"[^\"]+\")|(\\\\[[^\\\\]]+\\\\])' " apacheawk '$6 ~ /200/ { print $5 } | sort | uniq

hizo esto para mí:

"GET / HTTP/1.1"
"GET /manual/elisp/index.html HTTP/1.1"
"GET /manual/elisp/Index.html HTTP/1.1"
"GET /scripts/app.js HTTP/1.1"
"GET /style.css HTTP/1.1"

y, por supuesto, casi cualquier otra cosa ahora es posible.

¡Disfrutar!

nic ferrier
fuente
1
2 comentarios: La fecha no está realmente en el campo 4 sino en los campos 4 + 5 ^^ (sin el cambio de GMT, la fecha tiene poco valor). Y un access_log tiene la mayoría de las veces 12 campos (en realidad, podría haber más de 12 campos, ya que el 12 es el agente http, que también puede contener muchos espacios en su nombre ... los primeros 11 campos son fáciles de analizar, y el duodécimo campo (y quizás más) restante debería ser el agente http). Entonces puede simplemente: awk '($9 == 200) {print $6,$7,$8}'mostrar lo mismo que en su ejemplo. No es necesario usar FPAT allí (aunque este método puede ser útil en otros casos)
Olivier Dulac
Creo que estás sobre criticando. La fecha está en el campo 4 si considera que el campo está delimitado por []. La mayoría de las veces un archivo de registro está en una zona horaria, por lo que la zona no es necesaria. El punto de mostrar el ejemplo no era mostrar que algo era exclusivamente posible de esta manera, sino mostrar el truco general.
nic ferrier
1
Estoy muy sorprendido ... No "critiqué" en absoluto, solo señalé 2 comentarios (y dije que, de hecho, el método que usaste puede ser útil en otros casos, pero aquí simplemente no es necesario) ...
Olivier Dulac
6

Wtop es genial. También hay otras utilidades. A menudo, analizaré los registros usando bash, sed y awk.

Warner
fuente
wtop, y especialmente su analizador de registros logrep son geniales, una vez que adapte .conf a su formato de registro, proporcionará una forma rápida de obtener lo que necesita (url superior, tráfico, etc.)
aseques
6

Apachetop es muy bueno; Imprime estadísticas en vivo. Lo ejecutas con

apachetop -f /var/log/apache2/www.mysite.com.access.log

Para instalarlo en Debian / Ubuntu:

apt-get install apachetop

o de la fuente: https://github.com/JeremyJones/Apachetop

Oriettaxx
fuente
1

¿Qué tipo de salida quieres?

Si solo está buscando contar cosas, haga grep algo logfile.txt | wc -l funciona muy bien. Si quieres gráficos bonitos ... no tanto.

Chris Nava
fuente
Para Windows, el comando find imita grep hasta cierto punto.
Chris Nava
0

si tiene una estación de trabajo de Windows que puede usar, entonces logparser es la herramienta de elección

Tony Roth
fuente
0

analógico funciona bien de fábrica y no requiere mucha configuración. logwrangler es un paquete que funciona con analógico para generar una salida más agradable y también requiere poca configuración.

BillThor
fuente
0

En lugar de usar una herramienta de línea de comandos, sugiero que pruebe Apache Logs Viewer. Es una herramienta gratuita que puede monitorear y analizar el archivo de registro de Apache. Puede generar algunos gráficos e informes geniales sobre la marcha.

Más información de http://www.apacheviewer.com


fuente