Odbieranie wiadomości Syslog przy pomocy systemowego Arch Linux


25

Mam wrażenie, że przeoczyłem oczywistość, ale nie mogę wymyślić, jak uzyskać mój serwer Arch Linux, który używa systemddo odbierania i rejestrowania syslogwiadomości ze zdalnego systemu.

Mam modem Cisco 678 DSL i WAP DD-WRT i oba można skonfigurować do wysyłania wiadomości w formacie syslog na inne urządzenie. Chciałbym, aby ta maszyna była moim serwerem Arch Linux.

Rozglądałem się wokół i wszystko, co znalazłem, to to, że „systemd zastępuje syslog” lub że nie muszę już biegać, syslogani czegoś równie nieistotnego dla mojego pytania.

AKTUALIZACJA

Pytałem na forach Arch i nie otrzymałem żadnych odpowiednich odpowiedzi. Zainstalowałem syslog-ng tylko do słuchania na porcie UDP 514. syslog-ng zapisuje wiadomości z mojego Cisco 678 i mam WAP DD-WRT. Niestety wiadomości nie kończą się w dzienniku systemd, ale raczej w plikach płaskich. Więc nie ma dokładnego rozwiązania, ale coś w rodzaju obejścia. Wolę mieć wiadomości syslog w dzienniku, a nie w plikach płaskich.


systemd używa własnego dziennika . Istnieje również metalog , który jest dostępny w podstawowych repozytoriach Arch - osobiście używam wszystkich trzech: syslog, dziennik systemd i metalog. Spróbuj sprawdzić dziennik systemowy. Jeśli dobrze pamiętam, syslog, od czasu przejścia na systemd, został skonfigurowany do wysyłania wszystkich swoich wiadomości i tak dalej do dziennika systemd.
Alexej Magura

Odpowiedzi:


11

Za pomocą socat możesz dość łatwo napisać serwer syslog biednego człowieka . Potrzebujesz tylko takiego serwisu:

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

Ślepo wyśle ​​wszystko otrzymane przez port usługi syslog do dziennika systemowego. Zapisz powyższe jako, powiedzmy, /etc/systemd/system/syslog.servicea potem

# systemctl daemon-reload
# systemctl start syslog

Następnie potrzebujesz źródła, aby wysyłać wiadomości do portu UDP 514 na serwerze nasłuchującym.

Możesz to poprawić, aby faktycznie przeanalizować otrzymane dane i sformatować je, ale nie jest to konieczne, jeśli wszystko, co chcesz zrobić, to zapisać otrzymane dane.

( socat znajduje się w repozytorium Arch Linux Extrapacman -S socat ) :


4
Dobra odpowiedź. Poszedłem z szybkim skryptem python, ponieważ nie mogłem zainstalować socat:import socket; sock = socket.socket(type=socket.SocketKind.SOCK_DGRAM); sock.bind(("0.0.0.0", 514)); while True: print(sock.recv(1024 * 1024))
awelkie

3

Jest więc trochę luki.

Systemd obsługuje zdalne przesyłanie komunikatów za pośrednictwem komponentu systemd-journal-gateway. Biorąc to pod uwagę, te wiadomości nie są w formacie syslog. Syslog (jako format) jest dokumentacją ratyfikowaną przez IETF udokumentowaną w RFC 5424 (która zastąpiła poprzednią wersję, RFC 3164).

Więcej zawiłości sprawiających, że gra się ładnie razem, udokumentowano tutaj:

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

i tutaj (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.

Podsumowując, upewnij się, że wiadomości są wysyłane z syslog-ng do STDOUT, a rzeczy powinny znaleźć się w dzienniku.

Kontynuując to trochę więcej, znalazłem to również:

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

Gdzie ktoś pisze powiązanie z PostgreSQL do systemd do logowania. W tym miejscu cytują, że obecnie (w momencie tego pliku, 2013/06) wiadomości wieloliniowe nie są obsługiwane w systemie, więc uważaj na to.


2

Nie znam dystrybucji Arch. Mam Fedorę 20 (w tym systemd) i skonfigurowałem ją tak, aby akceptowała zdalne wiadomości syslog.

IMHO, ta funkcjonalność nie jest związana z systemd. Systemd-journald.service przenosi się między programami jądra / przestrzeni użytkownika a podsystemem syslog. Przechwytuje (jak sądzę) tylko lokalne wiadomości z tych źródeł do swojej bazy danych dziennika, a następnie przekazuje je dalej do syslog. Zobacz na przykład „man systemd-journald.service” (przynajmniej w Fedorze).

W moim przypadku włączam to, konfigurując opcjonalny „moduł odbiornika syslog TCP” w pliku /etc/rsyslog.conf tj.

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

Dostępny jest również moduł UDP.

Konieczne jest także dodanie reguł (r) syslog, aby skierować dane wyjściowe do pożądanych plików. Pełna dokumentacja znajduje się na stronie : http://www.rsyslog.com/doc/

HTH.


2

Zainstalowałem syslog-ng i mogłem odbierać komunikaty dziennika syslog. Ale naprawdę chciałem otrzymywać wiadomości z dziennika syslog, a następnie napisać tę wiadomość do dziennika. Nie mogłem znaleźć sposobu na skonfigurowanie syslog-ng do pisania zdalnych wiadomości syslog do dziennika.

Więc napisałem narzędzie do tego.

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.)

Pliki kompilacji i instrukcje testowania oraz przykładowe pliki jednostek systemowych są dołączone do projektu. Cieszyć się!


0

syslog-ng i dziennik systemowy

Z syslog-ng

Począwszy od syslog-ng w wersji 3.6.1, domyślne system()źródło w systemach Linux używających systemd używa dziennika jako standardowego system()źródła.

Jeśli chcesz korzystać z plików dziennika i syslog-ng, upewnij się, że obowiązują następujące ustawienia. W przypadku systemd-journald, w pliku /etc/systemd/journald.conf, Storage = albo ustawione na auto lub unset (domyślnie auto), a ForwardToSyslog = ustawione na no lub unset (domyślnie nie). W przypadku /etc/syslog-ng/syslog-ng.conf potrzebujesz następującej sekcji źródłowej:

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

Jeśli, z drugiej strony, nie chcą zachować dzienniki journald, ale tylko syslog-ng Text tartaczne, zbiór Storage=volatilei ForwardToSyslog=yesw /etc/systemd/journald.conf. Będzie to przechowywać dziennik w pamięci RAM. Począwszy od syslog-ng 3.6.3, syslog-ng używa dziennika jako system()źródła, więc jeśli ustawisz Storage = none, dziennik systemowy usunie wszystkie wiadomości i nie przekaże ich do syslog-ng.

Po zmianie zrestartuj demony systemd-journald.servicei syslog-ng.service.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.