Ciao ragazzi, vorrei realizzare un syslog server su debian oppure centos, ho notato che esistono diverse soluzioni commerciali anche per linux; voi conoscete qualcosa free che abbia la possibilità in qualche modo di visualizzare e filtrare tutti i log raccolti magari tramite una interfaccia web? perchè quelli che ho visto fino ad adesso zippano lo storico in sottocartelle a partire da /var/log/nome-directory a più livelli in base dalla data e all'ora ostacolando la ricerca di eventuali informazioni...
Gimli[2BV!2B]
04-11-2011, 23:16
Prendete una distribuzione di vostro gradimento, nel mio caso una freschissima Debian Sid.
Installate syslog-ng (http://packages.debian.org/it/sid/syslog-ng) ed il driver che gli serve per scrivere in MySQL: libdbd-mysql (http://packages.debian.org/it/sid/libdbd-mysql).
In caso di kernel >= 2.6.38 occorre pelare un bug modificando il file init (ho preferito fare la modifica in quel file in modo tale che vada sovrascritto al prossimo aggiornamento che *deve* risolvere il problema (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=630172)):[...]
syslogng_start() {
log_daemon_msg "Starting system logging" "$NAME"
create_xconsole
[ -f "$PIDFILE" ] && echo ' seems to be running' && return 0
start-stop-daemon --start --quiet --exec "$SYSLOGNG" \
--pidfile "$PIDFILE" -- -p "$PIDFILE" $SYSLOGNG_OPTS --no-caps
RET="$?"
log_end_msg $RET
return $RET
}
[...]
Installate il server MySQL e configuratelo.
Aprite la console MySQL:mysql -uroot -p
Create il database syslog:CREATE DATABASE `syslog` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Create la tabella logs (syslog-ng la crea anche in automatico ma non ha le colonne ben dimensionate):CREATE TABLE IF NOT EXISTS `logs` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`host` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL,
`facility` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
`priority` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
`level` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
`tag` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
`datetime` datetime DEFAULT NULL,
`program` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL,
`msg` text COLLATE utf8_unicode_ci,
`seqnum` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `logs_host_idx` (`host`),
KEY `logs_facility_idx` (`facility`),
KEY `logs_priority_idx` (`priority`),
KEY `logs_datetime_idx` (`datetime`),
KEY `logs_program_idx` (`program`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Create un utente MySQL per syslog-ng (cambiate la password syslogwriter-password, son stato un po' abbondante coi diritti):GRANT INSERT, SELECT, UPDATE, ALTER, INDEX, CREATE ON `syslog`.* TO 'syslogwriter'@'localhost' IDENTIFIED BY 'syslogwriter-password';
Sciaquate i privilegi dell'utente:FLUSH PRIVILEGES ;
Modificate il file /etc/syslog-ng/syslog-ng.conf:
Se si vuol loggare pure dalla rete (http://www.hwupgrade.it/forum/showthread.php?t=1812123#2ML):# First, set some global options.
options { long_hostnames(off); flush_lines(0); use_dns(yes); use_fqdn(no);
owner("root"); group("adm"); perm(0640); stats_freq(0);
bad_hostname("^gconfd$");
};
Aggiungere MySQL alle Destinations (allineare utente e password di MySQL):# MySQL
#
destination d_mysql {
sql(type(mysql)
host("localhost") username("syslogwriter") password("syslogwriter-password")
database("syslog")
table("logs")
columns("host", "facility", "priority", "level", "tag", "datetime", "program", "msg", "seqnum")
values("$HOST_FROM", "$FACILITY", "$PRIORITY", "$LEVEL", "$TAG", "$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC", "$PROGRAM", "$MSG", "$SEQNUM")
indexes("host", "facility", "priority", "datetime", "program"));
};
Duplicare tutti i log in MySQL, in fondo, nei Log Path:# All messages to MySQL too!
#
log { source(s_src); destination(d_mysql); };
Riavviare syslog-ng:/etc/init.d/syslog-ng restart
Accompagnare con un buon bicchiere di lambrusco se dovesse funzionare al primo colpo, con abbondanti imprecazioni in caso di problemi.
Avere i log in un server MySQL permette di manipolarli, filtrarli un po' come si vuole.
Come accennato è possibile archiviare log provenienti da altre macchine in rete.
Tabelle, indici, colonne, database, motore database, tutto è personalizzabile. (http://www.google.it/url?sa=t&rct=j&q=syslog-ng%20supported%20databases&source=web&cd=1&ved=0CCMQFjAA&url=http%3A%2F%2Fwww.balabit.com%2Fsites%2Fdefault%2Ffiles%2Fsyslog-ng-v2.1-whitepaper-syslog-into-sql-database-en.pdf%3Fq%3Ddl%2Fwhite_papers%2Fsyslog-ng-v2.1-whitepaper-syslog-into-sql-database-en.pdf&ei=VnG0TpHwEZGd-wbpkKmFBg&usg=AFQjCNFVi5FsUhTV2wM-Lc2huKqDhazsgw)
Esistono varie interfacce web precotte che permettono di analizzare questi log archiviati in MySQL.
Dopo una non troppo approfondita ricerca quella che mi ha attratto di più è stata LogZilla (http://www.logzilla.pro/), la cui installazione automatizza quanto scritto sopra, la cui licenza è gratuita se ad utilizzo domestico, la cui interfaccia è gradevole.
Non mi son messo lì ad installarlo perché 'sta cosa della licenza mi infastidisce, ma dalla demo mi è sembrata mediamente utilizzabile (http://demo.logzilla.pro/).
grazie della risposta, era quello che cercavo! io dovrei proprio fare auditing dei server e degli apparati di una rete aziendale, non sò se posso usare LogZilla...
avevo visto anch'io syslog-ng però mi era sembrato di capire che solo con la versione a pagamento si poteva madare i log ad un db, invece da quello che hai scritto si riesce anche con la open source edition. se uso debian (la preferisco, apt è troppo comodo rispetto alla concorrenza) vedo se riesco ad adattare la procedura per sfruttare postgre che viene di default con debian
Gimli[2BV!2B]
10-11-2011, 22:09
Giusto oggi è arrivato in Sid syslog-ng 3.3.1 (http://packages.qa.debian.org/s/syslog-ng.html), rendendo inutile & controproducente la modifica del file init descritta al punto 2.
Tra l'altro in questa versione è stata anche aggiunta la sempre più diffusa pratica di caricare i file di configurazione da una cartella conf.d: /etc/syslog-ng/conf.d/
Ho quindi preferito sfruttare la novità creando un file specifico per la configurazione della copia dei log in MySQL: /etc/syslog-ng/conf.d/99sql.conf# MySQL
#
destination d_mysql {
sql(type(mysql)
host("localhost") username("syslogwriter") password("kwankey")
database("syslog")
table("logs")
columns("host", "facility", "priority", "level", "tag", "datetime", "program", "msg", "seqnum")
values("$HOST_FROM", "$FACILITY", "$PRIORITY", "$LEVEL", "$TAG", "$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC", "$PROGRAM", "$MSG", "$SEQNUM")
indexes("host", "facility", "priority", "datetime", "program"));
};
# All messages to MySQL too!
#
log { source(s_src); destination(d_mysql); };
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.