cara memfilter pesan rsyslog dengan tag

12

Saya memiliki beberapa aplikasi dan skrip yang ingin saya redirect output ke file kustom.

Saya meluncurkan aplikasi tersebut menggunakan

command | logger -t TAG

Saya ingin memfilter pesan-pesan ini berdasarkan tag mereka dan mengarahkan mereka ke file yang berbeda. Saya tidak ingin menggunakan pengalihan bash karena aplikasi tersebut terutama proses yang berjalan lama dan perlu rotasi log yang tepat.

Saya telah mencoba menambahkan filter khusus di /etc/rsyslog.d/60-myfilter.conf;

if $syslogtag == 'giomanager' then /var/log/giomanager.log

Apa yang saya lakukan salah? Apa cara yang tepat untuk memfilter berdasarkan tag atau apakah ada opsi yang lebih baik untuk mendapatkan hasil yang serupa?

mistyrouge
sumber

Jawaban:

21

Saya tidak pernah menggunakan jika seperti itu (atau syslogtag) tetapi saya telah menggunakan :<blah>,<condition> ...(khususnya: msg, berisi, ...) tetapi cobalah

:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop

The & stop(Atau, & ~dalam v6 rsyslog dan lebih tua (Seperti di RHEL6)) menyebabkan pesan cocok untuk dibuang setelah penebangan jika tidak maka akan lebih diurai oleh aturan lain.


Perbarui: diuji dan

Syslogtag berisi a :dan harus dilampirkan ""daripada''

Iain
sumber
Terimakasih atas tanggapan Anda. Saya baru saja mencoba apa yang Anda usulkan, memang pesan itu dibuang tetapi tidak pernah dituliskan kepada/var/log/giomanager.log
mistyrouge
@mistyrouge: lihat pembaruan saya
user9517
2
Terima kasih banyak, sekarang log saya diarahkan ulang /var/log/giomanager.log tetapi masih ditulis ke / var / log / syslog. Apakah Anda punya ide mengapa ini terjadi dan bagaimana cara mencegahnya?
mistyrouge
1
tindakan buang (~ indikator) sudah usang: telah diganti dengan pernyataan "berhenti" alternatif (lebih baik): kb.monitorware.com/kbeventdb-detail-id-7171.html
Ivan Rave
7

Jadi saya akhirnya menemukan solusi untuk masalah saya.

Terima kasih banyak kepada @lain karena telah memimpin jalan saya.

Solusi seperti yang dinyatakan sebelumnya adalah dengan memasukkan ':' dalam nama tag. Juga, dan ini sangat penting, nama file harus sebelum 50-default.confdalam urutan abjad.

Untuk melanjutkan, masukkan yang berikut ini 30-giomanager.conf:

:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop

Perhatikan bahwa file tersebut /var/log/giomanager.logharus dapat ditulis oleh pengguna 'syslog'.

mistyrouge
sumber
Terima kasih @mistyrouge. Saya memiliki masalah yang sama dengan yang Anda miliki. Setelah masuk ke file yang benar log saya sedang diarahkan ke / var / log / syslog. Apakah Anda punya ide mengapa ini terjadi dan bagaimana cara mencegahnya?
Mayank Patel
Saya tidak bisa menjalankan ini untuk memfilter log bind9. Sebaliknya, ': nama program, sama, "bernama" /var/log/named/named.log' bekerja. Mungkin karena tag itu seperti "bernama [32193]".
Rennex
Anda dapat menggunakan startswithalih-alih isequaljika, misalnya, tag berisi PID. Atau regexuntuk pertandingan kompleks.
Tim Sylvester