Sistem Linux ile Syslog mesajları alma Arch Linux


25

Açıkça görmezden geldim gibi hissediyorum, ancak uzak bir sistemden ileti systemdalmak ve günlüğe kaydetmek için kullanan Arch Linux sunucumu nasıl alacağımı çözemiyorum syslog.

Bir Cisco 678 DSL modem ve bir DD-WRT WAP'ım var ve ikisi de syslog formatındaki mesajları başka bir makineye göndermek üzere yapılandırılabilir. Bu makinenin Arch Linux sunucum olmasını istiyorum.

Etrafta dolanıyorum ve tüm bulduğum "sistemd sistem günlüğünün yerine geçiyor" veya artık syslogbenim sorumla aynı derecede ilgisiz bir şey çalıştırmam gerekmediği .

GÜNCELLEŞTİRME

Arch forumlarında sordum ve konuyla ilgili hiçbir cevap alamadım. Sadece 514 numaralı UDP bağlantı noktasını dinlemek için sysloging kurdum. Syslog-ng-Cisco 678'den mesajlar yazdı ve bir DD-WRT WAP yazdım. Ne yazık ki, mesajlar sistem günlüğünde bitmiyor, bunun yerine düz dosyalarda. Yani, kesin bir çözüm yok, ancak geçici bir sorun. Düzgün dosyalarda değil, günlüğünde syslog iletilerinin olmasını tercih ederim.


systemd kendi günlüğünü kullanır . Ayrıca , Arch arşivlerinde mevcut olan bir metaloma da var - Ben şahsen üçünü de kullanıyorum: syslog, systemd'in günlüğü ve metalografi. Sistem günlüğünü kontrol etmeyi dene. Doğru hatırlıyorsam, syslog, sistemdeyiş anahtarından beri tüm mesajlarını ve sistem günlüğüne gönderilecek şekilde yapılandırılmıştır.
Alexej Magura

Yanıtlar:


11

Fakir bir adamın syslog sunucusunu socat ile kolayca yazabilirsiniz . Bunun gibi bir servis birimine ihtiyacınız var:

[Service]
Restart=on-success
ExecStart=/usr/bin/socat -u UDP-RECV:514 STDOUT

Sistem günlüğü servis günlüğünden alınan herhangi bir şeyi kör olarak sistem günlüğüne gönderir. Yukarıdakileri söyle, /etc/systemd/system/syslog.serviceardından kaydet

# systemctl daemon-reload
# systemctl start syslog

Daha sonra, dinleme sunucunuzdaki UDP bağlantı noktası 514'e mesaj göndermek için kaynağınıza ihtiyacınız var.

Alınan verileri gerçekte ayrıştırmak ve biçimlendirmek için bunu geliştirmek isteyebilirsiniz, ancak tüm yapmak istediğiniz şey, alınanın günlüğü ise gerekli değildir.

( SoCat Arch Linux içindedir Ekstra depo: pacman -S socat)


4
İyi cevap. import socket; sock = socket.socket(type=socket.SocketKind.SOCK_DGRAM); sock.bind(("0.0.0.0", 514)); while True: print(sock.recv(1024 * 1024))
Socat'ı kuramadığım

3

Yani burada biraz boşluk var.

Systemd, systemd-journal-gateway bileşeni aracılığıyla uzaktan mesajlaşmayı destekler. Bu mesajların syslog formatında olmadığı söyleniyor. Syslog (bir format olarak), RFC 5424'te belgelenen bir IETF onaylı sınıflandırmadır (önceki sürüm olan RFC 3164'ü kullanımdan kaldırmıştır).

Bu oyunu güzel bir şekilde bir araya getirmenin karmaşıklıklarının çoğu burada belgelenmiştir:

http://www.freedesktop.org/wiki/Software/systemd/syslog/

ve burada (man systemd-journald.service)

   systemd-journald is a system service that collects and stores logging data.
   It creates and maintains structured, indexed journals based on logging
   information that is received from the kernel, from user processes via the
   libc syslog(3) call, from STDOUT/STDERR of system services or via its native
   API. It will implicitly collect numerous meta data fields for each log
   messages in a secure and unfakeable way. See systemd.journal-fields(7) for
   more information about the collected meta data.

Özet olarak, mesajların sysloging'den STDOUT'a gönderildiğinden ve işlerin dergide bitmesi gerektiğinden emin olun.

Bunu biraz daha takip ederken bunu da buldum:

https://github.com/intgr/pg_journal/blob/master/doc/pg_journal.md

Birisinin kayıt için PostgreSQL'den systemd'ye bir bağ yazdığı. Bu konuda şu anda (bu dosyanın zamanından itibaren, 2013/06) çok satırlı mesajların sistemde desteklenmediğini belirtiyorlar, bu yüzden buna dikkat edin.


2

Kemer dağıtımını bilmiyorum. Fedora 20'ye (sistem dahil) sahip ve uzak syslog iletilerini kabul edecek şekilde yapılandırdım.

IMHO, bu işlevsellik sistemd ile ilgili değil Systemd-journald.service kendisini çekirdek / kullanıcı alanı programları ve syslog alt sistemi arasında araya sokuyor. Yalnızca bu kaynaklardan gelen yerel mesajları günlük veritabanında yakalar (bence) ve sonra onları sistem günlüğüne iletir. Örneğin "man systemd-journald.service" (en azından Fedora'da).

Benim durumumda bunu /etc/rsyslog.conf dosyasında isteğe bağlı bir "TCP syslog alıcı modülü" yapılandırarak etkinleştiriyorum.

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

Bir UDP modülü de mevcuttur.

Çıktıyı istenen dosyalara yönlendirmek için (r) syslog kuralları eklemek de gereklidir. Tüm dokümantasyon için bakınız: http://www.rsyslog.com/doc/

HTH.


2

Sistem günlüğü yükledim ve sistem günlüğü günlüğü iletilerini alabilirsiniz. Ama gerçekten istediğim şey syslog log mesajlarını almak ve daha sonra dergilerde adı geçen mesajı yazmaktı. Uzak syslog mesajları dergiye yazmak için sysloging yapılandırmak için bir yol bulamadım.

Bu yüzden bunu yapmak için bir yardımcı program yazdım.

https://github.com/advantageous/rsyslog-journald-repeater

./rsyslog-journald-repeater -h
Usage of ./rsyslog-journald-repeater:
-debug
    debug flag
-host string
    hostname to listen on (default "0.0.0.0")
-port int
    port to listen on (default 5514 on darwin, default 514 on Linux, Unix, etc.)

Test ve örnek sistem ve ünite dosyaları için dosyalar ve talimatlar oluşturun. Keyfini çıkarın!


0

Sistem Günlüğü ve Sistem Günlüğü

Gönderen syslog-ng

system()Sistem günlüğü 3.6.1 sürümünden başlayarak, systemd kullanan Linux sistemlerinde varsayılan kaynak standart system()kaynağı olarak journald kullanır .

Hem dergiyi hem de sistem günlüğü dosyalarını kullanmak istiyorsanız, aşağıdaki ayarların geçerli olduğundan emin olun. Systemd-journald için, /etc/systemd/journald.conf dosyasında, Storage = ya auto ya da unset ((varsayılan olarak auto'dur) ve ForwardToSyslog = no olarak ayarlanmış veya unset (varsayılan olarak hayır) olarak ayarlanmıştır. /Etc/syslog-ng/syslog-ng.conf için aşağıdaki kaynak stanza ihtiyacınız vardır:

 source src {
   system();
   internal();
 };

Diğer yandan, journald günlükleri, ancak yalnızca en syslog-ng metin günlükleri, set korumak için değil dilek, varsa Storage=volatileve ForwardToSyslog=yesiçinde /etc/systemd/journald.conf. Bu dergiyi ram içinde saklayacaktır. Sistem günlüğü 3.6.3'ten itibaren, sistem günlüğü system()kaynak olarak dergiyi kullanıyor, böylece Storage = none olarak ayarladıysanız, sistem günlüğü tüm mesajları bırakacak ve sistem günlüğünü iletmeyecektir .

Değişiklikten sonra systemd-journald.serviceve syslog-ng.servicehemsonları yeniden başlatın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.