Alat baris perintah untuk menganalisis file log Apache [ditutup]


16

Saya memiliki banyak file log Apache yang ingin saya analisis. Saya mencari alat yang tidak memerlukan banyak pengaturan; sesuatu yang bisa saya jalankan log melalui baris perintah, tanpa main-main di server web langsung kami.

Ada rekomendasi?


Dan OS yang akan Anda gunakan adalah ...
Izzy

Linux atau MacOSX ...
mmattax

1
"Analisis" tidak banyak bicara. Apa yang sedang Anda coba lakukan? Mencari string, angka-angka krisis?
David

Jawaban:


7

Sementara alat-alat di atas semuanya keren, saya rasa saya tahu apa yang ditanyakan oleh si penanya. Seringkali menyakitkan saya bahwa saya tidak dapat menarik informasi dari akses-log dengan cara yang saya bisa dengan file lain.

Itu karena format log akses yang bodoh:

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"

Mengapa mereka menggunakan [] untuk tanggal dan "" untuk hal lain? apakah mereka pikir kita tidak akan tahu kencan di bidang 4? Ini sangat membuat frustrasi.

Alat terbaik saat ini untuk ini adalah gawk:

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

pada data di atas ini akan memberi Anda:

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

Dengan kata lain, FPAT memberi Anda kemampuan untuk mengeluarkan bidang-bidang dari apache-log seolah-olah itu adalah bidang aktual, bukan hanya entitas yang dipisahkan ruang. Ini selalu yang saya inginkan. Saya kemudian dapat menguraikannya sedikit lebih dengan pipa.

Membuat pekerjaan FSPAT didefinisikan di sini: http://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html

Karena itu Anda dapat mengatur alias untuk membuat gawk yang dapat mengurai log apache:

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

membuat ini untukku:

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

dan tentu saja hampir semua hal lain sekarang mungkin.

Nikmati!


1
2 komentar: Tanggal tidak benar-benar di bidang 4 tetapi di bidang 4 + 5 ^^ (tanpa pergeseran dari GMT, tanggal tidak memiliki nilai). Dan access_log memiliki sebagian besar waktu dari 12 bidang bentuk (sebenarnya, mungkin ada lebih dari 12 bidang, karena yang ke-12 adalah agen http, yang dapat berisi banyak ruang dalam namanya juga .. 11 bidang pertama mudah diurai, dan bidang ke-12 (dan mungkin lebih) yang tersisa harus menjadi agen http). Jadi Anda bisa: awk '($9 == 200) {print $6,$7,$8}'untuk menampilkan hal yang sama seperti pada contoh Anda. Tidak perlu menggunakan FPAT di sana (meskipun metode ini dapat berguna dalam kasus lain)
Olivier Dulac

Saya pikir Anda terlalu mengkritik. Tanggal dalam bidang 4 jika Anda menganggap bidang dibatasi oleh []. Sebagian besar waktu file log berada dalam satu zona waktu, jadi zona tersebut tidak diperlukan. Maksud dari menunjukkan contoh itu bukan untuk menunjukkan bahwa ada sesuatu yang secara eksklusif mungkin dengan cara ini, tetapi untuk menunjukkan trik umum.
nic ferrier

1
Saya sangat terkejut ... Saya tidak "mengkritik" sama sekali, hanya menunjuk 2 komentar (dan mengatakan bahwa memang metode yang Anda gunakan dapat berguna dalam kasus-kasus lain, tapi di sini tidak diperlukan) ...
Olivier Dulac

6

wtop itu keren. Ada utilitas lain juga. Seringkali, saya akan mengurai log menggunakan bash, sed, dan awk.


wtop, dan khususnya logrep log analyzer mereka sangat bagus, setelah Anda mengadaptasi .conf dengan format log Anda, itu akan memberikan cara cepat untuk mendapatkan apa yang Anda butuhkan (url teratas, lalu lintas, dll.)
aseques

6

apachetop sangat keren; itu mencetak statistik langsung. Anda menjalankannya dengan

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

Untuk menginstalnya di Debian / Ubuntu:

apt-get install apachetop

atau dari sumber: https://github.com/JeremyJones/Apachetop


1

Output seperti apa yang Anda inginkan?

Jika Anda hanya ingin menghitung sesuatu, maka ambil sesuatu logfile.txt | wc -l bekerja dengan baik. Jika Anda ingin grafik yang cantik ... jangan terlalu banyak.


Untuk windows, perintah find meniru grep sampai taraf tertentu.
Chris Nava

0

jika Anda memiliki workstation windows yang dapat Anda gunakan maka logparser adalah alat pilihan!


0

analog bekerja dengan baik di luar kotak dan tidak memerlukan banyak pengaturan. logwrangler adalah paket yang bekerja dengan analog untuk menghasilkan output yang lebih bagus dan juga membutuhkan sedikit pengaturan.


0

Alih-alih menggunakan alat baris perintah saya akan suggeset untuk mencoba Apache Logs Viewer. Ini adalah alat gratis yang dapat memonitor dan menganalisis File Log Apache. Ini dapat menghasilkan beberapa grafik dan laporan yang keren.

Info lebih lanjut dari http://www.apacheviewer.com

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.