Komutları üretim sunucusunda çalıştırmadan önce yedek alın ve mümkünse bir test ortamında deneyin. Yönetim erişiminizi (SSH, panel) kaybetmemek için ayar değişikliklerinde açık bir ikinci oturum bulundurun.
Bu rehberde ne yapacağız?
Erişim günlüklerinde hangi sayfaların en çok ziyaret edildiğini, hangi IP adreslerinin yoğun istek attığını, hangi adreslerin 404 veya 500 döndürdüğünü bilmek hem performans hem güvenlik için değerlidir. GoAccess, Nginx ve Apache günlüklerini okuyup terminalde canlı bir panel veya tek dosyalık HTML rapor olarak sunan hafif bir araçtır. Bu rehberde GoAccess ile web log analizi yapmayı, günlük formatını eşlemeyi, sıkıştırılmış arşivleri okumayı ve raporu zamanlayarak güvenle yayınlamayı anlatıyoruz.
Rehber site performansını ve olağandışı trafiği izlemek isteyen sunucu yöneticilerine yöneliktir. Tahmini süre: 20-30 dakika.
Gereksinimler
- Debian/Ubuntu veya AlmaLinux/Rocky çalıştıran bir sunucu ve sudo yetkisi
- Nginx veya Apache erişim günlüğüne okuma yetkisi
- Günlük formatının bilinmesi (varsayılan combined biçimi en yaygın olanıdır)
- RHEL tabanlı sistemlerde EPEL deposu
Adım adım GoAccess ile web log analizi
1. GoAccess'i kurun
# Debian/Ubuntu
sudo apt update
sudo apt install goaccess
# AlmaLinux/Rocky (EPEL gerekir)
sudo dnf install epel-release
sudo dnf install goaccessDepodaki sürüm bazı seçenekleri desteklemeyebilir. Kurulu sürümün seçeneklerini goaccess --help ile doğrulayın.
2. Günlük yollarını ve formatı belirleyin
Erişim günlüğünün konumu dağıtıma ve yapılandırmaya göre değişir. Yaygın yollar şunlardır:
- Nginx:
/var/log/nginx/access.log - Apache (Debian/Ubuntu):
/var/log/apache2/access.log - Apache (AlmaLinux/Rocky):
/var/log/httpd/access_log
Nginx ve Apache'nin varsayılan biçimi combined olduğundan GoAccess'te --log-format=COMBINED ile okunur. Özel bir log_format veya LogFormat tanımladıysanız aynı alan sırasını GoAccess'e anlatmanız gerekir; bunun için GoAccess belgesindeki biçim belirteçlerine bakın.
3. Terminalde canlı inceleyin
Günlükleri okumak için genellikle sudo gerekir. Dosyadan doğrudan çalıştırın:
sudo goaccess /var/log/nginx/access.log --log-format=COMBINEDArayüzde sekmeler arasında gezinmek için ok ve tab tuşlarını, çıkmak için q tuşunu kullanın. Başlıca paneller: ziyaretçiler, istenen adresler, 404 hataları, istemci işletim sistemleri, tarayıcılar, referanslar ve HTTP durum kodlarıdır.
4. Arşivlenmiş ve döndürülmüş günlükleri birlikte okuyun
Döndürülmüş günlükler genellikle .gz ile sıkıştırılmıştır. Hepsini tek bir akışta birleştirmek için:
sudo sh -c 'zcat -f /var/log/nginx/access.log* | goaccess - --log-format=COMBINED'Burada zcat -f sıkıştırılmamış dosyaları da olduğu gibi geçirir. Apache için yolu kendi sisteminize göre değiştirin.
5. HTML rapor üretin
Paylaşılabilir ve filtrelenebilir bir rapor için HTML çıktı alın. Raporu web kök dizininize değil, erişim denetimli ayrı bir dizine yazın.
sudo mkdir -p /var/www/raporlar
# Nginx grubu: Debian/Ubuntu www-data, AlmaLinux/Rocky nginx
sudo chown root:www-data /var/www/raporlar
sudo chmod 750 /var/www/raporlar
sudo sh -c 'zcat -f /var/log/nginx/access.log* | goaccess - --log-format=COMBINED --ignore-crawlers -o /var/www/raporlar/rapor.html'--ignore-crawlers bilinen arama motoru botlarını hariç tutar. Kendi izleme sisteminizin IP adresini sayımdan çıkarmak için --exclude-ip=10.0.0.5 kullanabilirsiniz.
6. Raporu zamanlayın
Raporu saatlik güncellemek için bir cron girdisi kullanın. Sistem geneli dosya yeterlidir ve root olarak çalışır.
sudo nano /etc/cron.d/goaccess-rapor0 * * * * root zcat -f /var/log/nginx/access.log* | /usr/bin/goaccess - --log-format=COMBINED --ignore-crawlers -o /var/www/raporlar/rapor.html >/dev/null 2>&1Not: cron dosyalarında yüzde işareti özel anlam taşır; komutlarda kullanmayın.
7. Raporu yetkisiz erişime karşı koruyun
Rapor IP adreslerini, adresleri ve kullanıcı davranışını içerir. Herkese açık bırakmayın. Nginx'te temel kimlik doğrulama ve yalnızca belirli IP'lerden erişim önerilir; parolayı komut satırında vermemek için htpasswd'yi etkileşimli çalıştırın.
# Debian/Ubuntu
sudo apt install apache2-utils
# AlmaLinux/Rocky
sudo dnf install httpd-tools
sudo htpasswd -c /etc/nginx/.htpasswd-rapor yoneticilocation /raporlar/ {
alias /var/www/raporlar/;
auth_basic "Rapor";
auth_basic_user_file /etc/nginx/.htpasswd-rapor;
}Değişikliği sudo nginx -t ile denetleyip sudo systemctl reload nginx ile uygulayın. İsterseniz raporu hiç yayınlamayıp yalnızca SSH ile indirmeyi de seçebilirsiniz.
8. Gizlilik için IP anonimleştirme
Kişisel verilerin korunması yükümlülükleriniz varsa IP adreslerini raporda kısaltabilirsiniz.
sudo sh -c 'zcat -f /var/log/nginx/access.log* | goaccess - --log-format=COMBINED --anonymize-ip -o /var/www/raporlar/rapor.html'Doğrulama
Raporun oluştuğunu ve içinde gerçek veri bulunduğunu kontrol edin.
ls -lh /var/www/raporlar/rapor.html
sudo goaccess /var/log/nginx/access.log --log-format=COMBINED -o /tmp/test-rapor.json
rm -f /tmp/test-rapor.jsonBeklenen sonuç: rapor dosyası sıfırdan büyük, güncel bir zaman damgasıyla oluşur. Tarayıcıda açtığınızda toplam istek sayısı, benzersiz ziyaretçi ve en çok istenen adresler görünmelidir. Parola korumasını yapılandırdıysanız curl -I https://alanadiniz.example/raporlar/ komutu kimlik bilgisi olmadan 401 döndürmelidir.
Sık karşılaşılan sorunlar
- Format hatası veya sıfır istek: Günlük formatı COMBINED ile uyuşmuyordur; log_format tanımınızı kontrol edip GoAccess'e aynı biçimi verin.
- Permission denied: Günlük dosyası yalnızca root veya adm grubuna okunabilir; sudo ile çalıştırın veya betiği uygun kullanıcıyla yürütün.
- Rapor güncellenmiyor: Cron satırını ve sistem günlüğünü kontrol edin; yol veya boru (pipe) hatası olabilir.
- Yalnızca bugünün verisi görünüyor: Arşivler dahil edilmemiştir; zcat -f ile tüm dosyaları verin.
- Çok bot trafiği sayıyı şişiriyor: --ignore-crawlers ekleyin ve şüpheli adresleri güvenlik duvarında inceleyin.
Güvenlik ve bakım notları
- HTML raporlar kullanıcı IP adreslerini ve adreslerini içerir; kimlik doğrulama veya IP kısıtı olmadan yayınlamayın.
- Günlükleri okuyan kullanıcıyı gereğinden fazla yetkilendirmeyin; mümkünse raporu üretim sunucusunda üretip yalnızca kopyasını paylaşın.
- Gizlilik yükümlülükleriniz için IP anonimleştirme ve günlük saklama süresini gözden geçirin.
- Büyük günlüklerde GoAccess bellek kullanabilir; çalışmayı yoğun olmayan saatlere zamanlayın.
- Ani 404 veya 401/403 artışlarını, tarama girişimlerinin işareti olarak değerlendirin ve gerekirse fail2ban gibi araçlarla destekleyin.
- Günlük döndürmenin düzenli çalıştığından emin olun, aksi halde dev dosyalar analizi yavaşlatır.
Sık sorulan sorular
GoAccess canlı olarak çalışabilir mi?
Evet, gerçek zamanlı HTML modu vardır ve bir WebSocket bağlantısı kullanır. Bu modu internete açmak ek bir saldırı yüzeyi yaratır; yalnızca kimlik doğrulama ve erişim kısıtı ile kullanın ve ayrıntıları resmî belgeden doğrulayın.
Nginx ve Apache günlüklerini birlikte analiz edebilir miyim?
Aynı formatta (combined) iseler dosyaları birleştirip tek akış olarak verebilirsiniz. Ancak sunucuları ayrı raporlamak, sorunları ayırmak için genellikle daha anlaşılırdır.
Kurulu sürümde bir seçenek yoksa ne yapmalıyım?
Dağıtım depolarındaki sürüm eski olabilir. goaccess --help ile desteklenen seçenekleri kontrol edin; gerekiyorsa resmî belgedeki güncel kurulum yöntemlerini değerlendirin.
İlgili sözlük terimleri
Bu kategorideki diğer rehberler
- Postfix ile giden e-posta yönlendirme (smarthost) ve temel güvenlikPostfix ile giden e-postaları kimlik doğrulamalı SMTP röle (smarthost) üzerinden TLS ile gönderme, yalnızca yerel kullanım için güvenli yapılandırma ve açık röle kontrolü rehberi.
- logrotate yapılandırması: günlük döndürme, sıkıştırma ve saklamalogrotate ile günlük dosyalarını döndürme, sıkıştırma ve saklama süresini ayarlama; özel uygulama günlükleri için yapılandırma yazma, test etme ve sık hataları çözme rehberi.
- Memcached kurulumu ve güvenliğiMemcached önbellek sunucusunu Debian ve RHEL tabanlı sistemlere kurma, UDP kapatma, bind adresi ve güvenlik duvarıyla erişimi kısıtlama ve SASL notlarını içeren güvenli kurulum rehberi.
- PostgreSQL kurulumu ve güvenli yapılandırmaPostgreSQL kurulumu ve güvenli yapılandırma: paket kurulumu, listen_addresses, pg_hba.conf, scram-sha-256, en az yetkili rol, yedekleme ve doğrulama adımları.