GoAccess adalah penganalisis log web real-time sumber terbuka dan penampil interaktif yang berjalan di terminal pada sistem *nix atau melalui browser Anda. Ini memberikan statistik HTTP yang cepat dan berharga untuk administrator sistem yang memerlukan laporan server visual dengan cepat. Info lebih lanjut di: https://goaccess.io.
GoAccess mem-parsing file log web yang ditentukan dan mengeluarkan data ke terminal X. Fitur-fiturnya meliputi:
Sepenuhnya Waktu Nyata
Semua panel dan metrik diatur waktunya untuk diperbarui setiap 200 ms pada keluaran terminal dan setiap detik pada keluaran HTML.
Konfigurasi Minimal diperlukan
Anda cukup menjalankannya pada file log akses Anda, pilih format log dan biarkan GoAccess mengurai log akses dan menampilkan statistiknya.
Lacak Waktu Respons Aplikasi
Lacak waktu yang dibutuhkan untuk melayani permintaan. Sangat berguna jika Anda ingin melacak halaman yang memperlambat situs Anda.
Hampir Semua Format Log Web
GoAccess mengizinkan string format log khusus apa pun. Opsi yang telah ditentukan sebelumnya mencakup, Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, dll.
Pemrosesan Log Tambahan
Butuh persistensi data? GoAccess memiliki kemampuan untuk memproses log secara bertahap melalui opsi persistensi pada disk.
Hanya satu ketergantungan
GoAccess ditulis dalam C. Untuk menjalankannya, Anda hanya memerlukan ncurses sebagai dependensi. Itu saja. Ia bahkan memiliki server Web Socketnya sendiri — http://gwsocket.io/.
Pengunjung
Tentukan jumlah klik, pengunjung, bandwidth, dan metrik untuk permintaan yang berjalan paling lambat berdasarkan jam, atau tanggal.
Metrik per Host Virtual
Punya beberapa Virtual Host (Blok Server)? Ini menampilkan panel yang menampilkan host virtual mana yang menghabiskan sebagian besar sumber daya server web.
ASN (Pemetaan Nomor Sistem Otonom)
Sangat bagus untuk mendeteksi pola lalu lintas berbahaya dan memblokirnya.
Skema Warna Dapat Disesuaikan
Sesuaikan GoAccess agar sesuai dengan selera/skema warna Anda. Baik melalui terminal, atau hanya dengan menerapkan stylesheet pada keluaran HTML.
Dukungan untuk Kumpulan Data Besar
GoAccess memiliki kemampuan untuk mengurai log besar karena tabel hash dalam memori yang dioptimalkan. Ini memiliki penggunaan memori yang sangat baik dan kinerja yang cukup bagus. Penyimpanan ini juga memiliki dukungan untuk persistensi pada disk.
Dukungan buruh pelabuhan
Kemampuan untuk membangun image Docker GoAccess dari upstream. Anda masih dapat mengonfigurasinya sepenuhnya dengan menggunakan pemetaan Volume dan mengedit goaccess.conf
. Lihat bagian Docker di bawah.
GoAccess mengizinkan string format log khusus apa pun. Opsi yang telah ditentukan sebelumnya mencakup, namun tidak terbatas pada:
GoAccess dirancang untuk menjadi penganalisis log berbasis terminal yang cepat. Ide intinya adalah dengan cepat menganalisis dan melihat statistik server web secara real-time tanpa perlu menggunakan browser Anda ( bagus jika Anda ingin melakukan analisis cepat terhadap log akses Anda melalui SSH, atau jika Anda suka bekerja di terminal ).
Meskipun keluaran terminal adalah keluaran default, ia mempunyai kemampuan untuk menghasilkan laporan HTML
real-time yang lengkap, mandiri, serta laporan JSON
dan CSV
.
Anda dapat melihatnya lebih sebagai alat perintah monitor daripada apa pun.
GoAccess dapat dikompilasi dan digunakan pada sistem *nix.
Unduh, ekstrak, dan kompilasi GoAccess dengan:
$ wget https://tar.goaccess.io/goaccess-1.9.3.tar.gz
$ tar -xzvf goaccess-1.9.3.tar.gz
$ cd goaccess-1.9.3/
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install
$ git clone https://github.com/allinurl/goaccess.git
$ cd goaccess
$ autoreconf -fiv
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install
Cara termudah untuk menginstal GoAccess di GNU+Linux adalah dengan menggunakan manajer paket pilihan distribusi GNU+Linux Anda. Harap diperhatikan bahwa tidak semua distribusi menyediakan GoAccess versi terbaru.
# apt-get install goaccess
Catatan: Kemungkinan ini akan menginstal versi GoAccess yang sudah ketinggalan zaman. Untuk memastikan bahwa Anda menjalankan GoAccess versi stabil terbaru, lihat opsi alternatif di bawah.
$ wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg >/dev/null
$ echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/goaccess.list
$ sudo apt-get update
$ sudo apt-get install goaccess
Catatan :
.deb
di repo resmi juga tersedia melalui HTTPS. Anda mungkin perlu menginstal apt-transport-https
. # yum install goaccess
# pacman -S goaccess
# emerge net-analyzer/goaccess
# brew install goaccess
# cd /usr/ports/sysutils/goaccess/ && make install clean
# pkg install sysutils/goaccess
# cd /usr/ports/www/goaccess && make install clean
# pkg_add goaccess
# zypper ar -f obs://server:http http
# zypper in goaccess
# pkg install goaccess
# pkgin install goaccess
GoAccess dapat digunakan di Windows melalui Cygwin. Lihat paket Cygwin. Atau melalui Subsistem GNU+Linux di Windows 10.
GoAccess memiliki persyaratan minimal, ditulis dalam C dan hanya memerlukan ncurses. Namun, di bawah ini adalah tabel beberapa dependensi opsional di beberapa distro untuk membangun GoAccess dari sumber.
Distro | NCurses | GeoIP (pilihan) | GeoIP2 (pilihan) | OpenSSL (memilih) |
---|---|---|---|---|
Ubuntu/Debian | libncurses-dev | libgeoip-dev | libmaxminddb-dev | libssl-dev |
RHEL/CentOS | ncurses-pengembangan | geoip-pengembangan | libmaxminddb-devel | openssl-devel |
Lengkungan | kutukan | geoip | libmaxminddb | opensl |
Gentoo | sys-libs/ncurses | dev-libs/geoip | dev-libs/libmaxminddb | dev-libs/openssl |
perangkat lunak kendur | kutukan | GeoIP | libmaxminddb | opensl |
Catatan : Anda mungkin perlu menginstal alat pembangunan seperti gcc
, autoconf
, gettext
, autopoint
dll. untuk mengkompilasi/membangun perangkat lunak dari sumber. misalnya, base-devel
, build-essential
, "Development Tools"
.
Gambar Docker telah diperbarui, mampu mengarahkan keluaran dari log akses. Jika Anda hanya ingin mengeluarkan laporan, Anda dapat menyalurkan log dari lingkungan eksternal ke proses berbasis Docker:
touch report.html
cat access.log | docker run --rm -i -v ./report.html:/report.html -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED -
ATAU waktu nyata
tail -F access.log | docker run -p 7890:7890 --rm -i -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED --real-time-html -
Anda juga dapat membangun biner untuk sistem berbasis Debian di lingkungan kontainer yang terisolasi untuk mencegah sistem lokal Anda berantakan dengan perpustakaan pengembangan:
$ curl -L "https://github.com/allinurl/goaccess/archive/refs/heads/master.tar.gz" | tar -xz && cd goaccess-master
$ docker build -t goaccess/build.debian-12 -f Dockerfile.debian-12 .
$ docker run -i --rm -v $PWD:/goaccess goaccess/build.debian-12 > goaccess
Anda dapat membaca lebih lanjut tentang penggunaan image buruh pelabuhan di DOCKER.md.
Penyimpanan dalam memori memberikan kinerja yang lebih baik dengan membatasi ukuran kumpulan data sesuai dengan jumlah memori fisik yang tersedia. GoAccess menggunakan tabel hash dalam memori. Ini memiliki penggunaan memori yang sangat baik dan kinerja yang cukup bagus. Penyimpanan ini juga memiliki dukungan untuk persistensi pada disk.
Lihat opsi yang dapat diberikan ke perintah atau ditentukan dalam file konfigurasi. Jika ditentukan dalam file konfigurasi, opsi panjang harus digunakan tanpa menambahkan --
.
Catatan : Menyalurkan data ke GoAccess tidak akan memunculkan dialog konfigurasi log/tanggal/waktu, Anda harus menentukannya terlebih dahulu di file konfigurasi atau di baris perintah.
Untuk mengeluarkan ke terminal dan menghasilkan laporan interaktif:
# goaccess access.log
Untuk menghasilkan laporan HTML:
# goaccess access.log -a > report.html
Untuk menghasilkan file laporan JSON:
# goaccess access.log -a -d -o report.json
Untuk menghasilkan laporan CSV ke stdout:
# goaccess access.log --no-csv-summary -o csv
GoAccess juga memberikan fleksibilitas tinggi untuk pemfilteran dan penguraian waktu nyata. Misalnya, untuk mendiagnosis masalah dengan cepat dengan memantau log sejak goaccess dimulai:
# tail -f access.log | goaccess -
Dan yang lebih baik lagi, untuk memfilter sambil tetap membuka pipa guna mempertahankan analisis real-time, kita dapat menggunakan tail -f
dan alat pola yang cocok seperti grep
, awk
, sed
, dll.:
# tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -
atau untuk mengurai dari awal file sambil menjaga pipa tetap terbuka dan menerapkan filter
# tail -f -n +0 access.log | grep -i --line-buffered 'firefox' | goaccess -o report.html --real-time-html -
Ada beberapa cara untuk mengurai banyak log dengan GoAccess. Cara paling sederhana adalah meneruskan beberapa file log ke baris perintah:
# goaccess access.log access.log.1
Bahkan dimungkinkan untuk mengurai file dari pipa sambil membaca file biasa:
# cat access.log.2 | goaccess access.log access.log.1 -
Catatan : tanda hubung tunggal ditambahkan ke baris perintah untuk memberi tahu GoAccess bahwa itu harus dibaca dari pipa.
Sekarang jika kita ingin menambahkan lebih banyak fleksibilitas pada GoAccess, kita dapat menggunakan zcat --force
untuk membaca file terkompresi dan tidak terkompresi. Misalnya, jika kita ingin memproses semua file log access.log*
, kita dapat melakukan:
# zcat --force access.log* | goaccess -
Catatan : Di Mac OS X, gunakan gunzip -c
alih-alih zcat
.
Gunakan --jobs=
(atau -j
) untuk mengaktifkan penguraian multi-utas. Misalnya:
# goaccess access.log -o report.html -j 4
Dan gunakan --chunk-size=<256-32768>
untuk menyesuaikan ukuran bongkahan, ukuran bongkahan default adalah 1024. Misalnya:
# goaccess access.log -o report.html -j 4 --chunk-size=8192
GoAccess memiliki kemampuan mengeluarkan data real-time dalam laporan HTML. Anda bahkan dapat mengirimkan file HTML melalui email karena terdiri dari satu file tanpa ketergantungan file eksternal, betapa rapinya itu!
Proses pembuatan laporan HTML real-time sangat mirip dengan proses pembuatan laporan statis. Hanya --real-time-html
yang diperlukan untuk menjadikannya real-time.
# goaccess access.log -o /usr/share/nginx/html/your_site/report.html --real-time-html
Untuk melihat laporan, Anda dapat menavigasi ke http://your_site/report.html
.
Secara default, GoAccess akan menggunakan nama host dari laporan yang dihasilkan. Secara opsional, Anda dapat menentukan URL yang akan dihubungkan dengan browser klien. Lihat FAQ untuk contoh lebih detail.
# goaccess access.log -o report.html --real-time-html --ws-url=goaccess.io
Secara default, GoAccess mendengarkan pada port 7890, untuk menggunakan port lain selain 7890, Anda dapat menentukannya sebagai (pastikan port dibuka):
# goaccess access.log -o report.html --real-time-html --port=9870
Dan untuk mengikat server WebSocket ke alamat lain selain 0.0.0.0, Anda dapat menentukannya sebagai:
# goaccess access.log -o report.html --real-time-html --addr=127.0.0.1
Catatan : Untuk mengeluarkan data waktu nyata melalui koneksi TLS/SSL, Anda perlu menggunakan --ssl-cert=
dan --ssl-key=
.
Pipa berguna lainnya adalah memfilter tanggal dari log web
Berikut ini akan mendapatkan semua permintaan HTTP mulai 05/Dec/2010
hingga akhir file.
# sed -n '/05/Dec/2010/,$ p' access.log | goaccess -a -
atau menggunakan tanggal relatif seperti kemarin atau besok:
# sed -n '/'$(date '+%d/%b/%Y' -d '1 week ago')'/,$ p' access.log | goaccess -a -
Jika kita hanya ingin mengurai jangka waktu tertentu dari TANGGAL a hingga TANGGAL b, kita dapat melakukan:
# sed -n '/5/Nov/2010/,/5/Dec/2010/ p' access.log | goaccess -a -
Jika kita hanya ingin menyimpan data dalam jumlah tertentu dan mendaur ulang penyimpanan, kita hanya dapat menyimpannya dalam jumlah hari tertentu. Misalnya untuk menyimpan & menampilkan 5 hari terakhir:
# goaccess access.log --keep-last=5
Dengan asumsi log Anda berisi bidang host virtual. Misalnya:
vhost.io:80 8.8.4.4 - - [02/Mar/2016:08:14:04 -0600] "GET /shop HTTP/1.1" 200 615 "-" "Googlebot-Image/1.0"
Dan Anda ingin menambahkan host virtual ke permintaan untuk melihat host virtual mana yang memiliki url teratas:
awk '$8=$1$8' access.log | goaccess -a -
Untuk melakukan hal yang sama, tetapi juga menggunakan pemfilteran dan penguraian waktu nyata:
tail -f access.log | unbuffer -p awk '$8=$1$8' | goaccess -a -
Untuk mengecualikan daftar host virtual, Anda dapat melakukan hal berikut:
# grep -v "`cat exclude_vhost_list_file`" vhost_access.log | goaccess -
Untuk mengurai halaman tertentu, misalnya tampilan halaman, html
, htm
, php
, dll. dalam permintaan:
# awk '$7~/.html|.htm|.php/' access.log | goaccess -
Catatan, $7
adalah kolom permintaan untuk format log umum dan gabungan, (tanpa Virtual Host), jika log Anda menyertakan Virtual Host, maka Anda mungkin ingin menggunakan $8
sebagai gantinya. Sebaiknya periksa bidang mana yang Anda bidik, misalnya:
# tail -10 access.log | awk '{print $8}'
Atau untuk mengurai kode status tertentu, misalnya 500 (Internal Server Error):
# awk '$9~/500/' access.log | goaccess -
Atau beberapa kode status, misalnya semua 3xx dan 5xx:
# tail -f -n +0 access.log | awk '$9~/3[0-9]{2}|5[0-9]{2}/' | goaccess -o out.html -
Dan untuk mendapatkan gambaran perkiraan berapa banyak bot (crawler) yang menyerang server Anda:
# tail -F -n +0 access.log | grep -i --line-buffered 'bot' | goaccess -
Selain itu, perlu diperhatikan bahwa jika kita ingin menjalankan GoAccess dengan prioritas lebih rendah, kita dapat menjalankannya sebagai:
# nice -n 19 goaccess -f access.log -a
dan jika Anda tidak ingin menginstalnya di server Anda, Anda masih dapat menjalankannya dari mesin lokal Anda!
# ssh -n root@server 'tail -f /var/log/apache2/access.log' | goaccess -
Catatan: SSH memerlukan -n
agar GoAccess dapat membaca dari stdin. Selain itu, pastikan untuk menggunakan kunci SSH untuk autentikasi karena ini tidak akan berfungsi jika frasa sandi diperlukan.
Kami menerima banyak pertanyaan dan masalah yang telah terjawab sebelumnya.
GoAccess memiliki kemampuan untuk memproses log secara bertahap melalui penyimpanan internalnya dan membuang datanya ke disk. Ini bekerja dengan cara berikut:
--persist
, baru kumpulan data yang sama dapat dimuat.--restore
. Jika data baru diteruskan (disalurkan atau melalui file log), data tersebut akan ditambahkan ke kumpulan data asli. GoAccess melacak inode dari semua file yang diproses (dengan asumsi file akan tetap berada di partisi yang sama), selain itu, ia mengekstrak cuplikan data dari log bersama dengan baris terakhir yang diurai dari setiap file dan stempel waktu dari baris terakhir yang diurai . misalnya, inode:29627417|line:20012|ts:20171231235059
Pertama, membandingkan apakah cuplikan cocok dengan log yang sedang diurai, jika cocok, log diasumsikan tidak berubah secara drastis, misalnya, belum terpotong. Jika inode tidak cocok dengan file saat ini, ia akan mem-parsing semua baris. Jika file saat ini cocok dengan inode, maka file tersebut akan membaca baris yang tersisa dan memperbarui jumlah baris yang diurai dan stempel waktunya. Sebagai tindakan pencegahan ekstra, ini tidak akan mengurai baris log dengan stempel waktu ≤ daripada yang disimpan.
Data yang disalurkan berfungsi berdasarkan stempel waktu baris terakhir yang dibaca. Misalnya, ia akan mengurai dan membuang semua entri masuk hingga menemukan stempel waktu >= daripada yang disimpan.
// last month access log
# goaccess access.log.1 --persist
lalu, muat dengan
// append this month access log, and preserve new data
# goaccess access.log --restore --persist
Untuk membaca data yang ada saja (tanpa menguraikan data baru)
# goaccess --restore
Bantuan apa pun tentang GoAccess diterima. Cara yang paling bermanfaat adalah dengan mencobanya dan memberikan masukan. Jangan ragu untuk menggunakan pelacak masalah GitHub dan menarik permintaan untuk mendiskusikan dan mengirimkan perubahan kode.
Anda dapat berkontribusi pada terjemahan kami dengan mengedit file .po langsung di GitHub atau menggunakan antarmuka visual inlang.com
Menikmati!