2 Mart 2012 Cuma

Linux Syslogd ve Log Rotate


Linux sistemin log servisi sistemin önemli bir parçasıdır. Sistem sorunlarını önlemek ve çözmek için bir sistem yöneticisi bu logları analize edebilmelidir. Sistem loglarını konfigüre etmek ve log dosyalarını yönetebilinmelidir, özellikle sistem çok yüklenmeli çalışıyor ise bu dosyalar çok büyümektedir. Bu dosyalar sadece makul bir zaman için tutulmalıdır, bu da dosyaları incelemekte yardımcı olacaktır.


Red Hat Linux sisteminde iki sistem log süreci bulunmaktadır:
  • syslogd – Sistemin temel log süreci
  • klogd – Çekirdek loglarını tutan süreç
Aşağıdaki bölümlerde bu süreçler ele alınmaktadır.

1.1      syslogd Süreci

Belirtilmiş olduğu gibi syslogd sistemin temel loglarını tutan bir süreçtir. Bu süreç sistem açılışında /etc/rc.d/init.d/syslog scripti çalıştırılarak başlatılır.
Önemli bir olay meydana geldiğinde ve yazılım bu olay hakkında log tutmak istediğinde, mesajını syslogd sürecine gönderir. Genel olarak loglar /var/log/messages dosyasına yazılır. Bunun dışında syslogd sürecin çeşitli log işlemleri vardır. Örneğin syslogd olay loglarını farklı dosyalara yazabilmektedir, ya da sistem konsoluna gönderir, ya da o an sistemde bulunan kullanıcılara vb. /etc/syslog.conf dosyası syslogd sürecin konfigürasyon dosyasıdır.

1.2      klogd Süreci

Çekirdek mesajlarını tutan diğer onemli süreç klogd’dir. Genel olarak bu süreç gelen mesajları direk syslogd sürecine aktarır. Ama istenildiğinde bu süreç komut satırından çalıştırılarak çekirdek mesajları belirtilmiş dosyaya yazdırılabilinmektedir.

1.3      Syslog Konfigürasyonu

Sistem log servisinin konfigürasyonu /etc/syslog.conf dosyasında yer almaktadır. Bu dosyadaki her satır log türünü ve yapılacak log işlemini belirtir. Genel olarak satır yapısı şu şekildedir:

tip.öncelik[; tip.öncelik ...]     işlem

Burada:
  • tip – log yazdıran uygulamaların türünü belirtir. Bir kaç tip virgül ile ayırılarak beraber tanımlanabilir.
  • öncelik – mesajın önemini belirtir.
  • işlem – tanımlanmış tip ve önceliğe uygun bir mesaja uygulanacak işlemi belirler.
Tipler, öncelikler ve işlemler aşağıdaki tablolarda tanımlanmıştır.

Tipler ve Tanımları
Tip (Facility) belirteci

Tanım
auth
Kullanıcı tanıma mesajları.
authpriv
Özel kullanıcı tanıma mesajları. Sıradan kullanılar bu mesajları görmemelidir.
cron
Cron uygulamasının mesajları
daemon
Sunucu süreçlerin ve TCP servisinin mesajları
kern
Çekirdek mesajları
lpr
Yazıcı süreçlerin mesajları
mail
E-posta süreçlerin mesajları
news
Haber grupların mesajları
syslog
Sistem mesaj servisin mesajları
user
Kullanıcılar ile ilgili süreçlerin mesajları
uucp
Unix-to-Unix Copy Program (UUCP) mesajları
local0-local7
Makinada tanımlanmış süreçlerin mesajları
*
Tüm süreçlerin mesajları

Mesajların Öncelik Tanımları
Öncelik (priority) ifadesi

Öncelik

Tanım
debug
1
Hata ayıklama için kullanılan mesajlar
info
2
Bilgilendirme mesajlar
notice
3
Önemli durumlar için kullanılan mesajlar
warning
4
Uyarı mesajları
err
5
Hata mesajları
crit
6
Ciddi, kritik hatalar
alert
7
Acil durum mesajları
emerg
8
Sistem devre dışı
*

Tüm mesajlar
=öncelik

Sadece belirtilmiş öncelikli loglar tutulsun
! öncelik

Belirtilmiş öncelikli loglar dikkate alınmasın
!=öncelik

Belirtilmiş öncelikli loglar dışındaki tüm loglar.

Log İşlemlerin Tanımları
İşlem belirteci
Açıklama
tam yol
Mesajlar tam yolu ve adı verilen dosyaya yazılır
/dev/console veya /dev/ttyN
Mesajlar belirtilmiş terminale gönderilir
@host
Mesajlar uzaktaki bilgisayara gönderilir
Kullanıcı kimlik numarası
Mesaj kimlik numarası verilen kullanıcıya, o anda sistemde bulunuyor ise, gönderilir. Mesajı bir kaç kullanıcıya göndermek için kullanıcı numaralar bir virgül ile ayırılarak beraber yazılır.
*
Mesaj o an sistemde bulunan tüm kullanıcılara gönderilir

Örnek:
kern.*                                                                          /dev/console
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                                                   /var/log/secure
mail.*                                                                          /var/log/maillog
cron.*                                                                          /var/log/cron
*.emerg                                                                       *
uucp,news.crit                                                            /var/log/spooler
local7.*                                                                       /var/log/boot.log

1.4      Sistem Log Dosyası

Bu bölümde sistemin logları yazılan dosyasının yapısı ele alınmaktadır. Her mesaj bir satıra yazılır. Mesajın genel yapısı şu şekildedir:

zaman konak  uygulama[süreç_kimlik_numarası]:  mesaj

burada:
  • zaman – mesajın yazılma tarihi ve saati
  • konak – mesajı gönderen bilgisayar adı
  • uygulama – mesajı gönderen uygulamanın ismi
  • süreç_kimlik_numarası – mesajı gönderen uygulamanın süreç numarası
  • mesaj – yazdırılan mesajın içeriği
  
Örnek:
Jan 29 12:46:04 cvs postgresql: Starting postgresql service:  succeeded
Jan 29 12:46:05 cvs sendmail: sendmail startup succeeded
Jan 29 12:46:06 cvs httpd: httpd startup succeeded
Jan 29 12:46:07 cvs crond: crond startup succeeded
Jan 29 12:46:07 cvs anacron: anacron startup succeeded
Jan 30 15:08:14 cvs sshd(pam_unix)[25035]: session opened for user root by (uid=0)
Jan 30 15:09:00 cvs named[25095]: starting BIND 9.1.0 -u named
Jan 30 15:09:00 cvs named: named startup succeeded
Jan 30 15:09:00 cvs named[25099]: loading configuration from '/etc/named.conf'
Jan 30 15:09:00 cvs named[25099]: listening on IPv4 interface eth0, 160.75.5.142#53
Jan 30 15:09:00 cvs named[25099]: running


Konfigürasyon bölümünde logların uzaktaki sunucuya gönderilmesi için yapılması gerekenler anlatılmıştı. Bu bölümde uzaktaki sunucu üzerinde diğer bilgisayarlardan gelen mesajları kabul etmesi için yapılması gereken ayarlar ele alınacaktır.

Uzaktaki bilgisayarlardan logları alabilmek için yerel sunucuda syslogd süreci “-r” parametresi ile çalıştırılmalıdır.

Bu değişikler süreci başlatan scriptin içinde yapılabilinmektedir, /etc/rc.d/init.d/syslog dosyası bir metin editörü ile açılıp
SYSLOGD_OPTIONS="-m 0"
değişkenine “-r” parametresi eklenmelidir:
            SYSLOGD_OPTIONS="-m 0 -r"
Veya /etc/sysconfig/syslog dosyası tanımlanmış ise bu dosyada aynı değişkenin üzerinde değişiklikler yapılabilir.

1.6      Açılış Logları

Linux sistemi açılış sırasında ekrana açılış notlarını göndermektedir. Bu loglar çekirdek log tamponuna yazılmaktadır. Çekirdek log tamponunu listelemek için
            dmesg
komutu kullanılır. Çok önemli olan bu logların kaybını önlemek için açılış scripti bu logları /var/log/dmesg dosyasına yazmaktadır.
Örnek bir dmesg dosyasının içeriği

  
Linux version 2.4.2-2 (root@porky.devel.redhat.com) (gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-79)) #1 Sun Apr 8 20:41:30 EDT 2001
BIOS-provided physical RAM map:
 BIOS-e820: 000000000009fc00 @ 0000000000000000 (usable)
 BIOS-e820: 0000000000000400 @ 000000000009fc00 (reserved)
 BIOS-e820: 0000000000020000 @ 00000000000e0000 (reserved)
 BIOS-e820: 000000000fee0000 @ 0000000000100000 (usable)
 BIOS-e820: 0000000000010000 @ 000000000ffe0000 (ACPI data)
 BIOS-e820: 0000000000010000 @ 000000000fff0000 (ACPI NVS)
 BIOS-e820: 0000000000080000 @ 00000000fff80000 (reserved)
On node 0 totalpages: 65504
zone(0): 4096 pages.
zone DMA has max 32 cached pages.
zone(1): 61408 pages.
zone Normal has max 479 cached pages.
zone(2): 0 pages.
zone HighMem has max 1 cached pages.
Kernel command line: auto BOOT_IMAGE=linux ro root=305 BOOT_FILE=/boot/vmlinuz-2.4.2-2
Initializing CPU#0
Detected 935.473 MHz processor.
Console: colour VGA+ 80x25
Calibrating delay loop... 1867.77 BogoMIPS
Memory: 255228k/262016k available (1365k kernel code, 6400k reserved, 92k data, 236k init, 0k highmem)
Dentry-cache hash table entries: 32768 (order: 6, 262144 bytes)
Buffer-cache hash table entries: 16384 (order: 4, 65536 bytes)
Page-cache hash table entries: 65536 (order: 7, 524288 bytes)
Inode-cache hash table entries: 16384 (order: 5, 131072 bytes)
VFS: Diskquotas version dquot_6.5.0 initialized
CPU: Before vendor init, caps: 0387f9ff 00000000 00000000, vendor = 0
CPU: L1 I cache: 16K, L1 D cache: 16K
CPU: L2 cache: 256K
Intel machine check architecture supported.
Intel machine check reporting enabled on CPU#0.
CPU: After vendor init, caps: 0387f9ff 00000000 00000000 00000000
CPU serial number disabled.
CPU: After generic, caps: 0383f9ff 00000000 00000000 00000000
CPU: Common caps: 0383f9ff 00000000 00000000 00000000
CPU: Intel Pentium III (Coppermine) stepping 06
Enabling fast FPU save and restore... done.
Enabling unmasked SIMD FPU exception support... done.
Checking 'hlt' instruction... OK.
POSIX conformance testing by UNIFIX
mtrr: v1.37 (20001109) Richard Gooch (rgooch@atnf.csiro.au)
mtrr: detected mtrr type: Intel
PCI: PCI BIOS revision 2.10 entry at 0xfdb21, last bus=2
PCI: Using configuration type 1
PCI: Probing PCI hardware
PCI: Using IRQ router default [8086/2410] at 00:1f.0
isapnp: Scanning for PnP cards...
isapnp: No Plug & Play device found
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Initializing RT netlink socket
apm: BIOS not found.
Starting kswapd v1.8
pty: 256 Unix98 ptys configured
block: queued sectors max/low 169421kB/56473kB, 512 slots per queue
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
Uniform Multi-Platform E-IDE driver Revision: 6.31
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
PIIX4: IDE controller on PCI bus 00 dev f9
PIIX4: chipset revision 2
PIIX4: not 100% native mode: will probe irqs later
    ide0: BM-DMA at 0xffa0-0xffa7, BIOS settings: hda:DMA, hdb:pio
    ide1: BM-DMA at 0xffa8-0xffaf, BIOS settings: hdc:DMA, hdd:pio
hda: ST320413A, ATA DISK drive
hdc: SS06 SAMSUNG DVD-ROM SD-612S, ATAPI CD/DVD-ROM drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
ide1 at 0x170-0x177,0x376 on irq 15
hda: 39102336 sectors (20020 MB) w/512KiB Cache, CHS=2434/255/63, UDMA(66)
Partition check:
 hda: hda1 hda2 < hda5 hda6 >
Floppy drive(s): fd0 is 1.44M
FDC 0 is a post-1991 82077
Serial driver version 5.02 (2000-08-09) with MANY_PORTS MULTIPORT SHARE_IRQ SERIAL_PCI ISAPNP enabled
ttyS00 at 0x03f8 (irq = 4) is a 16550A
ttyS01 at 0x02f8 (irq = 3) is a 16550A
Real Time Clock Driver v1.10d
md driver 0.90.0 MAX_MD_DEVS=256, MD_SB_DISKS=27
md.c: sizeof(mdp_super_t) = 4096
autodetecting RAID arrays
autorun ...
... autorun DONE.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP, IGMP
IP: routing cache hash table of 2048 buckets, 16Kbytes
TCP: Hash tables configured (established 16384 bind 16384)
Linux IP multicast router 0.06 plus PIM-SM
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 236k freed
Adding Swap: 530104k swap-space (priority -1)
usb.c: registered new driver usbdevfs
usb.c: registered new driver hub
usb-uhci.c: $Revision: 1.251 $ time 20:53:29 Apr  8 2001
usb-uhci.c: High bandwidth mode enabled
PCI: Setting latency timer of device 00:1f.2 to 64
usb-uhci.c: USB UHCI at I/O 0xd000, IRQ 10
usb-uhci.c: Detected 2 ports
usb.c: new USB bus registered, assigned bus number 1
hub.c: USB hub found
hub.c: 2 ports detected

1.7      Log Dönüşümü

Büyük sistemlerde log dosyaları çok hızlı büyümektedir, bu sebepten dolayı dosyalar kullanışsız hale geliyorlar. Bu dosyaların boyutlarını kontrol etmek cron servisi her gün log dosyaların dönüşümünü yapan /etc/cron.daiyi/logrotate scriptini çalıştırmaktadır. Red Hat linux dağıtımında mevcut olan logrotate scripti şu şekildedir:

#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf


Scriptte kullanılan logrotate komutu log dosyaları üzerinde bir kaç farklı işlem uygulayabilmektedir:
  • Dosyaların dönüşümü
  • Log dosyaların sıkıştırılması
  • Log dosyalarını özel kullanıcıları gönderilmesi

Dönüşüm bir dosyayı sıra içine sokmaktadır. Yani bir dosyayı belli bir zamanda silmek yerine ismini değiştirerek saklanmaktadır ve böylece mevcut log dosyası her zaman çalışılabilenecek boyuttadır. Log dönüşümün konfigürasyon scripti /etc/logrotate.conf’tur. Varsayılan özellikleri ile log dosyaların dönüşümü haftada bir kez yapılamktadır. Tipik bir /etc/logrotate.conf dosyasını içeriği:

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# send errors to root
errors root

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own lastlog or wtmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    rotate 1
}

# system-specific logs may be configured here


Bu dosyada görülen /etc/logrotate.d dizini özel log dosyaları için dönüşüm kurallarını içermektedir.

Hiç yorum yok:

Yorum Gönder