Ricezione di messaggi Syslog con un sistema Linux Arch


25

Mi sento come se avessi trascurato l'ovvio, ma non riesco a capire come ottenere il mio server Arch Linux, che utilizza systemd, per ricevere e registrare i syslogmessaggi da un sistema remoto.

Ho un modem DSL Cisco 678 e un WAP DD-WRT, ed entrambi possono essere configurati per inviare messaggi in formato syslog ad altre macchine. Vorrei che quella macchina fosse il mio server Arch Linux.

Ho cercato su Google, e tutto quello che trovo è che "systemd sostituisce syslog", o che non ho più bisogno di correre syslogo qualcosa di altrettanto irrilevante per la mia domanda.

AGGIORNARE

Ho chiesto sui forum Arch e non ho ottenuto risposte pertinenti. Ho installato syslog-ng solo per l'ascolto sulla porta UDP 514. syslog-ng scrive i messaggi dal mio Cisco 678 e un WAP DD-WRT che ho. Sfortunatamente, i messaggi non finiscono nel diario di systemd, ma piuttosto in file flat. Quindi, nessuna soluzione esatta, ma una soluzione alternativa. Preferirei avere i messaggi syslog nel diario, non in file flat.


systemd utilizza il proprio registro . C'è anche metalog , che è disponibile nei repository Arch principali: io personalmente uso tutti e tre: syslog, journal di systemd e metalog. Prova a controllare il journal di systemd. Se ricordo bene, syslog, sin dal passaggio a systemd, è stato configurato per inviare tutti i suoi messaggi e simili al journal di systemd.
Alexej Magura,

Risposte:


11

Puoi scrivere facilmente il server syslog di un uomo povero con socat . Hai solo bisogno di un'unità di servizio come questa:

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

Invierà ciecamente tutto ciò che è stato ricevuto sulla porta del servizio syslog al journal di systemd. Salva quanto sopra come, diciamo, /etc/systemd/system/syslog.servicee poi

# systemctl daemon-reload
# systemctl start syslog

Quindi hai solo bisogno del tuo sorgente per inviare messaggi alla porta UDP 514 sul tuo server di ascolto.

Potresti voler migliorare questo per analizzare effettivamente i dati ricevuti e formattarli, ma non è necessario se tutto ciò che vuoi fare è registrare ciò che è ricevuto.

( Socat è in Arch Linux Extra repository: pacman -S socat)


4
Buona risposta. Sono andato con un veloce script in pitone poiché non riuscivo a installare 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

Quindi c'è un po 'di spazio qui.

Systemd supporta la messaggistica remota tramite il componente systemd-journal-gateway. Detto questo, questi messaggi non sono in formato syslog. Syslog (come formato) è una specifica ratificata IETF documentata in RFC 5424 (che ha deprecato la versione precedente, RFC 3164).

Altre complicazioni nel farle suonare bene insieme sono documentate qui:

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

e qui (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.

In sintesi, assicurarsi che i messaggi vengano inviati da syslog-ng a STDOUT e che le cose vadano a finire nel diario.

Nel dare seguito a questo, ho trovato anche questo:

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

Dove qualcuno sta scrivendo un'associazione da PostgreSQL a systemd per la registrazione. In questo citano che attualmente (al momento del file, 2013/06) i messaggi multilinea non sono supportati in systemd, quindi fai attenzione anche a quello.


2

Non conosco la distribuzione Arch. Ho Fedora 20 (incluso systemd) e l'ho configurato per accettare messaggi syslog remoti.

IMHO, questa funzionalità non è correlata a systemd. Systemd-journald.service si interpone tra i programmi kernel / userspace e il sottosistema syslog. Cattura (penso) solo i messaggi locali da queste fonti nel suo database journal e li inoltra su syslog. Vedi ad esempio "man systemd-journald.service" (almeno su Fedora).

Nel mio caso lo abilito configurando un "modulo ricevitore TCP syslog" opzionale in /etc/rsyslog.conf

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

È inoltre disponibile un modulo UDP.

È inoltre necessario aggiungere (r) regole syslog per indirizzare l'output ai file desiderati. Per la documentazione completa, consultare: http://www.rsyslog.com/doc/

HTH.


2

Ho installato syslog-ng e sono stato in grado di ricevere messaggi di registro syslog. Ma volevo davvero desiderare era ricevere messaggi di registro syslog e quindi scrivere detto messaggio a journald. Non sono riuscito a trovare un modo per configurare syslog-ng per scrivere messaggi di syslog remoti su journald.

Quindi ho scritto un'utilità per farlo.

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

Compilare i file e le istruzioni per il test e l'esempio dei file di unità di sistema sono inclusi nel progetto. Godere!


0

syslog-ng e journal di systemd

Da syslog-ng

A partire da syslog-ng versione 3.6.1, l' system()origine predefinita sui sistemi Linux che utilizzano systemd utilizza journald come system()origine standard .

Se si desidera utilizzare sia i file journald che syslog-ng, assicurarsi che siano attive le seguenti impostazioni. Per systemd-journald, nel file /etc/systemd/journald.conf, Storage = impostato su auto o non impostato (impostazione predefinita su auto) e ForwardToSyslog = impostato su no o non impostato (impostazione predefinita su no). Per /etc/syslog-ng/syslog-ng.conf, è necessaria la seguente stanza sorgente:

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

Se, d'altra parte, non si desidera mantenere i log journald, ma solo di syslog-ng testo tronchi, insieme Storage=volatilee ForwardToSyslog=yesin /etc/systemd/journald.conf. Questo memorizzerà journald in ram. A partire da syslog-ng 3.6.3, syslog-ng utilizza journald come system()sorgente, quindi se si imposta Storage = none, il journal di systemd eliminerà tutti i messaggi e non li inoltrerà a syslog-ng.

Dopo la modifica, riavvia i demoni systemd-journald.servicee syslog-ng.service.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.