Bagaimana cara mengkonfigurasi kebijakan penyimpanan log per-unit dengan journald?

14

Saya punya satu layanan khusus, yang log jarang, tetapi informasi penting. Saya telah mengaturnya beberapa bulan yang lalu, dan hari ini saya journalctl -n 50 --unit=my-servicehanya menjalankan untuk menemukan tidak ada entri.

Saya sangat senang dengan perilaku ini untuk sebagian besar unit - Saya juga perlu sesuatu yang terjadi segera (atau paling tidak beberapa hari yang lalu), dan saya tidak peduli dengan catatan lama.

Namun, adakah cara untuk memastikan journaldmemiliki kebijakan penyimpanan dan penyimpanan yang independen untuk catatan satu unit tertentu? Saya ingin tetap menggunakan log itu selama 5 tahun - berapa pun ukurannya. Log unit lain harus tidak terpengaruh oleh ini, dan mempertahankan perilaku mereka yang ada.

Saya agak kehilangan pemahaman journald.conf(5), dan tidak bisa mencari tahu kapan konfigurasi per-unit mungkin sama sekali. Jika ya - akan menghargai contoh konkret singkat - file mana yang harus saya edit / buat dan apa yang harus saya tulis. Atau, jika Anda tahu pasti itu tidak mungkin dilakukan - itu akan menjadi jawaban yang baik juga.

CATATAN: Kasus khusus saya melibatkan host Arch Linux, tapi saya kira ini tidak terlalu menjadi masalah.

drdaeman
sumber
Saya tidak dapat mengomentari jawaban di atas untuk menambahkan tautan ini ke masalah tentang menambahkan fitur ini ke journald, jadi ini dia sebagai jawaban lain: github.com/systemd/systemd/issues/4751
swoop81

Jawaban:

7

Sepertinya saya kemungkinan besar kurang beruntung dengan journald. Kecuali saya akan mencari cara untuk menelurkan jurnal "penyimpanan jangka panjang" independen (seperti saat ini ada jurnal per pengguna yang berbeda), tapi saya tidak yakin itu adalah pendekatan yang masuk akal dan waras. Saya kira, pengaturan syslogd (dan logrotate) akan lebih mudah.

Fitur ini tidak hadir pada akhir 2014 , seperti yang dikonfirmasi oleh Lennart sendiri.

Dan sepertinya belum ada di sini. Setidaknya, baris "journald: memungkinkan waktu retensi per-prioritas dan per-layanan saat memutar / menyedot debu" masih ada dalam file TODO (tautan ke revisi dari 2016-07-11).

drdaeman
sumber
3
Ini tampak seperti cacat desain yang sangat besar, hampir melumpuhkan. Terutama jika seseorang ingin mengurangi retensi atau setidaknya tingkat log unit yang sangat cerewet, yang menyumbat log.
orion
1
Bagi siapa pun yang tersandung pada pertanyaan ini, baris yang dirujuk dalam TODO masih ada pada komentar ini (26.03.18): github.com/systemd/systemd/blob/…
timss
1
Dalam upaya untuk mendapatkan daya tarik di atasnya saya mengangkatnya sebagai masalah dengan proyek - github.com/systemd/systemd/issues/9519 .
slm
1

Sangat sederhana untuk menghasilkan file log. Secara default, semua logging ke journald juga masuk ke syslog dan default ini harus ada. Rsyslog.conf mengontrol bagaimana entri yang diteruskan ke syslog ditangani. Selain itu SyslogFacilitydefaultnya daemonjadi entri log untuk layanan apa pun biasanya berakhir di daemon.logfile dalam /var/log.

Di file layanan Anda, tambahkan ke bagian [layanan]

SyslogFacility=local2

(jumlahnya bisa antara 0 & 7) https://www.freedesktop.org/software/systemd/man/systemd.exec.html

Ubah /etc/rsyslog.conf (temukan baris yang ada untuk dimodifikasi) sehingga local2 dicatat ke file tertentu (baris pertama) dan idealnya tidak masuk ke syslog dengan menambahkan local2.noneseperti yang ditunjukkan (ini sudah ada dalam jurnal).

local2.*                        /var/log/your-service-name.log
*.*;auth,authpriv.none,local2.none          -/var/log/syslog

[sunting] Anda juga harus mengubah tangkapan semua

*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none,local2.none      -/var/log/messages

Tentu saja retensi yang sebenarnya perlu dilakukan dengan logrotate.

HTH

Brian
sumber