1 emerg: indicam condições de emergências do sistema;
1 Alert: problemas no sistema que necessitam de atenção imediata; 1 Crit: problemas fatais e condições críticas do sistema;
1 Debug: informações decodificadas de depuração dos processos em andamento; 1 err: mensagens de condições de erro geradas pelo STDERR;
1 Info: informações de programas em execução;
1 Notice: mensagens de condições normais, mas relevantes; 1 Warning: aviso padrão de execução de um processo; 1 None: mensagens genéricas.
H ar de ni ng e m L inu x
Por muito tempo o aplicativo padrão do Linux para gerenciamento de logs foi o Syslogd; todavia, muitas distribuições estão trazendo alternativas, como Syslog-ng e Rsyslog. Será usado neste capítulo um deamon muito melhorado em relação ao tradicional Syslod. O alvo neste capítulo será o deamon do Syslog-NG, que tem muitos mais recursos que o seu antecessor. Antes de instalar e vermos os arquivos de configuração do Syslog-NG, vamos entender como ele funciona.
A estrutura do Syslog-NG é como um quebra-cabeça: há várias peças separadas e temos de montá-las conforme desejamos para ter o nosso log personalizado.
O Syslog-NG possui três peças básicas: Source (Origem), Filter (Filtro) e Destination (Destino). Essas três peças unidas formarão o nosso log. Veja uma representação gráfica desse quebra-cabeça na figura a seguir.
Origem Filtro Destino
Origem LOG =
Filtro Destino
Com esse conceito em mente, pode-se instalar o Syslog-NG. # apt-get install syslog-ng
Depois de instalado o Syslog-NG, cria-se uma estrutura personalizada para os logs. Vamos utilizar o diretório /var/personal, que está em uma partição separada, para alocar essa nossa nova estrutura personalizada.
O arquivo de configuração base do Syslog-ng normalmente está localizado em /etc/syslog-ng/ syslog-ng.conf, no qual é definida a forma como será organizada nossa estrutura de logs e também recursos do próprio serviço. Entretanto, para tirar proveito, é importante entender como funciona o protocolo Syslog.
Primeiros vamos renomear o syslog-ng.conf original e criar um novo. # cd /etc/syslog-ng
# mv syslog-ng.conf syslog-ng.conf_original
Logo em seguida, temos a exemplificação de como criar uma nova com a estrutura a seguir, considerando as configurações globais.
# vi syslog-ng.conf #OPCÕES GLOBAIS Figura 3.1 Representação de módulos de configuração.
Ca pí tu lo 3 - H ar de ni ng e m s is te m a L in ux – R eg is tr o d e e ve nt os ( lo g) e H ID S options { long_hostnames(off);}; #OPÇÕES DE ORIGEM
source src { unix-dgram(“/dev/log”); internal();}; # OPCÕES DE FILTROS
filter f_authpriv { facility(auth, authpriv); }; filter f_syslog { not facility(auth, authpriv); }; filter f_cron { facility(cron); };
filter f_daemon { facility(daemon); }; filter f_kern { facility(kern); }; filter f_lpr { facility(lpr); }; filter f_mail { facility(mail); }; filter f_user { facility(user); }; filter f_uucp { facility(uucp); }; filter f_news { facility(news); };
filter f_debug { not facility(auth, authpriv, news, mail); }; filter f_messages { level(info .. warn)
#vi syslog-ng.conf
and not facility(auth, authpriv, cron, daemon, mail, news); }; filter f_emergency { level(emerg); };
filter f_info { level(info); }; # vim /etc/syslog-ng/syslog-ng.conf filter f_notice { level(notice); }; filter f_warn { level(warn); }; filter f_crit { level(crit); }; filter f_err { level(err); };
filter f_cnews { level(notice, err, crit) and facility(news); }; filter f_cother { level(debug, info, notice, warn) or
facility(daemon, mail); };
filter ppp { facility(local2); };
# OPCÕES DE DESTINO
destination authlog { file(“/var/personal/auth.log” owner(“root”) group(“root”) perm(0640)); };
H ar de ni ng e m L inu x
destination syslog { file(“/var/personal/syslog” owner(“root”) group(“root”) perm(0640)); };
destination cron { file(“/var/personal/cron.log” owner(“root”) group(“root”) perm(0640)); };
destination daemon { file(“/var/personal/daemon.log” owner(“root”) group(“root”) perm(0640)); };
destination kern { file(“/var/personal/kern.log” owner(“root”) group(“root”) perm(0640)); };
destination lpr { file(“/var/personal/lpr.log” owner(“root”) group(“root”) perm(0640)); };
destination mail { file(“/var/personal/mail.log” owner(“root”) group(“root”) perm(0640)); };
destination user { file(“/var/personal/user.log” owner(“root”) group(“root”) perm(0640)); };
destination uucp { file(“/var/personal/uucp.log” owner(“root”) group(“root”) perm(0640)); };
destination mailinfo { file(“/var/personal/mail.info” owner(“root”) group(“root”) perm(0640)); };
destination mailwarn { file(“/var/personal/mail.warn” owner(“root”) group(“root”) perm(0640)); };
destination mailerr { file(“/var/personal/mail.err” owner(“root”) group(“root”) perm(0640)); };
destination newscrit { file(“/var/personal/news/news.crit” owner(“root”) group(“root”) perm(0640)); };
destination newserr { file(“/var/personal/news/news.err” owner(“root”) group(“root”) perm(0640)); };
destination newsnotice { file(“/var/personal/news/news.notice” owner(“root”) group(“root”) perm(0640)); };
destination debug { file(“/var/personal/debug” owner(“root”) group(“root”) perm(0640)); };
destination messages { file(“/var/personal/messages” owner(“root”) group(“root”) perm(0640)); };
destination console { usertty(“root”); }; destination console_all { file(“/dev/tty8”); }; destination xconsole { pipe(“/dev/xconsole”); };
destination ppp { file(“/var/personal/ppp.log” owner(“root”) group(“root”) perm(0640)); };
Ca pí tu lo 3 - H ar de ni ng e m s is te m a L in ux – R eg is tr o d e e ve nt os ( lo g) e H ID S
log { source(src); filter(f_authpriv); destination(authlog); }; log { source(src); filter(f_syslog); destination(syslog); }; log { source(src); filter(f_cron); destination(cron);}; log { source(src); filter(f_daemon); destination(daemon); }; log { source(src); filter(f_kern); destination(kern); }; log { source(src); filter(f_lpr); destination(lpr); }; log { source(src); filter(f_mail); destination(mail); }; log { source(src); filter(f_user); destination(user); }; log { source(src); filter(f_uucp); destination(uucp); }; log { source(src); filter(f_mail); filter(f_info); destination(mailinfo); };
log { source(src); filter(f_mail); filter(f_warn); destination(mailwarn); };
log { source(src); filter(f_mail); filter(f_err); destination(mailerr); };
log { source(src); filter(f_news); filter(f_crit); destination(newscrit); };
log { source(src); filter(f_news); filter(f_err); destination(newserr); };
log { source(src); filter(f_news); filter(f_notice); destination(newsnotice); };
log { source(src); filter(f_debug); destination(debug); }; log { source(src); filter(f_messages); destination(messages); }; log { source(src); filter(f_emergency); destination(console); }; log { source(src); filter(f_cnews); destination(xconsole); }; log { source(src); filter(f_cother); destination(xconsole); }; log { source(src); filter(ppp); destination(ppp); };
Feita essa configuração, e lembrando a figura do quebra-cabeça, vamos entender o arquivo do Syslog-NG.
Para analisá-lo por partes: primeiro, a origem.
source src { unix-dgram(“/dev/log”); internal();};
As linhas começam com a palavra source (origem), e logo em seguida vem src, que pode ser qualquer palavra desde que depois possamos entender a que se refere.
Essa origem que aponta para /dev/log são logs locais, ou seja, a origem em questão são todos os logs gerados pelo nosso sistema. Essa é a nossa primeira peça do quebra-cabeça, a nossa origem, mas ainda não estamos fazendo nada com ela.
H ar de ni ng e m L inu x
Depois da origem, nós temos algumas linhas relacionadas à parte de filtro. Vamos a alguns exemplos.
filter f_authpriv { facility(auth, authpriv); };
As linhas de filtro começam com a palavra filter, e em seguida vem f_authpriv, para a qual, assim como nas linhas de origem, nós podemos definir o nome que quisermos, mas sempre é bom adotarmos um padrão para um melhor controle. Por exemplo, adotamos o padrão de que todos os filtros comecem com f_ e o nome do filtro.
Essa linha está criando um filtro somente com as facilidades (facility), auth e authpriv em todos os níveis (level), ou seja, esse filtro engloba todas as mensagens de autenticação, sejam elas avisos, informações, emergências, críticas ou qualquer um dos outros níveis.
filter f_syslog { not facility(auth, authpriv); };
Esse exemplo é o contrário do primeiro, pois está criando um filtro chamado f_syslog, que engloba todas as facilidades e níveis, com exceção das facilidades auth e authpriv.
filter f_cron { facility(cron); };
filter f_kern { facility(kern); };
Exemplo de dois filtros: o f_cron, que registrará todas as mensagens relacionadas ao cron; e o f_kern, que registrará todas as mensagens relacionadas ao kernel.
filter f_messages { level(info .. warn)
and not facility(auth, authpriv, cron, daemon, mail, news); }; Esse já é um filtro mais elaborado. Com o nome de f_messages, engloba todas as facilidades, com exceção de auth, authpriv, cron, daemon, mail e news, nos níveis info até warn.
Os filtros são nossa segunda peça do quebra-cabeça. Fizemos todos os filtros que dese- jamos, mas até aqui não os utilizamos.
A parte seguinte do arquivo é a que trata os destinos (destination). Esses destinos são onde os logs serão gravados.
Vejamos o exemplo.
destination authlog { file(“/var/personal/auth.log” owner(“root”) group(“root”) perm(0640)); };
destination syslog { file(“/var/personal/syslog” owner(“root”) group(“root”) perm(0640)); };
destination cron { file(“/var/personal/cron.log” owner(“root”) group(“root”) perm(0640)); };
Seguindo o mesmo padrão das outras configurações, origem e filtro, os destinos começam com a palavra “destination”, e depois vem o nome que escolhermos. Esses destinos apontam para dentro do diretório /var/personal (diretório que adotamos na nossa estrutura personalizada) e para os arquivos que serão criados, que são os arquivos de logs.