Réception de messages Syslog avec un système Linux Arch

25

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

Bruce Ediger
la source
systemd utilise son propre journal . Il y a aussi le métalog , qui est disponible dans les dépôts principaux d'Arch - personnellement, j'utilise les trois: syslog, le journal de systemd et metalog. Essayez de vérifier le journal systemd. Si je me souviens bien, syslog, depuis le passage à systemd, a été configuré pour envoyer tous ses messages et autres au journal de systemd.
Alexej Magura

Réponses:

11

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:

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

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

# systemctl daemon-reload
# systemctl start syslog

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

étoilé
la source
4
Bonne réponse. Je suis allé avec un script python rapide car je n'ai pas pu installer 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

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)

   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.

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.

Brian Redbeard
la source
2

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

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

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.

Robb W.
la source
2

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

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

Les fichiers de construction et les instructions de test et les exemples de fichiers d'unité systemd sont inclus avec le projet. Prendre plaisir!

RickHigh
la source
0

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 comme system()source standard .

Si vous souhaitez utiliser les fichiers journald et syslog-ng, assurez-vous que les paramètres suivants sont en vigueur. Pour systemd-journald, dans le fichier /etc/systemd/journald.conf, Storage = soit défini sur auto ou unset (qui par défaut est auto) et ForwardToSyslog = défini sur no ou unset (par défaut sur no). Pour /etc/syslog-ng/syslog-ng.conf, vous avez besoin de la strophe source suivante:

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

Si, en revanche, vous souhaitez ne pas conserver les journaux journald, mais uniquement les journaux de texte de syslog-ng, set Storage=volatileet ForwardToSyslog=yesin /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.serviceet syslog-ng.service.

RickHigh
la source