Log Dosyaları
Log dosyaları (günlük kayıtları), Linux ve Unix benzeri sistemlerin işleyişini anlamak, sorunları teşhis etmek ve güvenlik olaylarını takip etmek için hayati öneme sahip bilgiler içerir. Sistemde çalışan servisler, çekirdek ve uygulamalar, önemli olayları, uyarıları ve hataları bu dosyalara kaydeder.
Modern Günlükleme: systemd-journald
systemd-journald
Modern Linux dağıtımlarının çoğu, systemd
init sistemi ile birlikte gelen systemd-journald
servisini merkezi günlükleme sistemi olarak kullanır. journald
, günlükleri yapılandırılmış, indekslenmiş bir ikili (binary) formatta toplar ve saklar.
journald
'nin Avantajları:
Merkezi Toplama: Çekirdek (
kmsg
), servislerin standart çıktı/hataları (stdout/stderr), syslog ve diğer kaynaklardan gelen logları tek bir yerde toplar.Yapılandırılmış Veri: Loglar sadece metin değil, aynı zamanda PID, UID, GID, servis adı (unit), önyükleme ID'si gibi meta verilerle birlikte saklanır. Bu, filtrelemeyi ve analizi kolaylaştırır.
İndeksleme: Hızlı arama ve filtreleme imkanı sunar.
Depolama: Günlükler genellikle
/var/log/journal/
(kalıcı depolama etkinse) veya/run/log/journal/
(geçici, sadece mevcut önyükleme için) altında saklanır. Depolama boyutu ve süresi yapılandırılabilir.
journalctl
Komutu:journald
tarafından toplanan günlüklere erişmek ve sorgulamak için journalctl
komutu kullanılır:
Geleneksel Günlükleme: syslog
ve /var/log
syslog
ve /var/log
journald
'nin yaygınlaşmasından önce, Linux sistemleri logları toplamak ve yönetmek için syslog protokolünü ve syslogd
, rsyslog
, syslog-ng
gibi daemon'ları kullanırdı. Bu daemon'lar, farklı kaynaklardan gelen log mesajlarını alır, filtreler ve genellikle /var/log/
dizini altındaki çeşitli metin dosyalarına yazardı.
Modern sistemlerde bile, rsyslog
gibi bir syslog daemon'ı genellikle journald
ile birlikte çalışır. rsyslog
, journald
'den logları okuyabilir ve bunları geleneksel /var/log/
dosyalarına (örn. /var/log/syslog
, /var/log/auth.log
, /var/log/messages
) yazabilir. Bu, eski araçlarla uyumluluk veya logların metin formatında saklanması gerektiğinde kullanışlıdır.
Syslog Temelleri: Syslog mesajları genellikle iki ana bilgi içerir:
Facility (Kaynak): Mesajı üreten programın türünü belirtir (örn.
kern
,user
,mail
,daemon
,auth
,syslog
,lpr
,news
,cron
,local0
-local7
).Severity/Priority (Önem Derecesi): Mesajın önemini belirtir (yukarıda
journalctl -p
kısmında listelenmiştir:emerg
,alert
,crit
,err
,warning
,notice
,info
,debug
).
rsyslog
gibi daemon'lar, /etc/rsyslog.conf
ve /etc/rsyslog.d/
altındaki dosyalarda tanımlanan kurallara göre, hangi facility/severity kombinasyonuna sahip mesajların hangi dosyaya yazılacağını veya nereye (örn. uzak sunucu) gönderileceğini belirler.
Yaygın Geleneksel Log Dosyaları (/var/log/
altında):
/var/log/messages
veya/var/log/syslog
: Genel sistem mesajları, birçok servisin varsayılan log hedefi (dağıtıma göre değişir).journald
sonrası önemi azalmıştır./var/log/auth.log
veya/var/log/secure
: Kimlik doğrulama ile ilgili mesajlar (login, sudo, sshd vb.)./var/log/kern.log
: Çekirdek mesajları./var/log/dmesg
: Sistem başlangıcındaki çekirdek halka arabelleği (ring buffer) mesajları.dmesg
komutu ile de okunabilir./var/log/boot.log
: Sistem başlangıç süreciyle ilgili mesajlar./var/log/cron
veya/var/log/syslog
: Zamanlanmış görev (cron) logları./var/log/maillog
veya/var/log/mail.log
: Posta sunucusu logları./var/log/httpd/
veya/var/log/apache2/
: Apache web sunucusu logları (access_log
,error_log
)./var/log/nginx/
: Nginx web sunucusu logları./var/log/mysql/
veya/var/log/mariadb/
: Veritabanı sunucusu logları.
Bu dosyalar genellikle düz metin formatındadır ve cat
, less
, tail
, grep
, awk
, sed
gibi standart araçlarla incelenebilir. tail -f <dosya>
komutu, bir log dosyasını canlı olarak takip etmek için sıkça kullanılır.
Log Rotasyonu (logrotate
)
logrotate
)Log dosyaları zamanla çok büyüyebilir ve disk alanını doldurabilir. logrotate
aracı, log dosyalarını düzenli aralıklarla (günlük, haftalık, aylık) otomatik olarak arşivlemek, sıkıştırmak ve eskiyenleri silmek için kullanılır.
Yapılandırma: Ana yapılandırma dosyası
/etc/logrotate.conf
'tur. Uygulamaya özel kurallar ise genellikle/etc/logrotate.d/
dizini altındaki dosyalarda tanımlanır.Çalışma:
logrotate
genellikle bir cron işi tarafından (örn./etc/cron.daily/logrotate
) günde bir kez çalıştırılır.Örnek Yapılandırma (
/etc/logrotate.d/apache2
):Test Etme: Bir yapılandırma dosyasının nasıl çalışacağını test etmek için
-d
(debug) seçeneği kullanılır:Zorla Çalıştırma: Rotasyonu hemen tetiklemek için
-f
(force) seçeneği kullanılır:
Etkili log yönetimi, hem journald
'nin modern yeteneklerini hem de logrotate
gibi geleneksel araçları anlamayı gerektirir.
Uygulama Logları ve Özel Rotasyon
Sistem loglarının yanı sıra, çalıştırdığınız uygulamaların (web sunucuları, veritabanları, özel uygulamalar vb.) kendi log dosyaları olacaktır. Bu logların konumları uygulamaya göre değişir, ancak genellikle /var/log/
altında kendi alt dizinlerinde (örn. /var/log/nginx/
) veya uygulamanın kendi dizininde bulunurlar.
Web hosting gibi ortamlarda, her kullanıcı veya sanal ana bilgisayar (virtual host) için ayrı log dosyaları tutmak yaygındır. Bu loglar genellikle kullanıcının ev dizini altında özel bir logs
klasöründe saklanabilir (örn. /home/kullanici_adi/logs/
).
Bu özel log dosyalarının da düzenli olarak rotate edilmesi gerekir. logrotate
bunun için de kullanılabilir. /etc/logrotate.d/
altına özel bir yapılandırma dosyası ekleyerek bu logları yönetebilirsiniz.
Örnek: Kullanıcı Loglarını Rotate Etme (/etc/logrotate.d/virtualhosts
)
Aşağıdaki örnek, /home/
altındaki tüm kullanıcıların logs
dizinlerindeki .log
uzantılı dosyaları günlük olarak rotate eder, 7 gün saklar ve sıkıştırır:
Bu yapılandırmayı test etmek için sudo logrotate -d /etc/logrotate.d/virtualhosts
komutunu kullanabilirsiniz. Uygulamanızın log dosyalarını doğru şekilde yeniden açması için postrotate
betiğini uygun şekilde ayarlamak önemlidir.
Last updated