Differences between revisions 5 and 6
Revision 5 as of 2022-07-15 13:37:31
Size: 4492
Editor: Kurgan
Comment:
Revision 6 as of 2022-11-14 15:38:02
Size: 4487
Editor: Kurgan
Comment:
Deletions are marked like this. Additions are marked like this.
Line 84: Line 84:
                invoke-rc.d rsyslog rotate > /dev/null                   /usr/lib/rsyslog/rsyslog-rotate

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

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 remoti

  • Creare una configurazione dedicata alla ricezione dei log remoti nel file /etc/rsyslog.d/remote.conf (o altro nome che vi aggrada). Questa configurazione contiene TUTTE le modifiche necessarie rispetto alla configurazione standard di rsyslog su Debian/Devuan. In questo modo non occorre modificare niente altro.

    # abilito la ricezione remota e dico a rsyslog che quando riceve da remoto deve 
    # usare la ruleset che si trova alla fine di questo file di config.
    # In pratica, i log che entrano via udp o tcp vengono marcati per essere trattati
    # da una specifica ruleset che si chiama "LogRemoti"
    
    # provides UDP syslog reception
    module(load="imudp")
    input(type="imudp" port="514" ruleset="LogRemoti")
    
    # provides TCP syslog reception
    module(load="imtcp")
    input(type="imtcp" port="514" ruleset="LogRemoti")
    
    
    
    
    # alcuni esempi di template per definire il nome del file generato 
    # usando diverse variabili (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")
        }
    
    
    # Quando i log arrivano da tcp o udp li devo trattare con questa regola
    # che usa i template definiti qui sopra per decidre cosa scrivere e dove.
    # Questa parte di config deve essere l'ultima in quanto usa i template che
    # sono definiti PRIMA. Se li definisco dopo, non va.
    ruleset(name="LogRemoti") {
            action(type="omfile" dynaFile="Remote" template="RemoteFormat")
            stop
    }
  • 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" ruleset="LogRemoti")
  • Creare la directory /var/log/remote/

  • Aggiungere una regola che ruoti i log dentro a /var/log/remote onde non trovarsi con log che crescono all'inifinito. Questo si puo` fare creando un apposito file che chiameremo /etc/logrotate.d/rsyslog-remote, contenente le regole di rotazione che vogliamo applicare a tutti i log remoti indistintamente. Questa per esempio ruota settimanalmente e tiene 24 settimane, ovvero circa sei mesi.

    /var/log/remote/*.log
    {
            rotate 24
            weekly
            missingok
            notifempty
            delaycompress
            compress
            postrotate
                      /usr/lib/rsyslog/rsyslog-rotate
            endscript
    }
  • Per finire si fa un restart di rsyslog e 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)