Saya merasa seperti saya telah mengabaikan yang sudah jelas, tetapi saya tidak tahu bagaimana cara mendapatkan server Arch Linux saya, yang menggunakan systemd
, untuk menerima dan mencatat syslog
pesan dari sistem jarak jauh.
Saya memiliki modem Cisco 678 DSL dan WAP DD-WRT, dan keduanya dapat dikonfigurasi untuk mengirim pesan format syslog ke mesin lain. Saya ingin mesin itu menjadi server Arch Linux saya.
Saya sudah googled, dan yang saya temukan adalah "systemd menggantikan syslog", atau bahwa saya tidak perlu lagi menjalankan syslog
atau sesuatu yang sama tidak relevan dengan pertanyaan saya.
MEMPERBARUI
Saya telah bertanya di forum Arch dan tidak mendapat jawaban yang relevan. Saya telah menginstal syslog-ng hanya untuk mendengarkan pada port UDP 514. syslog-ng menulis pesan dari Cisco 678 saya, dan WAP DD-WRT yang saya punya. Sayangnya, pesan tidak berakhir di jurnal systemd, melainkan dalam file datar. Jadi, tidak ada solusi yang tepat, tetapi sesuatu yang bisa diatasi. Saya lebih suka memiliki pesan syslog di jurnal, bukan di file datar.
sumber
Jawaban:
Anda dapat menulis server syslog orang miskin dengan cukup mudah dengan socat . Anda hanya perlu unit layanan seperti ini:
Itu akan secara membabi buta mengirim apa pun yang diterima pada port layanan syslog ke jurnal systemd. Simpan di atas sebagai, katakan,
/etc/systemd/system/syslog.service
laluAnda kemudian hanya perlu sumber Anda untuk mengirim pesan ke port UDP 514 di server mendengarkan Anda.
Anda mungkin ingin meningkatkan ini untuk benar-benar mem-parsing data yang diterima dan memformatnya tetapi tidak perlu jika semua yang ingin Anda lakukan adalah jurnal apa yang diterima.
( Socat dalam Arch Linux ekstra repositori:
pacman -S socat
)sumber
import socket; sock = socket.socket(type=socket.SocketKind.SOCK_DGRAM); sock.bind(("0.0.0.0", 514)); while True: print(sock.recv(1024 * 1024))
Jadi ada sedikit celah di sini.
Systemd mendukung pesan jarak jauh melalui komponen systemd-journal-gateway. Dikatakan bahwa pesan-pesan ini tidak dalam format syslog. Syslog (sebagai format) adalah spefikasi ratifikasi IETF yang didokumentasikan dalam RFC 5424 (yang tidak lagi digunakan dalam versi sebelumnya, RFC 3164).
Lebih banyak seluk-beluk membuat permainan ini bersama-sama didokumentasikan di sini:
http://www.freedesktop.org/wiki/Software/systemd/syslog/
dan di sini (man systemd-journald.service)
Singkatnya, pastikan bahwa pesan dikirim dari syslog-ng ke STDOUT dan semuanya akan berakhir di jurnal.
Dalam menindaklanjuti ini sedikit lebih saya menemukan ini juga:
https://github.com/intgr/pg_journal/blob/master/doc/pg_journal.md
Di mana seseorang menulis pengikatan dari PostgreSQL ke systemd untuk login. Dalam hal ini mereka mengutip bahwa saat ini (pada saat file itu, 2013/06) pesan multi-line tidak didukung di systemd, jadi hati-hati untuk itu juga.
sumber
Saya tidak tahu distribusi Arch. Saya punya Fedora 20 (termasuk systemd) dan telah mengkonfigurasinya untuk menerima pesan syslog jarak jauh.
IMHO, fungsi ini tidak terkait dengan systemd. Systemd-journald.service menempatkan dirinya di antara program-program kernel / userspace dan subsistem syslog. Ia menangkap (saya pikir) hanya pesan lokal dari sumber-sumber ini ke dalam basis data jurnal dan kemudian meneruskannya ke syslog. Lihat misalnya "man systemd-journald.service" (setidaknya di Fedora).
Dalam kasus saya saya mengaktifkan ini dengan mengkonfigurasi opsional "modul penerima TCP syslog" di /etc/rsyslog.conf yaitu
Modul UDP juga tersedia.
Anda juga perlu menambahkan (r) aturan syslog untuk mengarahkan output ke file yang diinginkan. Untuk dokumentasi lengkap, lihat: http://www.rsyslog.com/doc/
HTH.
sumber
Saya menginstal syslog-ng dan dapat menerima pesan log syslog. Tapi ingin saya benar-benar ingin menerima pesan log syslog dan kemudian menulis pesan mengatakan ke journald. Saya tidak dapat menemukan cara untuk mengkonfigurasi syslog-ng untuk menulis pesan syslog jarak jauh ke journald.
Jadi saya menulis sebuah utilitas untuk melakukan ini.
https://github.com/untungage/rsyslog-journald-repeater
Membangun file dan instruksi untuk pengujian dan sampel file systemd unit disertakan dengan proyek. Nikmati!
sumber
syslog-ng dan jurnal systemd
Dari syslog-ng
Dimulai dengan syslog-ng versi 3.6.1
system()
sumber default pada sistem Linux menggunakan systemd menggunakan journald sebagaisystem()
sumber standarnya .Sebaliknya, jika Anda ingin tidak menyimpan log jurnal, tetapi hanya log teks syslog-ng, atur
Storage=volatile
danForwardToSyslog=yes
masuk/etc/systemd/journald.conf
. Ini akan menyimpan journald dalam ram. Pada syslog-ng 3.6.3, syslog-ng menggunakan journald sebagaisystem()
sumbernya, jadi jika Anda mengatur Storage = none, jurnal systemd akan menghapus semua pesan dan tidak meneruskannya ke syslog-ng.Setelah perubahan restart
systemd-journald.service
dansyslog-ng.service
daemon.sumber