J'ai l'impression d'avoir ignoré l'évidence, mais je n'arrive pas à comprendre comment obtenir mon serveur Arch Linux, qui utilise systemd
, pour recevoir et enregistrer les syslog
messages d'un système distant.
J'ai un modem Cisco 678 DSL et un DD-WRT WAP, et les deux peuvent être configurés pour envoyer des messages au format syslog à une autre machine. J'aimerais que cette machine soit mon serveur Arch Linux.
J'ai fait des recherches sur Google, et tout ce que je trouve, c'est que "systemd remplace syslog", ou que je n'ai plus besoin d'exécuter syslog
ou quelque chose de non pertinent pour ma question.
MISE À JOUR
J'ai demandé sur les forums Arch et je n'ai obtenu aucune réponse pertinente. J'ai installé syslog-ng juste pour écouter sur le port UDP 514. syslog-ng écrit des messages de mon Cisco 678 et un WAP DD-WRT que j'ai. Malheureusement, les messages ne se retrouvent pas dans le journal de systemd, mais plutôt dans des fichiers plats. Donc, pas de solution exacte, mais une solution de contournement. Je préfère avoir les messages syslog dans le journal, pas dans des fichiers plats.
la source
Réponses:
Vous pouvez écrire le serveur syslog d' un pauvre assez facilement avec socat . Vous avez juste besoin d'une unité de service comme celle-ci:
Il enverra aveuglément tout ce qui sera reçu sur le port du service syslog au journal systemd. Enregistrez ce qui précède sous, disons,
/etc/systemd/system/syslog.service
puisVous avez alors juste besoin de votre source pour envoyer des messages au port UDP 514 sur votre serveur d'écoute.
Vous voudrez peut-être améliorer cela pour analyser réellement les données reçues et les formater, mais ce n'est pas nécessaire si tout ce que vous voulez faire est de journaliser ce qui est reçu.
( IACS est dans l'Arch Linux supplémentaire référentiel:
pacman -S socat
)la source
import socket; sock = socket.socket(type=socket.SocketKind.SOCK_DGRAM); sock.bind(("0.0.0.0", 514)); while True: print(sock.recv(1024 * 1024))
Il y a donc un petit écart ici.
Systemd prend en charge la messagerie à distance via le composant systemd-journal-gateway. Cela étant dit, ces messages ne sont pas au format syslog. Syslog (en tant que format) est une spécification ratifiée par l'IETF documentée dans la RFC 5424 (qui a déconseillé la version précédente, la RFC 3164).
Plus de subtilités pour que ces jeux jouent bien ensemble sont documentés ici:
http://www.freedesktop.org/wiki/Software/systemd/syslog/
et ici (man systemd-journald.service)
En résumé, assurez-vous que les messages sont envoyés de syslog-ng à STDOUT et que les choses devraient finir dans le journal.
En poursuivant un peu plus, j'ai également trouvé ceci:
https://github.com/intgr/pg_journal/blob/master/doc/pg_journal.md
Où quelqu'un écrit une liaison de PostgreSQL vers systemd pour la journalisation. En cela, ils citent le fait qu'actuellement (au moment de la création de ce fichier, 2013/06) les messages multilignes ne sont pas pris en charge dans systemd, alors faites attention à cela aussi.
la source
Je ne connais pas la distribution Arch. J'ai Fedora 20 (y compris systemd) et je l'ai configuré pour accepter les messages syslog distants.
À mon humble avis, cette fonctionnalité n'est pas liée à systemd. Le systemd-journald.service s'interpose entre les programmes noyau / espace utilisateur et le sous-système syslog. Il capture (je pense) uniquement les messages locaux de ces sources dans sa base de données de journaux et les transmet ensuite à syslog. Voir par exemple "man systemd-journald.service" (au moins sur Fedora).
Dans mon cas, j'active cela en configurant un "module récepteur TCP syslog" en option dans /etc/rsyslog.conf ie
Un module UDP est également disponible.
Il est également nécessaire d'ajouter des règles (r) syslog pour diriger la sortie vers les fichiers souhaités. Pour une documentation complète, voir: http://www.rsyslog.com/doc/
HTH.
la source
J'ai installé syslog-ng et j'ai pu recevoir les messages du journal syslog. Mais ce que je voulais vraiment, c'était de recevoir les messages du journal syslog, puis d'écrire ce message dans journald. Je n'ai pas pu trouver un moyen de configurer syslog-ng pour écrire des messages syslog distants dans journald.
J'ai donc écrit un utilitaire pour le faire.
https://github.com/advantageous/rsyslog-journald-repeater
Les fichiers de construction et les instructions de test et les exemples de fichiers d'unité systemd sont inclus avec le projet. Prendre plaisir!
la source
journal syslog-ng et systemd
De syslog-ng
Depuis la version 3.6.1 de syslog-ng, la
system()
source par défaut sur les systèmes Linux utilisant systemd utilise journald commesystem()
source standard .Si, en revanche, vous souhaitez ne pas conserver les journaux journald, mais uniquement les journaux de texte de syslog-ng, set
Storage=volatile
etForwardToSyslog=yes
in/etc/systemd/journald.conf
. Cela stockera le journald dans le bélier. Depuis syslog-ng 3.6.3, syslog-ng utilise journald commesystem()
source, donc si vous définissez Storage = none, le journal systemd supprimera tous les messages et ne les transmettra pas à syslog-ng.Après la modification, redémarrez les démons
systemd-journald.service
etsyslog-ng.service
.la source