Rsyslog Servisi ile Uzak Sunucuya log Yazdırma
Tags: rsyslog, beginners, linux, tutorial
Published: 2022-12-09 04:40:12

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

``` bash
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.

``` bash
nano /etc/selinux/config
```

```
SELINUX=disabled
```
Sistemi yeniden başlatıyoruz.

``` bash
sudo reboot now
```

Makina açıldığında

``` bash
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.

``` bash

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.

``` bash
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

``` bash
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.

``` bash
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.

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

```
Örnek:

``` bash
$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.

``` bash

$template <istediğiniz-template-adı>,"/<path>/<istediğiniz-template-adı>.log"
*.* ?<istediğiniz-template-adı>
```

Örnek:

``` bash
$template deneme-remote-loglari,"/tmp/Gelen-loglar.log"
*.* ?deneme-remote-loglari
```
## 4-4) Servisi Yeniden Başlatma

``` bash
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.

``` bash
$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._