Mam wrażenie, że przeoczyłem oczywistość, ale nie mogę wymyślić, jak uzyskać mój serwer Arch Linux, który używa systemd
do odbierania i rejestrowania syslog
wiadomoś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ć, syslog
ani 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.
źródło
Odpowiedzi:
Za pomocą socat możesz dość łatwo napisać serwer syslog biednego człowieka . Potrzebujesz tylko takiego serwisu:
Ślepo wyśle wszystko otrzymane przez port usługi syslog do dziennika systemowego. Zapisz powyższe jako, powiedzmy,
/etc/systemd/system/syslog.service
a potemNastę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 Extra
pacman -S socat
) :źródło
import socket; sock = socket.socket(type=socket.SocketKind.SOCK_DGRAM); sock.bind(("0.0.0.0", 514)); while True: print(sock.recv(1024 * 1024))
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)
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.
źródło
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.
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.
źródło
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
Pliki kompilacji i instrukcje testowania oraz przykładowe pliki jednostek systemowych są dołączone do projektu. Cieszyć się!
źródło
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 standardowegosystem()
źródła.Jeśli, z drugiej strony, nie chcą zachować dzienniki journald, ale tylko syslog-ng Text tartaczne, zbiór
Storage=volatile
iForwardToSyslog=yes
w/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 jakosystem()
ź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.service
isyslog-ng.service
.źródło