Strumenti da riga di comando per analizzare i file di registro di Apache [chiuso]


16

Ho un sacco di file di log di Apache che vorrei analizzare. Sto cercando uno strumento che non richiede molta installazione; qualcosa che posso eseguire un registro attraverso la riga di comando, senza fare casino sui nostri server web live.

Qualche consiglio?


E il sistema operativo che utilizzerai è ...
Izzy,

Linux o MacOSX ...
mmattax,

1
"Analizza" non dice molto. Cosa stai cercando di fare? Cerchi una stringa, numeri scricchiolanti?
David,

Risposte:


7

Mentre gli strumenti sopra sono tutti fantastici, penso di sapere cosa chiedeva l'interrogante. Mi fa spesso male non riuscire a estrarre le informazioni da un registro di accesso come posso fare con altri file.

È a causa del formato di registro di accesso stupido:

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"

Perché hanno usato [] per la data e "" per altre cose? pensavano che non avremmo saputo che un appuntamento era nel campo 4? È incredibilmente frustrante.

Lo strumento migliore in questo momento è gawk:

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

sui dati sopra questo ti darebbe:

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

In altre parole, FPAT ti dà la possibilità di estrarre i campi del log di apache come se fossero campi effettivi anziché solo entità separate da spazio. Questo è sempre quello che voglio. Posso quindi analizzarlo un po 'di più con una pipeline.

Il funzionamento di FSPAT è definito qui: http://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html

È quindi possibile impostare un alias per creare un gawk in grado di analizzare i log di apache:

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

fatto questo per me:

"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"

e ovviamente quasi tutto il resto è ora possibile.

Godere!


1
2 osservazioni: la data non è realmente nel campo 4 ma nei campi 4 + 5 ^^ (senza lo spostamento da GMT, la data ha poco valore). E un access_log ha la maggior parte delle volte 12 campi (in realtà, potrebbero esserci più di 12 campi, dato che il 12 è l'agente http, che può contenere anche molti spazi nel suo nome .. i primi 11 campi sono facili da analizzare, e il dodicesimo campo (e forse più) rimanente dovrebbe essere l'agente http). Quindi puoi solo: awk '($9 == 200) {print $6,$7,$8}'mostrare la stessa cosa del tuo esempio. Non è necessario utilizzare FPAT lì (anche se questo metodo può essere utile in altri casi)
Olivier Dulac

Penso che tu stia criticando troppo. La data è nel campo 4 se si considera che il campo è delimitato da []. Il più delle volte un file di registro si trova in un fuso orario, quindi il fuso non è necessario. Lo scopo di mostrare l'esempio non era mostrare che qualcosa era esclusivamente possibile in questo modo, ma mostrare il trucco generale.
Nic Ferrier,

1
Sono molto sorpreso ... Non ho "criticato" affatto, ho solo sottolineato 2 osservazioni (e ho detto che in effetti il ​​metodo che hai usato può essere utile in altri casi, ma qui non è necessario) ...
Olivier Dulac,

6

wtop è bello. Ci sono anche altre utilità. Spesso analizzerò i log usando bash, sed e awk.


wtop, e specialmente il loro logrep dell'analizzatore di log sono fantastici, una volta adattato .conf al tuo formato di log ti fornirà un modo veloce per ottenere ciò di cui hai bisogno (url top, traffico, ecc.)
aseques

6

apachetop è piuttosto interessante; stampa statistiche in tempo reale. Lo corri con

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

Per installarlo in Debian / Ubuntu:

apt-get install apachetop

o dalla fonte: https://github.com/JeremyJones/Apachetop


1

Che tipo di output vuoi?

Se stai solo cercando di contare le cose, allora grep qualcosa logfile.txt | wc -l funziona alla grande. Se vuoi grafici carini ... non così tanto.


Per windows il comando find imita in qualche modo grep.
Chris Nava,

0

se hai una workstation Windows che puoi usare, logparser è lo strumento preferito!


0

L'analogico funziona bene e non richiede molta configurazione. logwrangler è un pacchetto che funziona con l'analogico per generare un output migliore e richiede anche una configurazione ridotta.


0

Invece di utilizzare uno strumento da riga di comando, suggerirei di provare Apache Logs Viewer. È uno strumento gratuito in grado di monitorare e analizzare il file di registro di Apache. Può generare al volo alcuni grafici e report piuttosto interessanti.

Maggiori informazioni da http://www.apacheviewer.com

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.