Cara Mengatur Server Logging Pusat dengan Rsyslog di Linux


Log adalah komponen penting dari perangkat lunak atau sistem operasi apa pun. Log biasanya mencatat tindakan pengguna, kejadian sistem, aktivitas jaringan, dan banyak lagi, bergantung pada tujuannya. Salah satu sistem logging yang paling banyak digunakan pada sistem Linux adalah rsyslog.

Rsyslog adalah sistem pemrosesan log yang kuat, aman, dan berkinerja tinggi yang menerima data dari berbagai jenis sumber (sistem/aplikasi) dan mengeluarkannya ke dalam berbagai format.

Ini telah berevolusi dari daemon syslog biasa menjadi sistem logging tingkat perusahaan yang berfitur lengkap. Ini dirancang dalam model klien/server, oleh karena itu dapat dikonfigurasi sebagai klien dan/atau sebagai server logging pusat untuk server lain, perangkat jaringan, dan aplikasi jarak jauh.

Lingkungan Pengujian

Untuk tujuan panduan ini, kami akan menggunakan host berikut:

  • Server: 192.168.241.140
  • Klien: 172.31.21.58

Cara Menginstal dan Mengonfigurasi Server Rsyslog

Sebagian besar distribusi Linux dilengkapi dengan paket rsyslog yang sudah diinstal sebelumnya. Jika belum diinstal, Anda dapat menginstalnya menggunakan alat manajer paket Linux seperti yang ditunjukkan.

sudo yum update && yum install rsyslog 	#CentOS 7
sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04

Setelah rsyslog terinstal, Anda perlu memulai layanan sekarang, mengaktifkannya untuk memulai otomatis saat boot dan memeriksa statusnya dengan perintah systemctl.

sudo systemctl start rsyslog
sudo systemctl enable rsyslog
sudo systemctl status rsyslog

File konfigurasi rsyslog utama terletak di /etc/rsyslog.conf, yang memuat modul, mendefinisikan arahan global, berisi aturan untuk memproses pesan log dan juga mencakup semua file konfigurasi di /etc /rsyslog.d/ untuk berbagai aplikasi/layanan.

sudo vim /etc/rsyslog.conf

Secara default, rsyslog menggunakan modul imjournal dan imusock untuk mengimpor pesan log terstruktur dari systemd journal dan untuk menerima syslog pesan dari aplikasi yang berjalan di sistem lokal masing-masing melalui soket Unix.

Untuk mengonfigurasi rsyslog sebagai server jaringan/pusat logging, Anda perlu menyetel protokol (UDP atau TCP atau keduanya) yang akan digunakan untuk penerimaan syslog jarak jauh serta port yang didengarkannya.

Jika Anda ingin menggunakan koneksi UDP, yang lebih cepat namun tidak dapat diandalkan, cari dan hapus komentar pada baris di bawah ini (ganti 514 dengan port yang Anda inginkan untuk mendengarkannya, ini seharusnya cocok dengan alamat port tempat klien mengirim pesan, kita akan melihat ini lebih lanjut saat mengkonfigurasi klien rsyslog).

$ModLoad imudp
$UDPServerRun 514

Untuk menggunakan koneksi TCP (yang lebih lambat namun lebih dapat diandalkan), cari dan hapus komentar pada baris di bawah.

$ModLoad imtcp
$InputTCPServerRun 514

Dalam hal ini, kami ingin menggunakan koneksi UDP dan TCP secara bersamaan.

Selanjutnya, Anda perlu menentukan aturan untuk memproses log jarak jauh dalam format berikut.

facility.severity_level	destination (where to store log)

Di mana :

  • fasilitas: adalah jenis proses/aplikasi yang menghasilkan pesan, termasuk auth, cron, daemon, kernel, local0..local7. Menggunakan * berarti semua fasilitas.
  • tingkat_keparahan: adalah jenis pesan log: emerg-0, alert-1, crit-2, err-3, warning-4, notice-5, info-6, debug-7. Penggunaan * berarti semua tingkat keparahan dan none berarti tidak ada tingkat keparahan.
  • tujuan: berupa file lokal atau server rsyslog jarak jauh (didefinisikan dalam bentuk IP:port).

Kami akan menggunakan aturan berikut untuk mengumpulkan log dari host jarak jauh, menggunakan template RemoteLogs. Perhatikan bahwa aturan ini harus didahulukan sebelum aturan apa pun untuk memproses pesan lokal, seperti yang ditunjukkan pada tangkapan layar.

$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs 
& ~

Melihat aturan di atas, aturan pertama adalah “$template RemoteLogs,”/var/log/%HOSTNAME%/%PROGRAMNAME%.log” ”.

Direktif $template memberitahu daemon rsyslog untuk mengumpulkan dan menulis semua pesan jarak jauh yang diterima ke log berbeda di bawah /var/log, berdasarkan nama host (nama mesin klien) dan fasilitas klien jarak jauh (program/aplikasi) yang menghasilkan pesan seperti yang ditentukan oleh pengaturan yang ada di RemoteLogs templat.

Baris kedua “*.* ?RemoteLogs ” berarti mencatat pesan dari semua fasilitas di semua tingkat keparahan menggunakan konfigurasi template RemoteLogs.

Baris terakhir “& ~ ” memerintahkan rsyslog untuk berhenti memproses pesan setelah ditulis ke file. Jika Anda tidak menyertakan “& ~”, pesan akan ditulis ke file lokal.

Masih banyak template lain yang dapat Anda gunakan, untuk informasi lebih lanjut, lihat halaman manual konfigurasi rsyslog (man rsyslog.conf) atau lihat dokumentasi online Rsyslog.

Itu saja dengan mengkonfigurasi server rsyslog. Simpan dan tutup file konfigurasi. Untuk menerapkan perubahan terkini, restart daemon rsyslog dengan perintah berikut.

sudo systemctl restart rsyslog

Sekarang verifikasi soket jaringan rsyslog. Gunakan perintah ss (atau netstat dengan flag yang sama) dan kirimkan hasilnya ke grep untuk memfilter koneksi rsyslogd.

sudo ss -tulnp | grep "rsyslog"

Berikutnya, di CentOS 7, jika Anda mengaktifkan SELinux, jalankan perintah berikut untuk mengizinkan lalu lintas rsyslog berdasarkan jenis soket jaringan.

sudo semanage -a -t syslogd_port_t -p udp 514
sudo semanage -a -t syslogd_port_t -p tcp 514 

Jika firewall sistem diaktifkan, Anda perlu membuka port 514 untuk mengizinkan koneksi UDP/TCP ke server rsyslog, dengan menjalankan.

------------- On CentOS ------------- 
sudo firewall-cmd --permanent --add-port=514/udp
sudo firewall-cmd --permanent --add-port=514/tcp
sudo firewall-cmd --reload

------------- On Ubuntu -------------
sudo ufw allow 514/udp
sudo ufw allow 514/tcp
sudo ufw reload 

Cara Mengonfigurasi Klien Rsyslog untuk Mengirim Log ke Server Rsyslog

Sekarang di sistem klien, periksa apakah layanan rsyslog berjalan atau tidak dengan perintah berikut.

sudo systemctl status rsyslog

Jika belum diinstal, instal dan mulai layanan seperti yang ditunjukkan sebelumnya.

sudo yum update && yum install rsyslog 	#CentOS 7
sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04
sudo systemctl start rsyslog
sudo systemctl enable rsyslog
sudo systemctl status rsyslog

Setelah layanan rsyslog aktif dan berjalan, buka file konfigurasi utama tempat Anda akan melakukan perubahan pada konfigurasi default.

sudo vim /etc/rsyslog.conf

Untuk memaksa daemon rsyslog bertindak sebagai klien log dan meneruskan semua pesan log yang dibuat secara lokal ke server rsyslog jarak jauh, tambahkan aturan penerusan ini, di akhir file seperti yang ditunjukkan pada tangkapan layar berikut.

*. *  @@192.168.100.10:514

Aturan di atas akan mengirimkan pesan dari semua fasilitas dan di semua tingkat keparahan. Untuk mengirim pesan dari fasilitas tertentu misalnya auth, gunakan aturan berikut.

auth. *  @@192.168.100.10:514

Simpan perubahan dan tutup file konfigurasi. Untuk menerapkan pengaturan di atas, restart daemon rsyslog.

sudo systemctl restart rsyslog

Cara Memantau Logging Jarak Jauh di Server Rsyslog

Langkah terakhir adalah memverifikasi apakah rsyslog benar-benar menerima dan mencatat pesan dari klien, pada /var/log, dalam bentuk hostname/programname.log.

Jalankan perintah ls ke daftar panjang direktori log induk dan periksa apakah ada direktori bernama ip-172.31.21.58 (atau apa pun nama host mesin klien Anda).

 
ls -l /var/log/

Jika direktori tersebut ada, periksa file log di dalamnya, dengan menjalankan.

sudo ls -l /var/log/ip-172-31-21-58/

Ringkasan

Rsyslog adalah sistem pemrosesan log berkinerja tinggi, yang dirancang dalam arsitektur klien/server. Kami harap Anda dapat menginstal dan mengonfigurasi Rsyslog sebagai server logging pusat/jaringan dan sebagai klien seperti yang ditunjukkan dalam panduan ini.

Anda mungkin juga ingin merujuk ke halaman manual rsyslog yang relevan untuk bantuan lebih lanjut. Jangan ragu untuk memberi kami umpan balik atau mengajukan pertanyaan.