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
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
SELINUX=disabled
Sistemi yeniden başlatıyoruz.
sudo reboot now
Makina açıldığında
getenforce
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
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
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>
_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
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
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")
UDP Portu üzerinden dinleme yapılacaksa
module(load="imudp")
input(type="imudp" port="514")
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>
Örnek:
$AllowedSender TCP, 192.168.100.193
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ı>
Örnek:
$template deneme-remote-loglari,"/tmp/Gelen-loglar.log"
*.* ?deneme-remote-loglari
4-4) Servisi Yeniden Başlatma
systemctl restart rsyslog.service
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")
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.