Rsyslog Servisi ile Uzak Sunucuya log Yazdırma

Doğukan Eren - Dec 9 '22 - - Dev Community

Bir makinada veya sunucuda oluşturduğumuz bir log dosyasının veya herhangi bir metin dosyasının içerisine bir input girişi olduğunda onun uzak bir sunucuda depolanmasına ihtiyacımız olabilir. Bu tarz durumlarda rsyslog servisi kullanarak bu ihtiyacımızı karşılayabiliriz.

Bu yazıda örnek olarak iki Oracle Linux 8 makina üzerinde örnek göstereceğim. Bir makinayı sunucu olarak, diğer makinayı da istemci olarak kullanacağım.

Not: Rsyslog servisinde bir makina hem sunucu hem istemci olabilir. Yaani bir makinaya log gönderirken, diğer makinadan aldığı logları kaydedebilir.

Makinalarımız birbirleri ile sorunsuz iletişim kurabilmeleri için, Güvenlik duvarlarından kullanacağımız porta izin vermemiz gerekiyor. Bunun için kolay bir örnek olsun diye Selinux ve Firewalld servisini kapatıyorum. Önemli bir cihaz üzerinde kurulum yapıyorsanız firewall üzerinden kullanacağınız porta izin verebilirsiniz.

1) Selinux Kapatma

getenforce
Enter fullscreen mode Exit fullscreen mode

bu komutu çalıştırıldığında

enforcing

sonucu alınıyorsa, Selinux açıktır. Nano, vi veya favori editörünüz ile Selinux config dosyasına girip Selinux'u kapatıyoruz.

nano /etc/selinux/config
Enter fullscreen mode Exit fullscreen mode
SELINUX=disabled
Enter fullscreen mode Exit fullscreen mode

Sistemi yeniden başlatıyoruz.

sudo reboot now
Enter fullscreen mode Exit fullscreen mode

Makina açıldığında

getenforce
Enter fullscreen mode Exit fullscreen mode

komutu çalıştırıldığında

disabled

sonucu alınıyorsa işlem başarılıdır.

2) Firewalld kapatma

Aşağıdaki komutu kullanarak firewall servisini kapatabilirsiniz.


systemctl stop firewalld && systemctl disable firewalld

Enter fullscreen mode Exit fullscreen mode

3) Log Üreten Makinanın ayarları

3-1) Servis Dosyasını Editörle Açmak

Rsyslog dosyanının konfigürasyonlarının bulunduğu dosyaya editör ile giriyoruz.

nano /etc/rsyslog.conf

Enter fullscreen mode Exit fullscreen mode

3-2) Dosyaya Ayarları Girmek

Dosyanın en altına aşağıdaki satırları ekliyoruz.

$ModLoad imfile
$InputFileName /<dosya-adı>/mylog.txt
$InputFileSeverity error
$InputFileFacility <facility adı>
$InputRunFileMonitor

<facility adı>.* @@<göndereceğiniz-ip:port>

Enter fullscreen mode Exit fullscreen mode

_Not: Yukarıda '@@' olan alanı eğer TCP portu üzerinden iletişim yapacaksak '@@', UDP portu üzerinden kuracaksak '@' olarak düznliyoruz.
_

3-3) Servisi Yeniden Başlatmak

systemctl restart rsyslog.service
Enter fullscreen mode Exit fullscreen mode

Bu komutla sistemi yeniden başlatıyoruz.

4) Log Dinleyen Makinanın Ayarları

4-1) Servis Dosyasını Editörle Açmak

Rsyslog dosyanının konfigürasyonlarının bulunduğu dosyaya editör ile giriyoruz.

nano /etc/rsyslog.conf

Enter fullscreen mode Exit fullscreen mode

4-2) Dosyada Port ayarlaması yapmak

Dosyaya isteğinize göre aşağıdaki satırlar eklenir.

1) TCP Portu üzernden dinleme yapılcakasa

module(load="imtcp")
input(type="imtcp" port="514")

Enter fullscreen mode Exit fullscreen mode

UDP Portu üzerinden dinleme yapılacaksa

module(load="imudp")
input(type="imudp" port="514")

Enter fullscreen mode Exit fullscreen mode

Yukarıda yapılan iki ayarda da 514 portu üzerinden iletişim kuruluyor. Bu portu değiştirmek isterseniz,

port=<istediğiniz-port>

olarak güncelleyebilirsiniz.

4-3) İzin verilen IP ekleme

Dosyanın içerisinde bilgileri istediğiniz gibi değiştirerek dosyaya ekleyiniz.

$AllowedSender <port-türü>, <ip-adresi veya bloğu>

Enter fullscreen mode Exit fullscreen mode

Örnek:

$AllowedSender TCP, 192.168.100.193
Enter fullscreen mode Exit fullscreen mode

4-4) Dinlenecek Dosya İçin Template Oluşturma

Aşağıdaki template satırını kendi istediğiniz gibi düzenleyiniz.


$template <istediğiniz-template-adı>,"/<path>/<istediğiniz-template-adı>.log"
*.* ?<istediğiniz-template-adı>
Enter fullscreen mode Exit fullscreen mode

Örnek:

$template deneme-remote-loglari,"/tmp/Gelen-loglar.log"
*.* ?deneme-remote-loglari
Enter fullscreen mode Exit fullscreen mode

4-4) Servisi Yeniden Başlatma

systemctl restart rsyslog.service

Enter fullscreen mode Exit fullscreen mode

Bu adımdan sona log üreten makinada belirttiğimiz dosyaya bir input girişi olursa Dinleyen sunucu üzerinde verdiğimiz path üzerinde oluşturduğumuz dosyaya da gelecektir.

Ekstra

Gelen logları filtreleme istiyorsak, Dinleyen makinada ayrı bir templaye daha oluşturabiliriz.

$template noTimestampFormat,"%msg%\n"
module(load="builtin:omfile" Template="noTimestampFormat")

Enter fullscreen mode Exit fullscreen mode

Bu satırları ekleyerek sadece mesajı alsın şeklinde bir filtreleme yapmış olduk. Standart halinde hostname adı, tarih, saat vb bilgiler de bulunmaktadır.

Not: Loglar içerisinde sadece istenilen logların gelmesi için rsyslog.conf dosyasında bulnan diğer satırların başına '#' işareti eklenerek kapatılabilir.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .