Web sunucunuzda neler döndüğünü anlamak istiyorsanız, access log dosyaları sizin en iyi dostunuzdur. OpenLiteSpeed kullanıyorsanız bu loglar son derece zengin bilgi içerir; ancak ham haliyle bakmak yerine doğru araçları kullanarak analiz etmek gerekir. Bu yazıda OpenLiteSpeed access log yapısını, analiz yöntemlerini ve gerçek dünya senaryolarında nasıl kullanacağınızı ele alacağız.
OpenLiteSpeed Log Yapısını Tanımak
OpenLiteSpeed, varsayılan olarak loglarını /usr/local/lsws/logs/ dizininde tutar. Ana access log dosyası genellikle access.log adını taşır, ancak sanal hostlar için ayrı log dosyaları tanımlamak hem daha düzenli hem de analiz açısından çok daha pratiktir.
OpenLiteSpeed access logları Apache ile uyumlu Combined Log Format kullanır. Bir satır şu şekilde görünür:
192.168.1.100 - admin [15/Jan/2025:10:23:45 +0300] "GET /wp-admin/index.php HTTP/1.1" 200 4523 "https://example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
Bu satırdaki alanlar sırasıyla şunlardır:
- IP adresi: İsteği yapan istemcinin IP’si
- Kimlik: RFC 1413 kimliği (genellikle tire)
- Kullanıcı adı: HTTP auth ile giriş yapıldıysa kullanıcı adı
- Tarih/saat: İsteğin zamanı
- İstek satırı: HTTP metodu, URL ve protokol
- HTTP durum kodu: 200, 404, 500 gibi
- Byte sayısı: Gönderilen veri miktarı
- Referer: İsteğin geldiği sayfa
- User-Agent: İstemci tarayıcı veya bot bilgisi
Log Format Özelleştirme
OpenLiteSpeed’in web arayüzünden (varsayılan port 7080) ya da httpd_config.conf dosyasından log formatını özelleştirebilirsiniz. Örneğin yanıt süresini de loglara eklemek için:
# /usr/local/lsws/conf/httpd_config.conf dosyasını düzenleyin
# logFormat satırını bulun veya ekleyin
logFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %D"
Burada %D mikrosaniye cinsinden yanıt süresini ekler. Bu bilgi, yavaş sayfaları tespit etmek için son derece değerlidir.
Temel Log Analiz Komutları
Önce en basit ve en sık kullanılan komutlarla başlayalım. Bunlar her gün işinize yarayacak araçlar.
En Fazla İstek Yapan IP Adresleri
# Son 10000 satırdan en aktif IP'leri bulun
tail -n 10000 /usr/local/lsws/logs/access.log |
awk '{print $1}' |
sort | uniq -c |
sort -rn |
head -20
Bu komut size DDoS saldırısı mı yoksa meşru yüksek trafik mi yaşandığını hızlıca gösterir. Tek bir IP’den binlerce istek geliyorsa alarm zilleri çalmaya başlamalıdır.
HTTP Durum Kodlarının Dağılımı
# Bugünün log dosyasında durum kodlarını say
grep "$(date +%d/%b/%Y)" /usr/local/lsws/logs/access.log |
awk '{print $9}' |
sort | uniq -c |
sort -rn
Çıktı şu şekilde görünür:
8423 200
342 304
187 404
23 500
8 403
500 hataları yüksekse PHP veya uygulama katmanında bir sorun var demektir. 404 hataları çoksa kırık linkler veya tarama botu faaliyeti söz konusu olabilir.
Gerçek Dünya Senaryosu: Yoğun Trafik Analizi
Diyelim ki siteniz aniden yavaşladı. Sunucuya bağlandınız ve ne olduğunu anlamaya çalışıyorsunuz. İşte bu durumda izleyeceğiniz adımlar:
# Son 5 dakikadaki istek sayısını kontrol edin
awk -v d="$(date -d '5 minutes ago' +'%d/%b/%Y:%H:%M')"
'$4 > "[" d' /usr/local/lsws/logs/access.log | wc -l
# Hangi URL'lere istek geliyor?
tail -n 5000 /usr/local/lsws/logs/access.log |
awk '{print $7}' |
cut -d'?' -f1 |
sort | uniq -c |
sort -rn |
head -20
Bu analiz size hangi endpoint’in yük altında olduğunu gösterir. Eğer /xmlrpc.php veya /wp-login.php gibi belirli bir URL öne çıkıyorsa, bu muhtemelen bir brute-force saldırısıdır.
Gerçek Zamanlı Log İzleme
Anlık olarak neler olduğunu görmek için:
# Canlı log takibi - sadece 500 hatalarını göster
tail -f /usr/local/lsws/logs/access.log | grep ' 500 '
# Canlı log takibi - belirli bir IP'yi filtrele
tail -f /usr/local/lsws/logs/access.log | grep '192.168.1.100'
# Canlı log takibi - POST isteklerini izle
tail -f /usr/local/lsws/logs/access.log | grep '"POST '
GoAccess ile Görsel Analiz
Komut satırı araçları işlevsel olsa da GoAccess, terminal üzerinde güzel bir dashboard sunar. OpenLiteSpeed loglarıyla mükemmel uyum sağlar.
# GoAccess kurulumu (Ubuntu/Debian)
apt-get install goaccess
# GoAccess kurulumu (CentOS/RHEL)
yum install goaccess
# Terminal dashboard ile canlı analiz
goaccess /usr/local/lsws/logs/access.log
--log-format=COMBINED
-o /var/www/html/report.html
--real-time-html
# Sadece terminal çıktısı için
goaccess /usr/local/lsws/logs/access.log
--log-format=COMBINED
GoAccess’in ürettiği HTML raporu şunları içerir: benzersiz ziyaretçi sayısı, en çok istenen sayfalar, 404 hataları, tarayıcı dağılımı, ülke bazında trafik ve çok daha fazlası. Bu raporu periyodik olarak üretip bir cron job ile saklarsanız tarihsel trend analizi de yapabilirsiniz.
Saldırı Tespiti ve Güvenlik Analizi
Access logları güvenlik açısından da son derece değerlidir. SQL injection, XSS ve tarama saldırılarını tespit etmek için:
# SQL injection girişimlerini tespit et
grep -i "union.*select|select.*from|insert.*into|drop.*table|--|1=1|' OR "
/usr/local/lsws/logs/access.log |
awk '{print $1}' |
sort | uniq -c |
sort -rn |
head -10
# XSS denemelerini ara
grep -i "<script|javascript:|onerror=|onload="
/usr/local/lsws/logs/access.log |
awk '{print $1, $7}' |
head -20
# Dizin tarama denemelerini bul (çok sayıda 404)
awk '$9 == "404" {print $1}' /usr/local/lsws/logs/access.log |
sort | uniq -c |
sort -rn |
awk '$1 > 50 {print "Supheli IP:", $2, "- 404 sayisi:", $1}'
Bu analizleri düzenli çalıştırıp çıktıları bir dosyaya kaydederseniz, otomatik IP engelleme sistemine temel oluşturabilirsiniz.
Fail2Ban ile Otomatik Engelleme
OpenLiteSpeed loglarını Fail2Ban ile entegre etmek için özel bir filtre oluşturmanız gerekir:
# /etc/fail2ban/filter.d/openlitespeed-auth.conf dosyası oluşturun
cat > /etc/fail2ban/filter.d/openlitespeed-auth.conf << 'EOF'
[Definition]
failregex = ^<HOST> .* "(GET|POST|HEAD) .*" (401|403) .*$
ignoreregex =
EOF
# /etc/fail2ban/jail.d/openlitespeed.conf dosyası oluşturun
cat > /etc/fail2ban/jail.d/openlitespeed.conf << 'EOF'
[openlitespeed-auth]
enabled = true
port = http,https
filter = openlitespeed-auth
logpath = /usr/local/lsws/logs/access.log
maxretry = 20
findtime = 300
bantime = 3600
EOF
# Fail2Ban'i yeniden başlatın
systemctl restart fail2ban
Log Rotasyonu ve Yönetimi
Loglar zamanla devasa boyutlara ulaşabilir. OpenLiteSpeed kendi log rotasyon mekanizmasına sahiptir, ancak bunu doğru yapılandırmak gerekir.
# OpenLiteSpeed'in yerleşik log rotasyonunu kullan
# Web admin panelinden Log Settings > Access Log bölümünden ayarlayın
# veya httpd_config.conf içine ekleyin:
# Logrotate ile harici rotasyon
cat > /etc/logrotate.d/openlitespeed << 'EOF'
/usr/local/lsws/logs/access.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
sharedscripts
postrotate
/usr/local/lsws/bin/lswsctrl restart > /dev/null 2>&1 || true
endscript
}
EOF
Dikkat: OpenLiteSpeed’in graceful restart ile log dosyasını yeniden açması gerekir. postrotate bölümündeki komut bunu sağlar.
Sıkıştırılmış Log Dosyalarını Analiz Etme
# .gz uzantılı eski logları doğrudan analiz edin
zcat /usr/local/lsws/logs/access.log.1.gz |
awk '{print $9}' |
sort | uniq -c |
sort -rn
# Birden fazla log dosyasını birlikte analiz edin
zcat /usr/local/lsws/logs/access.log.*.gz |
grep '"GET ' |
awk '{print $7}' |
cut -d'?' -f1 |
sort | uniq -c |
sort -rn |
head -20
Performans Analizi: Yavaş İstekleri Bulun
Eğer log formatına yanıt süresini eklediyseniz (yukarıda %D ile anlattık), hangi sayfaların yavaş çalıştığını tespit edebilirsiniz:
# 3 saniyeden uzun süren istekleri bul (mikrosaniye cinsinden 3000000)
awk '{if ($NF > 3000000) print $0}' /usr/local/lsws/logs/access.log |
awk '{print $7, $NF}' |
sort -k2 -rn |
head -20
# Ortalama yanıt süresini URL bazında hesapla
awk '{
url = $7
time = $NF
sum[url] += time
count[url]++
}
END {
for (url in sum) {
avg = sum[url] / count[url]
if (avg > 1000000) printf "%.0f mst%sn", avg/1000, url
}
}' /usr/local/lsws/logs/access.log | sort -rn | head -20
Bu çıktı size hangi sayfaların optimize edilmesi gerektiğini doğrudan söyler. Özellikle e-ticaret sitelerinde belirli ürün sayfaları veya arama fonksiyonu bu analizde öne çıkabilir.
Sanal Host Bazında Log Yönetimi
Birden fazla site barındırıyorsanız her site için ayrı log dosyası tutmak çok daha sağlıklıdır. OpenLiteSpeed’de sanal host konfigürasyonuna şunu ekleyin:
# /usr/local/lsws/conf/vhosts/example.com/vhconf.conf
# accessLog bölümünü düzenleyin
accessLog {
fileName /usr/local/lsws/logs/example.com/access.log
logFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %D"
logHeaders 5
rollingSize 100M
keepDays 30
compressArchive 1
}
Bu yapılandırma ile her site kendi logunu tutar, 100MB’a ulaştığında rotate edilir ve 30 gün boyunca sıkıştırılmış olarak saklanır.
Otomasyon: Log Analiz Script’i
Aşağıdaki script’i cron job olarak çalıştırarak günlük özet raporlar alabilirsiniz:
#!/bin/bash
# /usr/local/bin/ols-log-report.sh
LOG_FILE="/usr/local/lsws/logs/access.log"
REPORT_FILE="/var/reports/ols-daily-$(date +%Y%m%d).txt"
YESTERDAY=$(date -d yesterday +%d/%b/%Y)
mkdir -p /var/reports
echo "=== OpenLiteSpeed Gunluk Rapor: $(date +%d/%m/%Y) ===" > $REPORT_FILE
echo "" >> $REPORT_FILE
echo "--- Toplam Istek Sayisi ---" >> $REPORT_FILE
grep "$YESTERDAY" $LOG_FILE | wc -l >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "--- HTTP Durum Kodu Dagilimi ---" >> $REPORT_FILE
grep "$YESTERDAY" $LOG_FILE |
awk '{print $9}' |
sort | uniq -c |
sort -rn >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "--- En Aktif 10 IP ---" >> $REPORT_FILE
grep "$YESTERDAY" $LOG_FILE |
awk '{print $1}' |
sort | uniq -c |
sort -rn |
head -10 >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "--- En Cok Ziyaret Edilen 10 Sayfa ---" >> $REPORT_FILE
grep "$YESTERDAY" $LOG_FILE |
awk '{print $7}' |
cut -d'?' -f1 |
sort | uniq -c |
sort -rn |
head -10 >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "--- 500 Hatasi Veren URL'ler ---" >> $REPORT_FILE
grep "$YESTERDAY" $LOG_FILE |
awk '$9 == "500" {print $7}' |
sort | uniq -c |
sort -rn |
head -10 >> $REPORT_FILE
# Raporu mail ile gonder (mailutils kurulu olmasi gerekir)
if command -v mail &> /dev/null; then
mail -s "OLS Gunluk Log Raporu - $(date +%d/%m/%Y)" [email protected] < $REPORT_FILE
fi
echo "Rapor olusturuldu: $REPORT_FILE"
Script’i çalıştırılabilir yapın ve cron’a ekleyin:
chmod +x /usr/local/bin/ols-log-report.sh
# Her gece 06:00'da çalıştır
echo "0 6 * * * root /usr/local/bin/ols-log-report.sh" >> /etc/crontab
Bot Trafiğini Ayırt Etme
Her web sitesinde meşru bot trafiği (Googlebot, Bingbot gibi) ile zararlı botlar bir arada bulunur. Bunları ayırt etmek hem SEO hem de güvenlik açısından önemlidir:
# Tüm bot trafiğini listele
awk -F'"' '{print $6}' /usr/local/lsws/logs/access.log |
grep -i "bot|crawler|spider" |
sort | uniq -c |
sort -rn |
head -20
# Googlebot aktivitesini kontrol et
grep -i "googlebot" /usr/local/lsws/logs/access.log |
awk '{print $1}' |
sort -u
# Sahte Googlebot tespiti (gerçek Googlebot Google IP'lerinden gelir)
# Gerçek değil gibi görünen Googlebot IP'lerini işaretle
grep -i "googlebot" /usr/local/lsws/logs/access.log |
awk '{print $1}' |
sort -u |
while read ip; do
host $ip | grep -q "googlebot|google.com" || echo "Sahte Googlebot: $ip"
done
OpenLiteSpeed Admin Panel ile Log İzleme
OpenLiteSpeed’in web admin paneli (https://sunucu-ip:7080) üzerinden de log izleme yapabilirsiniz. Panel üzerinden:
- Actions > View Error Log: Hata loglarını görüntüleyin
- Server Status: Anlık bağlantı ve istek istatistiklerini takip edin
- Virtual Hosts: Her sitenin log ayarlarını ayrı ayrı düzenleyin
Panel kullanışlı olsa da ciddi analiz için komut satırı araçları çok daha güçlüdür. Özellikle büyük log dosyalarında panel yavaş kalabilir.
Disk Alanı Yönetimi
Log dosyaları diskinizi doldurmaya başladığında ne yapacaksınız? Önce durumu değerlendirin:
# Log dizininin boyutunu kontrol et
du -sh /usr/local/lsws/logs/
du -sh /usr/local/lsws/logs/* | sort -rh
# En büyük log dosyalarını bul
find /usr/local/lsws/logs/ -name "*.log*" -exec ls -lh {} ; |
sort -k5 -rh | head -10
# Belirli tarihten eski logları temizle (30 günden eski)
find /usr/local/lsws/logs/ -name "*.log.*.gz" -mtime +30 -delete
Önemli not: Log dosyalarını silmeden önce yedeklemenizi öneririm. Özellikle yasal yükümlülükleriniz varsa belirli süre logları saklamak zorunda olabilirsiniz.
AWK ile İleri Düzey Analiz
AWK, log analizi için vazgeçilmez bir araçtır. İşte birkaç gelişmiş kullanım örneği:
# Saatlik trafik dağılımını göster
awk '{
split($4, a, ":")
hour = substr(a[2], 1, 2)
count[hour]++
}
END {
for (h in count) printf "%s:00 - %d istekn", h, count[h]
}' /usr/local/lsws/logs/access.log | sort
# Belirli bir saatteki yoğunluğu analiz et
awk -v hour="10" '
$4 ~ /:10:/ {
count++
if ($9 >= 500) errors++
bytes += $10
}
END {
printf "Toplam istek: %dn", count
printf "Hata orani: %.2f%%n", (errors/count)*100
printf "Toplam veri: %.2f MBn", bytes/1024/1024
}' /usr/local/lsws/logs/access.log
Sonuç
OpenLiteSpeed access logları, sunucunuzda neler olup bittiğine dair inanılmaz zengin bir bilgi kaynağıdır. Bu yazıda anlattıklarımı günlük rutininize entegre ettiğinizde, sorunları ortaya çıkmadan önce tespit etme, saldırıları erken fark etme ve performans sorunlarını kök nedenlerine kadar izleme kapasitesi kazanırsınız.
Başlangıç için şunları yapmanızı öneririm: önce log formatına yanıt süresini ekleyin, GoAccess kurarak görsel bir dashboard hazırlayın, günlük rapor script’ini cron’a alın ve Fail2Ban entegrasyonunu tamamlayın. Bu dört adım, log yönetiminizi ciddi ölçüde iyileştirecektir.
Logları düzenli olarak analiz etmek bir alışkanlık meselesidir. Her sabah beş dakika ayırarak dünün raporuna bakmak, uzun vadede ciddi sorunları çok erken yakalamanızı sağlar. Sunucunuz size her zaman konuşuyor; iyi bir sysadmin onu dinlemeyi bilir.