Formatı aşağıdaki gibidir (Bir selector ve bir action) :
lpr.info /var/log/lpr.log
mail.* /var/log/mail.log
ftp.* /var/log/ftp.log
auth.* @prep.ai.mit.edu
auth.* root,amrood
'*' işareti 'all' manasında kullanılır.
Filtreleme işlemi için 3 yöntem vardır :Facility/Priority-based, Property-based, ve Expression-based.
Facility/Priority tabanlı filtreleme en yaygın kullanılanıdır. Filtrelemeyi iki parametre ile yapar ve aralarına nokta konularak yazılır: facility.priority
Facility logu üreten uygulamayı belirlerken, severity mesaj içeriğinin türünü belirlemede kullanılır.
Facility-levels :
auth:messages related to authentication (login)
cron: messages related to scheduled processes or applications
daemon:messages related to daemons (internal servers)
kernel:messages related to the kernel
mail:messages related to internal mail servers
syslog:messages related to the syslog daemon itself
lpr:messages related to print servers
ftp:messages relating to the ftp daemon
local0 - local7: messages defined by user (local7 is usually used by Cisco and Windows servers)
Severity(Priority) levels :
emerg:Emergency - 0
alert:Alerts - 1
crit: Critical - 2
err:Errors - 3
warn:Warnings - 4
notice:Notification - 5
info:Information - 6
debug:Debugging - 7
None
Propery-based filtreleme kullanılabilecek bir diğer yoldur ve ':' işareti ile başlar.Syslog mesajlarını seçilen property'e göre filtreler.Propert olarak;msg,hostname, programname, syslogfacility, syslogseverity, timereported gibi seçenekler kullanılır. Formatı
:PROPERTY, [!]COMPARE_OPERATION, "STRING" şeklindedir.
Compare-operations: contains (stringi içeriyor mu), isequal(string ile eşit mi), startswith(string ile başlayan bir metin mi), regex (basic regex kullanmak için), isempty (boş mu) gibi parametreler alır.
Property-based filtreleme örnekleri
:msg, contains, "error" :Mesaj kısmında 'error' stringini içeren syslog mesajları
:hostname, isequal, "host1" :İsmi host1 olan hosttan gelen mesajlar
:msg, !regex, "fatal .* error" :Fatal ve error kelimelerini içeren (aralarında başka text veya boşluk olabilir) mesajlar
Expression-based filter ile daha kompleks filtrelemeler yapılabilir.Formatı if EXPRESSION then ACTION else ACTION şeklindedir. Örnek filtreleme ve action:
if EXPRESSION then ACTION else ACTION şeklindedir. Örnek filtreleme ve action:
if $programname == 'prog1' then {
action(type="omfile" file="/var/log/prog1.log")
if $msg contains 'test' then
action(type="omfile" file="/var/log/prog1test.log")
else
action(type="omfile" file="/var/log/prog1notest.log")
}
Action'lar ile filtre tarafından yakalanan mesajlar için yapılacak eylemlerin belirtildiğinden bahsedilmişti.[filter] [action] formatında yazılmış bir rule için action ilgili logun yazılacağı veya gönderileceği destination belirtir.Destination, lokalde bir dizin olabileceği gibi remote host IP adreside verilebilir.Yada geçerli bir DNS sunucusu varsa domain ismi yazılabilir. '@' işareti UDP , '@@' işareti TCP bağlantısı kullanmak için yazılır. Örnek filtre ve actionlar:
Kern.* @192.168.1.25:514 ## bütün kernel mesajlarını UDP ile remote server'a gönder
ftp.* @@191.168.56.101:514 ## bütün ftp mesajlarını TCP ile remote server'a gönder
Rsyslog Daemon'ın istemci olarak ayarlanması
Syslog kurulu olan bir linux cihaz'ı syslog client haline getirebilmek için /etc/rsyslog.conf konfigurasyon dosyası açılarak en sonuna aşağıdaki şekilde bir satır eklenmelidir:
[facility-level].[severity-level] [destination]
Destination, lokalde bir dizin olabileceği gibi remote host IP adreside verilebilir.Yada geçerli bir DNS sunucusu varsa domain ismi yazılabilir. '@' işareti UDP , '@@' işareti TCP bağlantısı kullanmak için yazılır. Eğer tcp bağlantısı sağlanacaksa Server tarafınında gelen mesajları tcp ile alacak şekilde ayarlanmış olması gerekmektedir. Syslog default olarak UDP 514 portunu kullanır.
*.* @192.168.1.25:514
kern.* @192.168.1.25:514
ftp.* @@191.168.56.101:514 ## TCP
Sadece bir programın loglarını göndermek
Bu senaryoda ise Örneğin cihazımızda 'foobar' isimli bir program çalışıyor ve '/var/log/foobar.log' şeklinde log dosyası üretiyor olsun. Sadece bu log dosyalarını remote server'a aktarmak istiyorsak rsyslog içerisinde imfile modülü kullanılarak yapılabilir. Imfile modülünü yüklemek için : module(load="imfile" PollingInterval="5") satırı kullanılır. Daha sonra log dosyası için path belirtilmelidir:
input(type="imfile"
File="/var/log/foobar.log"
Tag="foobar"
Severity="error"
Facility="local7")
Son olarak local7 olarak oluşturulan Facility remote syslog servera yönledirilir:
local7.* @192.168.1.25:514
Windows Bilgisayarın Syslog istemcisi olarak ayarlanması
Datagram Syslog Agent (http://www.syslogserver.com/download.html) kullanılarak Windows bir makinenin Syslog server'a log göndermesi sağlanabilir. Program arayüzünde remote server adres ve portu yazılıp sırasıyla install ve start butonlarına tıklandığında çalışmaya başlar. Ayrıca konfigürasyon yapma ve sadece belirli programların logunu gönderme seçenekleride mevcuttur.
Rsyslog Daemon'ın sunucu olarak ayarlanması
Linux sistemlerde Rsyslog daemon default olarak kapalı gelmektedir. Rsyslogun external mesajları kabul etmesini akfit etmek için:
Adım-1) '/etc/rsyslog.conf' dosyasında aşağıdaki satırların başındaki yorumlar kaldırılmalıdır , böylece 514 UDP portundan mesaj kabul etmesi gerektiğini belirtmiş olduk:
$ModLoad imudp
$UDPServerRun 514
* Udp yerine Tcp bağlantısı kullanmak istiyorsak için gerekli komutlar :
$ModLoad imtcp
$InputTCPServerRun 514
Adım-2) Remote mesajlar için bir template oluşturulmalı ve rsyslog'a client cihazlardan gelen log dosyalarını nasıl kaydetmesi gerektiğini belirtmeliyiz. Konfigürasyon dosyasında GLOBAL DIRECTIVES bloğundan önce aşağıdaki satırlar eklenir:
$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *
*.* ?RemoteLogs
& ~
İlk satır RemoteLogs şeklinde oluşturuduğu yapı ile kayıt edileceği yeri belirliyor, İkinci satırda yine facility ve severity özellikleri istenilen şekilde ayarlanabilir.
Adım-3) # service rsyslog restart (rsyslog servisinin yeniden başlatıması)
Syslog server olarak çalışan cihaza düşen client logları:
Apache Loglarının Syslog Server'a Yönlendirilmesi
Lokal sistem üzerinde tutulan apache logları:
- Access Logs : /var/log/apache2/access.log
- Error Logs : /var/log/apache2/error.log
Bu dizinlerin rsyslog servisi tarafından gözlenmesi için konfigurasyon yapılması gereklidir. Syslog tarafından dizin belirterek belirli bir log dosyasını almak için 'imfile' modulü kullanılır.
- Konfigurasyon Dosyası: /etc/rsyslog.conf
Bu konfigurasyon dosyasının en altına aşağıdaki parametreler eklenmelidir:
$MODLOAD IMFILE
$INPUTFILEPOLLINTERVAL 10
$PRIVDROPTOGROUP ADM
$WORKDIRECTORY /VAR/SPOOL/RSYSLOG
# APACHE ACCESS FILE:
$INPUTFILENAME /VAR/LOG/APACHE2/ACCESS.LOG
$INPUTFILETAG APACHE-ACCESS:
$INPUTFILESTATEFILE STAT-APACHE-ACCESS
$INPUTFILESEVERITY INFO
$INPUTFILEFACILITY local5
$INPUTRUNFILEMONITOR
#APACHE ERROR FILE:
$INPUTFILENAME /VAR/LOG/APACHE2/ERROR.LOG
$INPUTFILETAG APACHE-ERROR:
$INPUTFILESTATEFILE STAT-APACHE-ERROR
$INPUTFILESEVERITY ERROR
$INPUTFILEFACILITY local5
$INPUTRUNFILEMONITOR
Daha sonra bir alt satırda logların yönlendirileceği Remote Server Adresi yazılır.
Boş olan facility'lerden birisi seçilebilir. Biz yukarıda local5 facility'sini seçmiştik.Yönlendirme işlemi için en sona aşağıdaki komut da eklenir.
local5.* @192.168.56.101:514
Apache'yi local5'e aldığımız ve onu yönlendirdiğimiz için sadece apache logları gider.Sistemdeki tüm logları göndermek için '*.*' yazılır.
Örneğin : *.* @192.168.56.101:514
Bu makale İstanbul Teknik Üniversitesi Bilgisayar Mühendisliği Bölümü öğrencisi stajyerimiz Cemal Türkoğlu tarafından geliştirilmiştir.