Differences between revisions 2 and 3
Revision 2 as of 2014-08-20 14:46:08
Size: 1669
Editor: Kurgan
Comment:
Revision 3 as of 2019-09-26 15:14:36
Size: 4391
Editor: Kurgan
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
== Come loggare da macchine remote con rsyslog == = Come loggare da macchine remote con rsyslog (Debian 9 / Devuan Ascii) =
Line 3: Line 3:
Per loggare da macchine remote con rsyslog (Debian Wheezy, ma anche precedenti direi) occorre: '''Nota bene: questa pagina si riferisce a rsyslog versione 8.24. Le versioni vecchie avevano sintassi diversa.'''
Line 5: Line 5:
 * Modificare /etc/rsyslog.conf per abilitare la ricezione remota, scommentando queste due righe:
 {{{

== Configurazione della macchina che deve ricevere i log ==

* Modificare /etc/rsyslog.conf per abilitare la ricezione remota. Possiamo usare TCP, UDP, e/o RELP.
  * Per usare TCP e UDP, scommentare
queste righe:
  {{{
Line 8: Line 12:
$ModLoad imudp
$UDPServerRun 514
module(load="imudp")
input(type="imudp" port="514")

# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")
}}}
  * Per usare RELP, occorre installare il pacchetto {{{rsyslog-relp}}} e poi aggiungere la configurazione per RELP, così:
  {{{
# provides RELP syslog reception
module(load="imrelp")
input(type="imrelp" port="2514" maxDataSize="10k" keepAlive="on")
Line 12: Line 26:
 * Creare un file di configurazione che salvi i log di ogni macchina remota in un posto definito. Nel mio caso e` /var/log/remote/ip-della-macchina.log. Il file lo chiamiamo come vogliamo e lo mettiamo dentro a /etc/rsyslog.d, per esempio possiamo chiamarlo "remote.conf". Possiamo anche inserire le righe dentro al file /etc/rsyslog.conf stesso, in questo caso vanno PRIMA dell'include da rsyslog.d.
* Creare un file di configurazione che salvi i log di ogni macchina remota in un posto definito. Nel mio caso e` /var/log/remote/hostname-della-macchina.log. Il file lo chiamiamo come vogliamo e lo mettiamo dentro a /etc/rsyslog.d, per esempio possiamo chiamarlo "remote.conf". Possiamo anche inserire le righe dentro al file /etc/rsyslog.conf stesso, in questo caso vanno PRIMA dell'include da rsyslog.d. Va notato che qui e` possibile fare veramente di tutto, volendo. Occorre studiare come funziona rsysylog, comunuque, che non e` banale.
Line 15: Line 30:
$template PerHostLog,"/var/log/remote/%FROMHOST-IP%.log"
:FROMHOST-IP,!isequal,"127.0.0.1" -?PerHostLog
& ~


# alcuni esempio di template per definire il nome del file generato (ne potete scommentare SOLO UNO)

#template (name="Remote" type="string" string="/var/log/remote/%fromhost-ip%.log")
template (name="Remote" type="string" string="/var/log/remote/%hostname%.log")
#template (name="Remote" type="string" string="/var/log/remote/%hostname%_%syslogfacility-text%.log")
#template (name="Remote" type="string" string="/var/log/remote/%hostname%/%syslogfacility-text%.log")


# questo template aggiunge il nome della facility dentro ad ogni riga del log.
# inoltre genera il timestamp includendo la time zone attuale (della macchina che genera il log,
# non di quella che lo sta ricevendo)

template(name="RemoteFormat" type="list") {
    property(name="timestamp" dateFormat="rfc3339")
    constant(value=" ")
    property(name="syslogfacility-text")
    constant(value=" ")
    property(name="hostname")
    constant(value=" ")
    property(name="syslogtag")
    property(name="msg" spifno1stsp="on" )
    property(name="msg" droplastlf="on" )
    constant(value="\n")
    }


# le righe qui sotto eseguono l'azione vera di salvare i log non locali.
# se il log non e` locale (non viene da 127.0.0.1), allora trattalo con
# i template qui sopra indicati (il che lo fa salvare dove e come voglio io)

if not ($fromhost-ip startswith '127.') then {
    action(type="omfile" dynaFile="Remote" template="RemoteFormat")
    stop
}
Line 45: Line 94:
Notare la sintassi orribile della configurazione di ryslog. Syslog-NG e` mooolto meglio.

== Configurazione della macchina che deve inviare i log ==

 * Per inviare i log via udp o tcp, modificare il file /etc/rsyslog.conf inserendo la direttiva di invio dei log remoti. Si puo` farlo anche piu` volte, specificando diverse impostazioni per il filtro.
 {{{
# solo auth (via tcp, due "@")
auth,authpriv.* @@192.168.99.6

# tutto (via tcp, due "@")
*.* @@192.168.99.6

# tutto (via udp, una sola "@")
*.* @192.168.99.6

}}}

 * Per inviare i log via RELP, la cosa si complica un poco: occorre abilitare il modulo RELP e poi definire quali log mandare al remoto
 {{{
# carico il modulo per inviare via RELP
module(load="omrelp")

# invio i log che voglio via RELP
auth,authpriv.* :omrelp:192.168.99.6:2514
}}}

Come loggare da macchine remote con rsyslog (Debian 9 / Devuan Ascii)

Nota bene: questa pagina si riferisce a rsyslog versione 8.24. Le versioni vecchie avevano sintassi diversa.

Configurazione della macchina che deve ricevere i log

  • Modificare /etc/rsyslog.conf per abilitare la ricezione remota. Possiamo usare TCP, UDP, e/o RELP.
    • Per usare TCP e UDP, scommentare queste righe:
      # provides UDP syslog reception
      module(load="imudp")
      input(type="imudp" port="514")
      
      # provides TCP syslog reception
      module(load="imtcp")
      input(type="imtcp" port="514")
    • Per usare RELP, occorre installare il pacchetto rsyslog-relp e poi aggiungere la configurazione per RELP, così:

      # provides RELP syslog reception
      module(load="imrelp")
      input(type="imrelp" port="2514" maxDataSize="10k" keepAlive="on")
  • Creare un file di configurazione che salvi i log di ogni macchina remota in un posto definito. Nel mio caso e` /var/log/remote/hostname-della-macchina.log. Il file lo chiamiamo come vogliamo e lo mettiamo dentro a /etc/rsyslog.d, per esempio possiamo chiamarlo "remote.conf". Possiamo anche inserire le righe dentro al file /etc/rsyslog.conf stesso, in questo caso vanno PRIMA dell'include da rsyslog.d. Va notato che qui e` possibile fare veramente di tutto, volendo. Occorre studiare come funziona rsysylog, comunuque, che non e` banale.
    # alcuni esempio di template per definire il nome del file generato (ne potete scommentare SOLO UNO)
    
    #template (name="Remote" type="string" string="/var/log/remote/%fromhost-ip%.log")
    template (name="Remote" type="string" string="/var/log/remote/%hostname%.log")
    #template (name="Remote" type="string" string="/var/log/remote/%hostname%_%syslogfacility-text%.log")
    #template (name="Remote" type="string" string="/var/log/remote/%hostname%/%syslogfacility-text%.log")
    
    
    # questo template aggiunge il nome della facility dentro ad ogni riga del log.
    # inoltre genera il timestamp includendo la time zone attuale (della macchina che genera il log, 
    # non di quella che lo sta ricevendo)
    
    template(name="RemoteFormat" type="list") {
        property(name="timestamp" dateFormat="rfc3339")
        constant(value=" ")
        property(name="syslogfacility-text")
        constant(value=" ")
        property(name="hostname")
        constant(value=" ")
        property(name="syslogtag")
        property(name="msg" spifno1stsp="on" )
        property(name="msg" droplastlf="on" )
        constant(value="\n")
        }
    
    
    # le righe qui sotto eseguono l'azione vera di salvare i log non locali.
    # se il log non e` locale (non viene da 127.0.0.1), allora trattalo con 
    # i template qui sopra indicati (il che lo fa salvare dove e come voglio io)
    
    if not ($fromhost-ip startswith '127.') then {
        action(type="omfile" dynaFile="Remote" template="RemoteFormat")
        stop
    }
  • Creare la directory /var/log/remote/
  • Aggiungere una regola che ruoti i log dentro a /var/log/remote onde non trovarsi con log di 100 GB. Questo si puo` fare ad esempio aggiungendo in cima al file /etc/logrotate.d/rsyslog, subito sotto la riga che dice "/var/log/syslog" (e` la prima in alto) una riga che dice "/var/log/remote/*.log".
    /var/log/syslog
    /var/log/remote/*.log
    {
            rotate 7
            daily
            missingok
            notifempty
            delaycompress
            compress
            postrotate
                    invoke-rc.d rsyslog rotate > /dev/null
            endscript
    }
    
    ... ECCETERA

A questo punto, fatto un restart di rsyslog, tutto dovebbe iniziare a funzionare.

Configurazione della macchina che deve inviare i log

  • Per inviare i log via udp o tcp, modificare il file /etc/rsyslog.conf inserendo la direttiva di invio dei log remoti. Si puo` farlo anche piu` volte, specificando diverse impostazioni per il filtro.
    # solo auth (via tcp, due "@")
    auth,authpriv.*     @@192.168.99.6
    
    # tutto (via tcp, due "@")
    *.*                 @@192.168.99.6
    
    # tutto (via udp, una sola "@")
    *.*                 @192.168.99.6
  • Per inviare i log via RELP, la cosa si complica un poco: occorre abilitare il modulo RELP e poi definire quali log mandare al remoto
    # carico il modulo per inviare via RELP
    module(load="omrelp")
    
    # invio i log che voglio via RELP
    auth,authpriv.* :omrelp:192.168.99.6:2514

LinuxDebian/Rsyslog (last edited 2022-11-14 15:38:02 by Kurgan)