28 Şubat 2016

Linux ve Apache Syslog Konfigürasyonu

Syslog çoğu linux dağıtımında kurulu gelen genel amaçlı bir loglama uygulamasıdır. Bütün programlar loglanmış bilgilerini syslog'a gönderir, syslog konfigurasyon dosyasına başvurarak bulduğu eşleşmelere göre yapılması beklenen eylemi gerçekleştirir (gerekli yerlere yazmak veya göndermek). Rsyslog için ana konfigurasyon dosyası '/etc/rsyslog.conf' dur. Bu dosya içerisinde global directives,modules ve rules bölümleri vardır. Rules ismi verilen kurallar filter ve action bölümlerinden oluşur. Filter kısmı belli bir syslog mesaj kümesini seçmek için, action kısmı ise o mesaj kümesi için yapılacak eylemi belirlemek için kullanılır. Bu dosya içerisinde bir rule tanımlamak için; filter ve action aralarında boşluk olacak şekilde bir satırda yazılmalıdır.

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.