1665
Comment:
|
← Revision 6 as of 2022-11-14 15:38:02 ⇥
4487
|
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 e successive) = |
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 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. |
Line 7: | Line 10: |
# 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" |
|
Line 8: | Line 16: |
$ModLoad imudp $UDPServerRun 514 |
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 } |
Line 12: | Line 65: |
* 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. |
* Per usare RELP, occorre installare il pacchetto {{{rsyslog-relp}}} e poi aggiungere la configurazione per RELP, così: |
Line 15: | Line 67: |
$template PerHostLog,"/var/log/remote/%FROMHOST-IP%.log" :FROMHOST-IP,!isequal,"127.0.0.1" -?PerHostLog & ~ |
# provides RELP syslog reception module(load="imrelp") input(type="imrelp" port="2514" maxDataSize="10k" keepAlive="on" ruleset="LogRemoti") |
Line 20: | Line 72: |
* 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". |
* 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. |
Line 23: | Line 75: |
/var/log/syslog | |
Line 26: | Line 77: |
rotate 7 daily |
rotate 24 weekly |
Line 33: | Line 84: |
invoke-rc.d rsyslog rotate > /dev/null | /usr/lib/rsyslog/rsyslog-rotate |
Line 36: | Line 87: |
}}} | |
Line 37: | Line 89: |
... ECCETERA | * 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 |
Line 41: | Line 108: |
* 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") |
|
Line 42: | Line 113: |
A questo punto, fatto un restart di rsyslog, tutto dovebbe iniziare a funzionare. Notare la sintassi orribile della configurazione di ryslog. Syslog-NG e` mooolto meglio. |
# 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 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