Bagaimana cara mengkonfigurasi rsyslog untuk mengirim log dari program tertentu ke server syslog jarak jauh?

17

Saya memiliki program yang menampilkan ke syslog dengan tag / nama program yang diberikan. Saya ingin dapat menyaring lalu lintas syslog dari program itu dan mengirimkannya ke server syslog jarak jauh, meninggalkan semua lalu lintas syslog lainnya lokal.

Saya dapat mengirim semua lalu lintas ke server jarak jauh dengan

*.* @remote_server

Bagaimana cara saya memfilternya?

Simmo
sumber

Jawaban:

37

File konfigurasi Rsyslog terletak di: /etc/rsyslog.d/*.conf

Rsyslog membaca file conf secara berurutan, jadi penting bahwa Anda menamai file config Anda sehingga konfigurasi spesifik dimuat sebelum hal lain terjadi. Jadi, beri nama file Anda mulai dengan memimpin nol, yaitu 00-my-file.conf. Lebih baik membuat file baru sehingga pembaruan dan sebagainya tidak menimpa konfigurasi lokal Anda.

Contoh:

if $programname == 'programname' and $msg contains 'a text string' and $syslogseverity <= '6' then /var/log/custom/bind.log

Atau jika Anda hanya ingin membuang entri tertentu:

if $programname == 'programname' then ~

Dalam kasus Anda: (UDP)

if $programname == 'programname' then @remote.syslog.server
& ~

Atau (TCP)

if $programname == 'programname' then @@remote.syslog.server
& ~

The & ~sarana untuk menghentikan proses pencocokan (baris sebelumnya hanya!) Entri lanjut.

Beberapa info yang lebih umum:

Selain itu, selalu pastikan filter berada di baris yang sama:

# Example: Log mail server control messages to mail-queue.log
if $hostname == 'titus'\
and $programname == 'smtp.queue.'\
and $syslogseverity <= '6' then /var/log/titus/mail-queue.log
& ~

Filter yang berguna:

$hostname
$programname
$msg
$syslogseverity

Operator:

== (equals)
contains
and
or

Info lebih lanjut: http://wiki.rsyslog.com/index.php/Configuration_Samples

oblivian
sumber
1
dapatkah kami memperbaiki tautan yang rusak?
Mark Walsh
1

Kami juga dapat mencoba ini. Ini bekerja dengan baik untuk saya.

$template Incoming-logs,"/var/log/testing_docker/%PROGRAMNAME%.log"
if $programname startswith 'docker' then -?Incoming-logs

CATATAN: di sini testing_dockerkepemilikan folder harus diberikan kepada pengguna syslog. Ikuti perintah di bawah ini untuk mengatur izin.

chown syslog:syslog testing_docker
Nagaraj
sumber