Hubungan rsyslog dan journald di Ubuntu 16.04

18

Saya menjalankan apa yang dimaksud dengan server vanilla Ubuntu 16.04, dan saya mencoba membungkus kepala saya bagaimana logging diatur secara default. Saya dapat melihat keduanya journalddan rsyslogsudah diinstal dan dijalankan, tetapi sama sekali tidak jelas bagi saya bagaimana pesan log sedang diproses.

Sebagian besar pesan tampaknya muncul baik di dalam /var/log/syslogmaupun melalui journalctl, tetapi saya tidak dapat melihat konfigurasi eksplisit untuk meneruskan antara keduanya di /etc/systemd/journald.conf(yang pada dasarnya semua dikomentari secara default), /etc/rsyslog.confatau /etc/rsyslog.d/50-default.conf. Saya mencoba mencari dokumentasi resmi, atau bahkan sebuah posting blog yang menjelaskan bagaimana keduanya diatur di Ubuntu, tetapi belum berhasil menemukan apa pun.

Untuk menambah kebingungan saya, saya telah mengeksekusi logger -p local1.info Testdi host, dan menemukan bahwa tidak ada yang ditulis /var/log/syslog, sementara pesan itu muncul di bawah journalctl.

Pertanyaan saya adalah:

  1. Bagaimana tepatnya cara kerja journal dan rsyslog di Ubuntu 16.04 (secara default)?
  2. Kenapa pesan yang dikirim dari loggertampaknya berakhir di jurnal, tetapi tidak di syslog?

Pembaruan: Ternyata loggertidak berfungsi seperti yang diharapkan adalah kesalahan pada saya, jadi tidak relevan dengan pertanyaan utama.

motns
sumber

Jawaban:

12

Secara default rsyslogmenggunakan modul "imuxsock", modul ini menyediakan:

kemampuan untuk menerima pesan syslog melalui soket Unix lokal. Yang paling penting, ini adalah mekanisme dimana panggilan syslog (3) mengirimkan pesan syslog ke rsyslogd [1] .

Dimungkinkan untuk rsyslogmengimpor pesan log terstruktur dari systemd-journal menggunakan modul bernama "imjournal" [2] .

Itu bisa memuat seperti:

module(load="imjournal") 

di:

/etc/rsyslog.conf

Di sisi lain "systemd-journald" menangkap semua data itu sendiri:

man systemd-journald

systemd-journald adalah layanan sistem yang mengumpulkan dan menyimpan data logging. Itu membuat dan memelihara jurnal terstruktur, diindeks berdasarkan informasi logging yang diterima dari berbagai sumber:

   ·   Kernel log messages, via kmsg
   ·   Simple system log messages, via the libc syslog(3) call
   ·   Structured system log messages via the native Journal API, 
       see sd_journal_print(4)
   ·   Standard output and standard error of system services
   ·   Audit records, via the audit subsystem

Anda dapat menonaktifkan rsyslogdsementara Anda masih memiliki akses ke log sistem menggunakan journalctl.

$ sudo systemctl mask rsyslogd
$ sudo systemctl stop syslog.socket
$ sudo systemctl stop rsyslog.service
$ systemctl is-active rsyslog.service 
inactive
$ logger -p mail.info Helllooo
$ journalctl

Sebagai contoh, centos menggunakan modul "imuxsock" untuk mengambil semua data "systemd-journald" via rsyslogopensuseuse tidak memiliki "syslog" sama sekali.


Untuk mengetahui mengapa pesan Anda tidak berakhir /var/log/syslog, Anda harus memeriksa file ini:

less /etc/rsyslog.d/50-default.conf

cari *.info, lihat di mana mereka akan disimpan, mungkin itu file lain seperti messages.

Bagi saya itu muncul di keduanya journalctldan syslog.

Ravexina
sumber
logger -p .info hellotidak valid. Anda belum memberikan nama fasilitas apa pun.
luv.preet
Diperbarui jawabannya ....
Ravexina
Seperti yang saya catat di edit saya, loggertidak berfungsi adalah kesalahan saya, jadi itu sudah diperbaiki sekarang (terima kasih untuk tipsnya). Adapun log muncul di dua tempat, catatan Anda pada imuxsocktampaknya menjadi kuncinya: tampaknya baik rsyslog dan journald mendengarkan pesan syslog lokal, karenanya mengapa entri tersebut masuk ke dua log terpisah.
motns
Saya mengikuti hal di atas di ubuntu dan sekarang saya tidak mendapatkan log dari logger, hmm: root @ T: ~ # logger -p mail.info Helllooo root @ T: ~ # journalctl Tidak ditemukan file jurnal. - Tidak ada entri - ada ide?
Hackeron
Jawaban yang bagus Namun, yang saya lewatkan adalah catatan tentang bagaimana journald tahu untuk membuka soket syslog (atau jika tidak, bagaimana hal itu didapat pada pesan syslog sebaliknya) ketika rsyslog dinonaktifkan? Atau diperlukan konfigurasi manual journald?
Matthijs Kooijman
4

Systemd adalah sistem init yang digunakan untuk memulai layanan ketika sistem dinyalakan. Journald bertanggung jawab untuk membuat log untuk layanan yang dimulai oleh systemd. Dengan mengintegrasikan journald dengan systemd, bahkan pesan proses booting paling awal tersedia untuk journald.

Rsyslog adalah daemon yang dibuat khusus untuk pemrosesan log, tidak ada hubungannya dengan journald. Ia dapat mengambil log dengan banyak cara dan menampilkannya dengan banyak cara. Ini tidak diaktifkan secara default yang juga mengambil pesan log dari journald. Untuk itu, Anda harus menulis di file /etc/rsyslog.conf,

$ModLoad imjournal # im -> input module
OR
load(type="imjournal")

Sekarang, ia akan menerima log dari m journald juga. Tapi saya sarankan Anda tidak mengubah file /etc/rsyslog.conf Anda.

Di akhir file /etc/rsyslog.conf, ada baris yang ditulis,

$IncludeConfig /etc/rsyslog.d/*.conf

Ini berarti bahwa semua file yang memiliki .conf di sana berakhir di folder /etc/rsyslog.d/ harus dimasukkan selama pemuatan rsyslog. Jadi, semua konfigurasi khusus Anda harus ada dalam file-file ini

Saya menyarankan Anda untuk membuat file /etc/rsyslog.d/journald.conf dan tempelkan cuplikan di bawah ini.

Di bawah ini adalah cuplikan dari halaman resmi rsyslog imjournal

module(load="imjournal" PersistStateInterval="100"
   StateFile="/path/to/file") #load imjournal module
module(load="mmjsonparse") #load mmjsonparse module for structured logs

template(name="CEETemplate" type="string" string="%TIMESTAMP% %HOSTNAME% %syslogtag% @cee: %$!all-json%\n" ) #template for messages

action(type="mmjsonparse")
action(type="omfile" file="/var/log/ceelog" template="CEETemplate")

Baris 1 - memuat modul imjournal untuk menerima log dari journald

2 - Modul mmjsonparse dimuat digunakan dalam penguraian log

3 - Mereka terstruktur ke dalam format yang dijelaskan dalam template

4 - Ini mem-parsing log tersebut menggunakan modul mmjsonparse.

5 - Ia mengirimkan log-log tersebut ke file yaitu / var / log / ceelog sesuai dengan struktur yang disediakan dalam template yang diberikan, menggunakan modul omfile (file output modul - output ke file).

Buat perubahan pada konfigurasi sesuai dengan kebutuhan Anda.

luv.preet
sumber
Terima kasih atas penjelasannya, tetapi saya pikir jawabannya oleh @Ravexina lebih dekat untuk membantu saya memahami apa yang terjadi dengan rsyslog dan journald, secara default (tanpa konfigurasi tambahan).
Bergerak