• Non ci sono risultati.

s y s l o g - n g c o m e g e s t i r e i l o g n e l Mezzora d'amicizia - 07 Marzo

N/A
N/A
Protected

Academic year: 2022

Condividi "s y s l o g - n g c o m e g e s t i r e i l o g n e l Mezzora d'amicizia - 07 Marzo"

Copied!
15
0
0

Testo completo

(1)

s y s l o g - n g

c o m e g e s t i r e i l o g n e l 2 0 0 7

Mezzora d'amicizia - 07 Marzo 2007 http://www.linuxvar.it/

(2)

s y s l o g - n g

c o m e g e s t i r e i l o g n e l 2 0 0 7

che problema risolve

che alternative ci sono

perche` ce n'e` bisogno

come si usa (brevemente)

alcune acrobazie con i log

(3)

c h e p r o b l e m a r i s o l v e

Abbiamo bisogno di un sistema per gestire i messaggi della macchina e dei vari software che ci girano

sopra

(4)

c h e a l t e r n a t i v e c i s o n o

metalog

– moderno come syslog-ng ma un po`

sempliciotto

sysklogd

– vecchio (19??)

– poco flessibile (file di conf classico, sintassi limitata, solo un paio di opzioni)

– non evolve piu` (il codice e` difficile da

mantenere) dal 2001

(5)

p e r c h e ` c e n ' e ` b i s o g n o

e` il piu` featureful

e` il piu` flessibile

da meno grattacapi degli altri

(6)

c o m e s i u s a ( b r e v e m e n t e )

options

– permessi di creazione file e directory

log

– source

(leggi da:)

– filter

(seleziona:) [facoltativo]

– destination

(scrivi in:)

(7)

e s e m p i o d i c o n f i g u r a z i o n e

Configurazione semplice per avere i log separati per data

source s_all { internal();

unix­stream(“/dev/log”);

pipe(“/proc/kmsg” log_prefix(“kernel: “));

fifo(“/var/log/apache/syslog.fifo”);

};

destination df_logsplit {

file("/var/log/logsplit/$YEAR/$MONTH/syslog.$DAY");

};

destination df_tmp_current {

file("/tmp/current_syslog");

};

# mettiamo assieme le parti e otteniamo una direttiva “log”

log {

        source(s_all);

        destination(df_logsplit);

        destination(df_tmp_current);

};

(8)

s o u r c e

Con questa direttiva, specifichiamo da dove leggere i messaggi di log source nome_sorgente {

# messaggi “interni” (di syslog­ng stesso) internal();

# socket unix

unix­stream(“/dev/log”);

# messaggi da sistemi remoti su udp e tcp udp(ip(192.168.1.12) port(514));

tcp(ip(0.0.0.0) port(514) max­connections(10)); # opzioni

# ... ma anche tcp6() e udp6()

# pipe e fifo (stessa cosa) (man mkfifo(1))

pipe(“/proc/kmsg” log_prefix(“kernel: “));  # opzione log_prefix fifo(“/var/log/apache/syslog.fifo”);

};

(9)

f i l t e r

Con filter, definiamo dei filtri da applicare successivamente ai log

# i filtri possono usare l'algebra booleana filter nome_filtro {

(

# si puo` filtrare sulla base di facility e level.. bella novita` :) facility(auth, mail)

and level(warn, error) ) or (

# si puo` filtrare sulla base di espressioni regolari..

match(“.+\<250 Ok\>.+”)

# .. sulla provenienza del messaggio (da un certo host o programma) and host(“^client_[0­9a­f]+.linuxvar.it$”)

and program(“postfix”) )

};

filter un_altro_filtro { facility(daemon)

and not level(debug) };

(10)

d e s t i n a t i o n

Con destination gli diciamo dove andare a loggare destination nome_destinazione {

# scriviamo su file, pipe, socket, ... anche usando le macro file(“/path/to/$MACRO/dir/$ALTRA_MACRO/...” owner(root);

pipe(“/path/to/pipe”);

tcp6(“2ffe::666:40b3:1” port(9999));

# mandiamo i log in stdin ad un programma program(“/usr/local/bin/mysql_log”);

# mandiamo un messaggio all'utente loggato (non supporta i template) usertty(buccia);

# template() definisce il formato del log

template(“$HOUR:$MIN:$SEC $TZ $HOST [$LEVEL] $MSG $MSG\n”);

};

(11)

m a c r o s

$FACILITY

$LEVEL

$YEAR

$MONTH

$WEEKDAY$DAY

$HOUR

$MIN

$UNIXTIME$SEC

$HOST

$HOST_FROM

$PROGRAM

$PID

mail, auth, daemon, ...

debug, info, warn, error, ...

2007 0226 Mon17 3852

1172507930 lothlorien

client_02.linuxvar.it postfix

1178

... e molte altre !

(la data di esempio e` Lun Feb 26 17:38:52 CET 2007)

Vengono espanse nelle stringhe di destinazione; si usano cosi`:

file(“/var/log/$HOST_FROM/$YEAR/$MONTH/syslog_$DAY”);

(12)

r i s u l t a t o

abbiamo i log ben organizzati

un balzo in avanti rispetto alla sintassi del sysklogd “standard”

gestiamo facilmente il log via rete

diciamo addio a logrotate & C. :)

(13)

i n t e g r a z i o n e c o n a p a c h e

# mkfifo /var/log/apache/syslog.fifo /etc/apache/httpd.conf:

LogFormat "%a:%A/%{Host}i \"%r\" \"%{User­agent}i\" %s %Bb %Ts" syslogfifo CustomLog /var/log/apache/syslog.fifo syslogfifo

ErrorLog syslog

/etc/syslog­ng/syslog­ng.conf:

source s_apache {

fifo(“/var/log/apache/syslog.fifo”);

};destination d_apache {

file(“/var/log/apache/$YEAR/$MONTH/access.log.$DAY”);

format(“$ISODATE $PROGRAM[$PID]: $MSG”);

};

log { source(s_apache); destination(d_apache); };

facciamo loggare apache su una fifo (che va creata a mano), e facciamo leggere il

syslog-ng da questa ..

(14)

i n t e g r a z i o n e c o n M y S Q L [ 1 ]

C'e` chi fa salvare i log su mysql invece che su file (esistono anche interfacce web per cercare e lavorare con i log salvati in mysql), per fare cio` basta

impostare una direttiva del tipo:

destination d_mysql {

pipe("/tmp/mysql.pipe"

template("INSERT INTO logs (host, facility, priority, level, tag, date, time, program, msg) VALUES ( '$HOST', '$FACILITY',

'$PRIORITY', '$LEVEL', '$TAG', '$YEAR­$MONTH­$DAY', '$HOUR:$MIN:$SEC', '$PROGRAM', '$MSG' );\n")

template­escape(yes) }; );

log {

source(...);

destination(d_mysql);

};

(15)

i n t e g r a z i o n e c o n M y S Q L [ 2 ]

E poi ovviamente ci vuole qualcosa che mandi la pipe su MySQL :)

#!/bin/sh

if [ ­e /tmp/mysql.pipe ]; then while [ ­e /tmp/mysql.pipe ] do

mysql ­u root –password=*** syslog </tmp/syslog.pipe done

else

mkfifo /tmp/mysql.pipe exec $0 $*

fi

Riferimenti

Documenti correlati

2009 - 2009 Degrémont - Milano Centrale di cogenerazione da 8 MWe con pompa di calore presso l'impianto di depurazione di San Rocco a Milano al servizio di un sistema

Gambero Rosso Gran Prix Degustation International Challenge Decanter World Wine Awords International Challenge International Challenge Robert

Il valore medio di €/mq 1.000 deve essere ragguagliato attraverso un opportuno coefficiente di età, stato e conservazione al fine di renderlo comparabile con gli

San Giorgio di Piano BO San Giovanni in Persiceto BO San Pietro in Casale BO Sant’Agata sul Santerno RA Santarcangelo di Romagna RN. Sasso

- L’Articolo 4 (Adeguamento fondo per il rinnovo del CCRL), al comma 1, pre- vede che, per l’adeguamento del fondo per il trattamento di posizione e di risultato

Insert the little plate in the groove on the vertical profile, move it under the shelf then lock it in postion using an hex

2. Il provvedimento di riapertura dei termini va pubblicato con le stesse modalità del bando originario; restano valide le domande presentate in precedenza. In

Gli utili e le perdite realizzate dalla cessione o dal rimborso e gli utili e le perdite non realizzati derivanti dalle variazioni del fair value del portafoglio di negoziazione